天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

成長を続けるfreeeとマネーフォワードはサービスの信頼性をどう担保しているのか?に参加してきた

freee.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

組織の規模の拡大、サービスのユーザ数の増加によってサービスの信頼性確保がより強く求められています。

サービスの信頼性を確保し安定稼働を実現するには、スピーディかつ必要な水準を満たしたインフラ構築や安全なリリースの仕組み、急激なユーザリクエストにも耐えられるリソースの確保など超えなければならないハードルがいくつもあります。

これらのハードルを乗り越えてサービスの信頼性を確保するために、SRE はインフラ構築の仕組み化やスケーラビリティの確保、コスト最適化の両立などに頭を悩ませています。 このイベントでは急成長を続ける SasS 企業である freee とマネーフォワードが実際に実践しているサービスの信頼性確保の取り組みをお話します。

スピーディかつ安定したサービスリリースを提供する方法、スケーラビリティを確保しつつコストの最適化を図る方法などを LT 形式で紹介していきます。

会の様子

LT1: 100以上のクラスタに立ち向かえ〜freeeのEKS Upgradeに対する取り組み〜

最初にgamiさんからお話がありました。

freeeのインフラ構成は、kube-aws- > EKSへと2019年から段階的に移行していったそうで現在では95%以上、100クラスタ以上がEKSで稼働しているそうです。
また、EKSのセットアップは、terraform-aws-modules/eks/awsをラップした社内モジュールによるAWSリソースの構築後にk8sリソースの構築をするという形でしているということでした。

EKS Upgradeは元々SREが担当していたそうですがクラスタが増えるにつれてSREが全て担当するのは難しくなり、開発チームに作業移譲をするようになったということでした。

ただ、それでも30-40hかかってしまっているため、暫定的な対策として、手順整備&改善を実施しながら、Argo Workflows化をしたり、長期的にはk8sのテナント再設計をしてクラスタ数が本当に適切かを検討しているということです。

LT2: KEDAでスパイク負荷を迎え撃つ〜メトリクスとスケジュールドリブンなオートスケールでKubernetes上のプロダクトの信頼性を高めよう〜

次に佐々木さんから話がありました。

サービスが急激にスケールしているような段階では、インフラをお金で増強する手段もあるとは思いますが、組織が一定大きくなってプロダクトも安定してくるとコスト削減しながら高い品質を保つ重要性がより高くなるため、そこで如何にしてコストと品質の両輪を保つか考えてみようということでした。

考えるにあたっては、勤怠システムを事例として、KEDAを使ったイベントドリブンのオートスケールの話がありました。

KEDAはCronをはじめイベントドリブンでスケーリングをすることができますが、KEDAを使ってチューニングする際は、大きな山だけを見るのではなく変化率の観点で負荷分析するのが重要だということで、もし負荷分析ができていないなら本当に少しずつチューニングすることが必須だということでした。

LT3: 1ヶ月から1週間へ! freeeのインフラ構築ツール紹介

続いて、Nagaokaさんから、freeeops(自社ツール)でインフラを自動構築した話を聴いていきました。

freeeでは、サービス特性上aws基本構成の類似点が多いことから、freeeopsでテンプレートを作成したそうで、50個以上のタスクがone commandで実行できるようになり、1週間で構築ができるようになったということです。

ツールを開発/運用するに当たっては、

  • Golang開発経験が少なく開発が属人化した
  • ドキュメントが足りず問い合わせが殺到した
  • freeeopsのテンプレート内で利用する社内モジュールアップデートを手動反映する必要があった

といった課題を解消しながら開発したそうで、チームの情報共有や自動化などを活用したということでした。

また、リリース前にインフラ状態をチェックするためのチェックリストを作って、品質の担保も行うようにしているそうです。

LT4: 〜計測でサービス危機を未来予測する〜 MySQLテーブル毎のデータサイズ集計をDatadog × Prometheus Exporter × Kubernetesを使って自動化した話

最後にVTRyoさんから話がありました。

サービスの信頼性は重要だと言われ続ける一方で、フェーズによって重要視するメトリクスも変わり、結果的に運用作業限界への恐怖が次第に出てきたそうです。

そこで、データサイズ集計を自動化したそうで、Datadog, Prometheus Exporter, k8sを活用することにしたというお話がありました。

また、活用の際のポイントとしては、

  • k8s manifest(Dockerでの使用方法のみしか説明がないのでk8s用に修正した)
  • MySQL settings(UserとGRANTが必要)
  • Datadog Dashboard view(あらゆる形式で表示できるようにする)

があったということでした。

会全体を通した感想

発表者の方々が抱えているサービスの特性上、高い信頼性が求められると思うのですが、その信頼性を担保するために運用でしている工夫(それも5年-10年の過程)が聞けて非常に面白かったでうs。

自動化関連のお話は、自動化する前にここを自動化しようと踏み切ったステップに関して話があるとよりありがたいなあと思ったのですが、ここはまた次回に期待しようと思いました。