Upgrade to Pro — share decks privately, control downloads, hide ads and more …

シェアリングサービスのトランザクションを支えるGo

 シェアリングサービスのトランザクションを支えるGo

More Decks by 最新技術のエンジニア勉強会!シューマイ! ~Tech Lead Engineer~

Transcript

  1. 写真 2 自己紹介 経歴 NECソリューション イノベータ株式会社にて、 官公庁向けASPサービス事業にてソフトウェア 開発チーム リーダーとして事業拡大に貢献。 2019年に株式会社スペースマーケットへ入社。プ

    ロダクト開発やエンジニア組織強化に従事。 2020 年よりCTOとして全社の技術戦略を担当。 趣味 カラオケ、ギター、機械学習 齋藤 哲・株式会社スペースマーケット
  2. 13 そんな折に挙がった予約導線の改善施策 • 従前の UI ではプランを選択した上でカレンダーを表示 ◦ カレンダー表示の計算対象は1プランのみ ◦ この状態で

    API 処理のみで平均およそ 500 ms • 施策の一環で、カレンダーで日時を決めた後にプランを選択 ◦ 全てのプランが計算対象に ◦ 10 以上のプランをもつスペースあり ◦ 従前のまま素直に実装すると数秒かかることに・・・
  3. 22 処理系の比較結果 Go が最適と判断 判断基準 Go Java Node.js Rust C++

    計算処理のパフォーマンス 3 2 1 5 4 並列処理の実装・保守の容易性 5 4 3 1 2 採用実績やエコシステムの充実 2 5 3 1 4 言語としてのシンプルさ 5 3 2 4 1 合計 15 14 9 11 11 ※ 社内での比較のため独自に調査した資料であり、処理系としての優劣を示す資料ではありません
  4. 25 苦労した点 • 性能最大化を図るため database/sql パッケージで SQL を直叩き • I

    / O スループットを高めることができたが・・・ • 並列処理も相まって接続プールの奪い合いからの実行時エラーが多発 • 以下のパラメータを調整してなんとか接続プールを循環できるように ◦ SetMaxOpenConns() ◦ SetMaxIdleConns() ◦ SetConnMaxLifetime() • ご参考:SQL ドライバ => go-sql-driver/mysql データベース接続プールの最適化
  5. 27 効果 • オンライン処理の応答性能 ◦ 平均およそ 500 ms から数十 ms

    に向上 ◦ 性能テストの結果、平常時トランザクションの約5倍まで劣化 なし • キャッシュ更新の所要時間 ◦ 差分更新に当たり平均 15 分以内