https://freee-tech-night.connpass.com/event/157012/
会計freeeのデプロイを10倍早くした話
北川修平 (shuheiktgw)
会計freee
- Phusion Passenger
- Capistrano を使ったデプロイ
- 問題点
- 直列デプロイ
- LBから1つづつ外してデプロイしている
- 50分ちかくかかっている
- 直列デプロイ
- 解決案
- EKSへの移行
- AutoScalingGroupを使ったBlue/Greenデプロイ
- サーバー自体のプロビジョニングに4分ぐらいかかる
- アプリケーションサーバー(unicorn)によるホットデプロイ
- これを選択
- デプロイ・ロールバックの時間が短くて済む
- 問題点
- アプリケーションサーバーの入れ替え
- Phusion PassengerをUnicornにした
- 安全に入れ替えるには
- 影響範囲が大きい
- プランBの確保
- Blue/Greenを用意
- 変更対象を深く理解する
- ソースコードリーディング
- 起動から陸セストをさばき始めるまでの流れ
- USR2シグナルを受け取ったときの処理
- 各パラメータの使われ方と影響範囲
- PreloadによるFileDDescriptorの共有
- Linuxのfork処理の理解が必要
- 段階的リリース
- テスト環境での負荷試験
- 「負荷試験コトハジメ」
- 他サービスでの先行リリース
- 本番環境でのカナリアリリース
- 2%程度
- テスト環境での負荷試験
- Unicornへ移行した結果
- 25〜30分かかっていたのが2〜3分に短縮
- デプロイ数の増加
- Redisまわりで一部問題があった
- 25〜30分かかっていたのが2〜3分に短縮
- FusionPassengerの有料版なら同じことできるが、サービス規模で試算したら高額だった
データの構造から再検討するパフォーマンスチューニング
久保卓也 (tkuboma)
- 会計freeeの中の話
- 監視
- Mackrel
- NewRelic
- Monyog
- DBリアルタイム監視に利用
- Datadog
- Redashで見えるか
- index効率、フルスキャンなど
- DBパフォーマンス改善
- indexでチューニング
- explainで地道に
- インデックス追加したり、使うようにしたり
- ActiveRecordのscopeに注意
- indexを無駄にはらない
- 検証は本番相当のデータで
- クエリの変更でチューニング
- 対象データのrowが多すぎる
- 抽出条件の追加
- クエリの結果が変わらないように注意
- アプリケーション側で頑張る
- 対象データのrowが多すぎる
- データの持ちかたの見直し
- idでなくstringでjoinしているテーブル
- マスターデータとunionしている
- マスターデータをコピーしてしまう
- 頻繁にマスターデータが更新されるテーブルだと使えない
- 設計でカバー
- テーブル構成の見直し
- 大量データを都度集計している
- 集計テーブルを作成する
- 圧縮率=削減行数
- 集計テーブルを作成する
- ロック問題
- 別トランザクションにして非同期実行する
- Kinesis streamを利用
- 別トランザクションにして非同期実行する
- 集計テーブルのデータの切り方の設計重要
- リアルタイム性の低下
- 導入までのリードタイムが結構かかる
- 大量データを都度集計している
- 機能の見直し
- 必要以上に実行されていないか
- Home画面とか
- ビジネスサイドとのコミュニケーション必要
- 必要以上に実行されていないか
- slaveへ逃がす
- レプリケーションのラグに注意
- 社内ライブラリを使用(OSSではない)
- N+1の解消
- bullet
- Elasticsearch化
- indexでチューニング
エンジニアがドメインロジックに集中するためのコアパッケージ整備
志賀誠 (@Maco_Tasu)
- コアパッケージ:各サービスで共通して使われるもの
- ロガーやエラーとか
- マイクロサービス化でgoを使うことが多い
- マイクロサービス基盤にK8sを採用
- マイクロサービス化で各チームでそれぞれ作り込んでいて横連携ができていなかった
- サービス基盤
- 全マイクロサービスのコードを読んで機能を洗い出す
- goらしい作りになっているか
- デファクトとしてのパッケージ
- 強制するものではない
- 拡張性
- ダッグタイピング
- go-cloud(CDK)を参考にした
- かんたんに組み込める
- 依存関係
- wire(DIツール)を使う
- 依存の依存も解決してくれるのが良い
- https://developers.freee.co.jp/entry/service-infra-and-wire
- 改善点
- 早めに提供して改善ループをまわす
- 使うことによる利点を伝える
- claat