bosyuのアーキテクチャを紹介してみる
こんにちは、ころちゃんです。
今回は bosyu のアーキテクチャを紹介しつつ、直近の開発環境の改善についてお話しようかと思います。
新しいメンバーがジョインしたときにアーキテクチャを俯瞰して説明できるような資料がほぼなかったので作成したのですが、とくに隠したい情報もないしオープンにしようぜ!と思って書きました。他社のアーキテクチャって雑に見ても楽しいよね。
※2020/03 現在 Buildkite -> Circle CIへ、Lambda -> Cloud Functionsへ移行が完了しており、ほぼGCPで動いています。この資料は少し古めです。
全体構成
シンプルに Rails + GAE で動かしています。サービス譲渡前の時点で既にGAEを使っていて、本番構成は大きく変更されていません。
私個人としてはAWSをガッツリ使っている人間だったので、bosyuに関わりだしてからGCPを触りはじめましたが、スタートアップが小さく素早くサービスを始める上では相性が良いなあという感覚です。RailsであればHerokuを検討すべきだとは思います。勿論AWSも好きです。
チームプランをリリースをしたころに
・CI基盤の改善
・デプロイフローの半自動化
・Sidekiq 導入
・WebpackerをやめてWebpackへ
あたりを進めて、現状に落ち着いています。
図の通りプロダクション環境は非常にありがちな構成だと思うので、直近で改善したCI/CD周りの話をします。
分散テスト環境
初期はほぼテストがない状態だったので、機能開発を進めながらテストを書いてました。CapybaraによるE2Eテスト含めてある程度テストが増え、関わるメンバーが増え、Circle CIのフリープランが限界になるタイミングが来てCIを整備しました。
Circle CIの有料プランで並列数をあげようすると良いお値段してきますので、コストバランス(と楽しさ)を考えてBuildkiteを選択しています。
Buildkiteはテスト実行用の計算リソースを自前で用意する必要があるのですが、CloudFormationのテンプレートが用意されていて、画面ポチポチしていけば10分ぐらいで環境用意できるので爆速ですし、ほぼメンテ不要な状態になっています。構成図にAWSが入っている1つ目の理由はこのためです。
現状だと 8〜40コンテナ(Agent)で並列テストを実行しています。1つのEC2インスタンスごとに4コンテナで運用していて、2〜10インスタンスでスケールするような構成です。設定変えて100並列で動かすのも余裕です。
昔rspecを動かした時のサンプルを貼っておくので参考になれば。
デプロイ
以前は手元でコマンド実行していましたが、デプロイはGitHub + SlackによるChatOpsで自動化するように改善しました。半自動になっていてトラフィックの切り替えだけは手動でやっています。GAEはBlue-Green Deploymentの仕組みが整っているので非常に楽ですね。
デプロイスピードが課題で、GAE/Flexibleのスピンアップが非常に遅く、Docker Imageのビルドタイム含めて20分以上かかってます。遅いッ!
高速にデプロイできる = なんかあったらすぐ戻せる だと思っているので、心理的安全性の担保のためにもいい感じにしたいです。速さは正義だなあと。
GAE/StandardにRubyが来ますが、Ruby 2.5とのことなのでしばらく期待できず。Cloud Runはやく使いたいですね!
マルチクラウド
GCP + AWSの構成になってる大きな理由ですが
・AWS readyなメンバーが増えてきた(特にAWS Lambda)
・bosyuのエンジニアは別プロダクトを兼任している
・別プロダクトでAWSを活用している
が主な理由になります。
Lambdaが得意なエンジニアが多く、bosyu以外のプロダクトでもLambdaを使っていたり、社内botが動いていたりと、ところどころで活用しています。実はBuildkiteによるCI基盤も別プロジェクトで流用しています。
bosyu単体で見るとマルチクラウドをやる必要性はないのですが、会社全体だとプロダクトは沢山ありまして、HerokuやさくらVPS含め色々使っています。このあたりは既存のメンバー/チームが最もパフォーマンス出せる環境とは何かをぼんやり考えています。
今後どっちかに寄せる可能性もありますが、これから考えていくフェーズです。若干カオスですが、逆に今ジョインしてもらうと検討段階から改善を楽しめます!
まとめ
構成図にまとめていて、結構色んなSaaSのおかげで成り立っているな〜と思いました。便利なサービスはどんどん使っていくスタンスです。
まだまだ改善できるところはたくさんあるので、興味があれば一緒にやっていきましょう!
余談ですが、図を書くのに Miro 使ったみたらめっちゃ便利でした。
この記事が気に入ったらサポートをしてみませんか?