タグ

ブックマーク / blog.cybozu.io (14)

  • Go でマルチスレッドプログラミングする際に最低限知っておくべきこと - Cybozu Inside Out | サイボウズエンジニアのブログ

    この記事は、CYBOZU SUMMER BLOG FES '24 (クラウド基盤 Stage) DAY 10 の記事です。 こんにちは。クラウド基盤部の野島です。Gogoroutine やチャネルなどの仕組みが備わっており、簡単にマルチスレッドなプログラムを書くことができる言語だと言われています。しかし、マルチスレッドプログラミングには独特の罠があり、何も知らない人が雰囲気でコードを書くとわかりにくいバグを仕込んでしまうリスクが非常に高いです。 この記事では、マルチスレッドプログラミングに詳しくない人に向けて、そのような罠を避けるための方法を紹介します。この記事は Go の基的な使い方を知っていることを前提としています。 這い寄るデータ競合の恐怖 まずは以下のようなプログラムを考えてみましょう。これは複雑な計算を行って結果を返すような HTTP サーバーのコードです。 // 複雑

    Go でマルチスレッドプログラミングする際に最低限知っておくべきこと - Cybozu Inside Out | サイボウズエンジニアのブログ
    xef
    xef 2024/08/13
  • 今日から分散トレーシングに対応しないといけなくなった人のための opentelemetry-go 入門 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。SRE/データストアチーム の飯塚です。 私たちのチームではデータベースを代理で操作したり情報を取得したりするサービスをいくつか作り、それをプロダクトチームが利用できるように gRPC 経由で提供しています。ところで、ある日突然「分散トレーシングを活用していくことになったので、あなたのチームのサービスも対応させてください」とお願いされたらどうすればよいでしょうか?私はこれまでにいろいろなカンファレンスで分散トレーシングや OpenTelemetry についての講演を聞いていたので、理念は理解した、便利そうだ、導入してみたい、と思ったことは何度かありました。しかし実際に導入しようとして SDK のドキュメントを開いてみると、理解しなければいけない(ように見える)概念や、使い方をマスターしないといけない(ように見える)API の数に圧倒されてしまい、後回しにしてしまっていました。

    今日から分散トレーシングに対応しないといけなくなった人のための opentelemetry-go 入門 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • あなたの「公開鍵暗号」はPKE? それともPKC? - Cybozu Inside Out | サイボウズエンジニアのブログ

    初めに サイボウズ・ラボの光成です。 いきなりですがクイズです。次のうち正しい説明はどれでしょう。 SSHやFIDO2などの公開鍵認証はチャレンジを秘密鍵で暗号化し、公開鍵で復号して認証する。 ビットコインでは相手の公開鍵を用いてハッシュ値を暗号化して相手に送る。 TLS1.3ではサーバ公開鍵を用いてAESの秘密鍵を暗号化する。 答えはどれも間違いです。 公開鍵認証は、(デジタル)署名を使って相手先の正しさを検証するものであり、暗号化は行われません。 同様にビットコインもデータや相手の正当性を確認するために署名が用いられ、暗号化は行われません。 TLS 1.3ではRSA暗号の公開鍵を用いて暗号化する方式(static RSA)は廃止され、ECDH鍵共有された値を元に秘密鍵を生成し、AES-GCMなどの認証つき暗号で暗号化します。 公開鍵暗号とは いわゆる公開鍵暗号には大きく2種類の意味があ

    あなたの「公開鍵暗号」はPKE? それともPKC? - Cybozu Inside Out | サイボウズエンジニアのブログ
  • bpftraceを使ってバイナリの謎の性能劣化を突き止めろ - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ社内ではC++で開発している製品があります。 未知のバッファオーバーランなどの脆弱性への対策として、重要なコンポーネントについてはプロダクション環境で利用しているバイナリでも AddressSanitizer を有効にしてビルドしています。 その製品で利用しているコンパイラをgcc5.3.0からgcc7.5.0に更新したところ性能劣化が発生しました。 製品コードとは別の部分が原因のため、根原因の追跡が難しそうです。perf,bpftraceを使って性能劣化を追いかけてみましょう。 記事で利用しているAddressSanitizer, bpftrace, perfコマンドはネット上に良質な記事がありますので、使い方などの解説は今回は省略させていただきます。 gcc7.5.0において、性能劣化が発生する再現コードとして次のようなものを用意しました。 #include <strin

    bpftraceを使ってバイナリの謎の性能劣化を突き止めろ - Cybozu Inside Out | サイボウズエンジニアのブログ
  • MySQL のレプリケーションから10年間逃げてきた我々が学んだこと8選 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。クラウド運用チームで SRE をしている飯塚です。 今回は、MySQL のレプリケーション機能を約10年もの間ずっと使ってこなかった私たちが、レプリケーションを使った高可用性構成に移行するための取り組みの中で学んだことについて紹介します。 背景 巨大なテーブルへの primary key の付与 トランザクションサイズが大きい場合には tmpdir に注意 mysqldump絵文字が消えていないか要チェック mysqldumpError 1412: Table definition has changed... で失敗する mysqldump したデータのリストアが Duplicate entry 'xxx-yyy-PRIMARY-n_diff_pfx01' for key 'PRIMARY' で失敗することがある mysqldump したデータのリストア時のディスク

    MySQL のレプリケーションから10年間逃げてきた我々が学んだこと8選 - Cybozu Inside Out | サイボウズエンジニアのブログ
    xef
    xef 2020/10/27
  • 2020年のエンジニア新人研修の講義資料を公開しました - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。コネクト支援チームの@tignyaxです。 みなさま、夏はどう過ごされたでしょうか? 私は、夏が好きなのに今年は夏らしいことが出来なくて寂しいなぁとなっています。。。 さて、今年2020年もエンジニア新人研修を行いましたので、その紹介と講義資料を公開いたします。 2020年のエンジニア新人研修について 基的には2019年と同じ形*1での実施となりました。 最初の1週間で必修講義をしたあと、新人の皆さんには2週間ずつ3チームを体験してもらいました。 チーム体験のコンセプトは、新人に「興味のあるチームで実際に業務を体験し、配属希望を決める参考になった。」と言ってもらうことです。 各チーム体験では座学や研修を中心にするのではなく、業務体験が中心です。 チーム体験を通して、配属先を検討する材料にしたり、いろんなチーム/人/業務を知ってもらえる機会となります。 必修講義 誰に: 開発/

    2020年のエンジニア新人研修の講義資料を公開しました - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 複雑怪奇な nginx を Go と Docker でユニットテストする - Cybozu Inside Out | サイボウズエンジニアのブログ

    全国の nginx 職人のみなさま、こんにちは。野島(@nojima)です。 私の所属するYakumoプロジェクトでは、nginxGoDocker によってユニットテスト1しています。 手元で簡単に実行でき、ブランチへのpushのたびにCIでテストされるので、非常に便利です。 この記事では、このnginxのユニットテストについて紹介してみたいと思います。 背景 nginx は極めて柔軟なロードバランサであり、プロダクション環境ではその柔軟さを生かして多彩な役割を担っています。 我々の nginx は、ユーザーからのリクエストを AP サーバーに振り分け、アクセス制限を行い、リクエストをリダイレクトし、HTTPヘッダを付与したり削ったりしています。 しかし、nginx は便利な反面、その設定は極めて複雑になり、読解したり変更したりするのが難しくなっています。 そこで、nginx

    複雑怪奇な nginx を Go と Docker でユニットテストする - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 指数関数expのAVX-512によるベクトル化 - Cybozu Inside Out | サイボウズエンジニアのブログ

    初めに サイボウズ・ラボの光成です。 C++で単精度配列に対する指数関数のベクトル化をAVX-512を使って実装しました。 標準関数std::exp(float)に対する相対誤差は2e-6、速度は10倍ぐらいです。 指数関数をどうやって計算するのか、一般的な話とAVX-512に特有の部分を紹介します。 想定読者 C++とx64(x86-64)のアセンブリ言語の知識を多少仮定しますが、 なるべく少ない前提知識で読めるように心がけます。 ある程度知識のある方は近似計算から読み始めてかまいません。 初めに 想定読者 実行環境 ベンチマーク 速度 誤差 exp(x)の性質 計算の範囲 近似計算 アルゴリズム AVX-512での実装 AVX-512の命令概略 初期化 メインループ floatのフォーマット floatからintへの変換 端数処理 係数の決め方 まとめ 実行環境 AVX-512が使える

    指数関数expのAVX-512によるベクトル化 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 開発・運用本部向け新人研修2018の講義資料を公開しました - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。そろそろプロ野球シーズンの開幕が待ちきれなくなってきたコネクト支援チーム*1の酒井(@sakay_y)です。 サイボウズでは、新入社員全体研修の後に、開発系の新入社員に対して1ヶ月程度の開発研修をおこなっています*2。内容は、毎年改善を重ねていますが、基的には講義+実習です。記事では、先日公開した2018年の研修の講義資料を、全体の流れに沿って紹介したいと思います。 開発・運用研修について 研修は「開発部・運用部に配属される新入社員が、部署配属後に必要となる基礎的な知識/技術/ツールを学び、体験できる。」ことを目的にしています。 新入社員3〜4名を1チームとして、そこに担当のメンターが1名付いて研修を進めていきました。講義では先輩社員に講師をお願いし、開発演習では各チームにメンターとは別の先輩社員が担当スクラムマスター(!)として付きました。 スケジュール 7/2 〜

    開発・運用本部向け新人研修2018の講義資料を公開しました - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 遅いッ!遅すぎるッ!Java の正規表現のお話。 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、ミドルウェア開発チームの青木です。 先日、アプリケーションサーバーが応答を返さなくなるトラブルに遭遇しました。 今回はその時のトラブルの原因と対策の顛末についてお話しようと思います。 現象 アプリケーションサーバーが突如応答を返さなくなりました。 現象が発生したアプリケーションサーバーのスタックトレースを見ると、あるスレッドの先頭が上記のようになっていました。 "qtp258153142-514386" prio=10 tid=0x00007f40b8dbf000 nid=0x7b4e runnable [0x00007f415ccb0000] java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$Loop.match(Pattern.java:4692) at java.util.regex.Pattern$G

    遅いッ!遅すぎるッ!Java の正規表現のお話。 - Cybozu Inside Out | サイボウズエンジニアのブログ
    xef
    xef 2015/05/12
  • x86/x64最適化勉強会6 レポート - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちはサイボウズ・ラボの光成です。 今回は8月31日に開催された「x86/x64最適化勉強会6」の模様についてお伝えします。 今回の勉強会では、6月に発売された Haswell の新しい機能にかかわるものが3件、C++ によるゲーム開発の環境にかかわるもの、ARMと x86 の比較、Xeon Phi についてがそれぞれ1件ずつの発表でした。 以下、それぞれの発表内容について簡単に解説します。 Haswell 関係 私は「Haswellサーベイと有限体クラスの紹介」(動画1)を発表しました。前半は Haswell の復習として、パイプラインの改良点と、256bit 長に対応した整数演算命令 AVX2、積和演算を1命令で行う FMA、いくつかのビット演算命令や暗号用途の整数演算命令などについてサンプルコードを示しつつ紹介しました。gcc 4.8 などの新しいコンパイラでは、ソースコードを変

    x86/x64最適化勉強会6 レポート - Cybozu Inside Out | サイボウズエンジニアのブログ
    xef
    xef 2013/09/05
  • Go のチュートリアルに足りないこと - Cybozu Inside Out | サイボウズエンジニアのブログ

    ちょうど今日から夏休みの @ymmt2005 こと山泰宇です。こんにちは。 夏休みなのにブログを書いている点は突っ込まないでください。 今回は Go を初めて業務に使ったときに躓いた点をまとめた資料を紹介します。これから使いだそうと考えている方は、これを読めば1日分位の調査は省けるかと思います。 ご存知の方も多いと思いますが、GoGoogleC++ が従来担当していたシステム開発用の言語として開発され、2009 年に公開されたプログラミング言語です。ここ最近広く使われだしたようで、一昨日の Hacker News では Go の記事が乱立していました。 cybozu.com でも Go を開発言語のひとつに採用しようとして、まず Python で書かれていたある TCP のクライアント・サーバープログラムを Go で書き直してみました。型どおりに公式のチュートリアルをこなし、

    Go のチュートリアルに足りないこと - Cybozu Inside Out | サイボウズエンジニアのブログ
    xef
    xef 2013/08/24
  • x86/x64最適化勉強会5 レポート - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちはサイボウズ・ラボの光成です。 今回は3月30日に開催された「x86/x64最適化勉強会5」の模様についてお伝えします。 x86/x64最適化勉強会会場 プログラム開発においては、開発の段階において早すぎる最適化は悪、当に必要になってから最小限だけ行いなさいと言われています。 また今どきのコンパイラは優秀なので、下手な小細工はせずにコンパイラに任せておくのがよいとも言われています。 もちろん一般的にはそれは正しいのですが、普段動画や音声を利用するときに使われているコーデック、ネット上での決済時に利用される暗号ライブラリなどは、人の手によるアセンブリ言語で開発されていることが多いのもまた事実です。 私が主催しているこの勉強会はそういう下回りのライブラリを開発するときに必要な技術や情報の交換のために行っています。 ustreamで過去の会の動画も含めてみることができます。 以下、やや

    x86/x64最適化勉強会5 レポート - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 数独の高速化 - Cybozu Inside Out | サイボウズエンジニアのブログ

    「サイボウズ・アドベントカレンダー」の4日目です(これまでの記事一覧)。どうやら三日坊主は免れたようです(笑)。 (0) はじめに こんにちは。サイボウズ・ラボの川合秀実です。私は主にサイボウズ製品の高速化のお手伝いをしています。しかし先日、製品とは関係ないものを高速化したので、今日はそれを発表します。 サイボウズには社内勉強会がいくつかあって、その中にはC++の勉強会もあります。私はサイボウズの勉強会に参加するのが好きなので、このC++の勉強会に参加してみました。この勉強会では、「数独」というパズルを解くプログラムをC++で書いてみよう、というのが最初のテーマでした。参加者各自がプログラムを書き、翌週にお互いにレビューしあうということが行われました。 ここで私はやらかしてしまいました。ええ、そうです、高速化してしまったのです! 言うまでもないですが、誰もこんなことは望んでいません。そもそ

    数独の高速化 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 1