イベント
メルペイが語る「マイクロサービス開発・運用で気を付けていること」
OpenStack Days Tokyo 2019 / CloudNative Days Tokyo 2019
2019年7月31日 06:01
クラウド技術に関する年次カンファレンスイベント「OpenStack Days Tokyo 2019 / CloudNative Days Tokyo 2019」が、7月22日~23日に開催された。
ブレークアウトセッションでも、大規模なものを含む企業事例が紹介されており、本稿では、2つのセッションの模様をお届けする。
ヤフーのCaaSはどこまで進んだか
「ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発」では、Yahoo! JAPANのプラットフォームについて語られた。なお、同様の話が昨年も発表されており、そのアップデートにもなっている。
セッションでは、プラットフォームを使う側をヤフーの吉岡圭氏が、プラットフォームを作った側をゼットラボの河宜成氏が話した。
吉岡氏は、ヤフーでは技術(テクノロジー)だけでなく開発手法(プロセス)や文化(カルチャー)にわたってモダナイゼーションすることを、約3年前から全社において最重要案件の1つとして取り組んでいると語った。
カルチャーにおいては、複雑なプラットフォーム領域で、加速するテクノロジーの変化に対応するために、Scrum開発を半ば強制的に進めたという。
プロセスにおいては、Scrumに則した組織作りを進めた。中でも、プロダクト単体でなく1つのプラットフォームとして、というマインド向上を目指したという。そのほか、CI/CDを全社的に推進した。
テクノロジーにおいては、CaaS(Container as a Service)を整備してアプリケーションをコンテナ化し、サービスレイヤとインフラレイヤをできるだけ疎結合にした。現在、約50のサービスがKubernetesに乗っているという。
これらの効果としては、デプロイ回数が月1~2回が月4回に、週1回が週2~3回(1日複数回も含む)になった。変更リードタイムも、1日が1時間になった。「こうして開発に使える時間を増やしたい」と吉岡氏。
課題としては、モダン化への理解とスキルチェンジがあった。そこにおいて特に効果的だったのは、モダナイゼーションなプラットフォームアーキテクチャ図、それを構成するサービスカタログ、モダナイゼーションへのクックブックだったという。
吉岡氏は今後について、リーンXP、マイクロサービス、サービスメッシュを挙げ、「モダナイゼーションは終わりがないと考えている」と語った。
続いて、ヤフーの子会社でインフラ開発をするゼットラボの河氏が、ヤフーのKaaS(Kubernetes as a Service)について説明した。昨年の講演で発表して以来、クラスタ数が50から400に急増したという。
利用者が増えると問題も増えるという。具体的には、全社共通の認証認可、スケーラブルなモニタリング、安定しスケールするCI/CD、全社共通のシークレットがある。また、同時接続の多いWebサービスや、1000VM規模のクラスタ、CPU固定化、長時間バッチなど、要件も多様化してくる。
こうしたプラットフォームは、基本的にはヤフーに納品してヤフー側で運用する。ただし、KaaSの利用者サポートについては、Kubernetesに詳しいゼットラボと、社内事情に詳しいヤフーで共同であたる。
ヤフーのKaaSの特徴としては、常に最新のKubernetesを提供しているという。2019年7月の時点で、400クラスタがすべてv1.13~1.14で動いているという。こうした最新環境は、ゼットラボにおいて1カ月で検証し、その後1カ月でヤフーに受け渡しているという。
ゼットラボではこうした保守をしながらR&Dを継続する必要がある。toil(日常的な労苦)を減らして開発時間を増やすために、例えばバージョンアップに伴う各作業をbotにまかせるなどしているという。また、不要なミーティングを減らし、チームメンバーを最小にしたり、issue管理したりなど、大規模なOSS開発コミュニティの手法に学んだという。
またテストを毎日実行。KaaS自身も壊して作り直すのを繰り返すことにより、対障害性の確認にもつながるという。
そのほか新しい課題として、ステートフルなアプリを動かしたいという要件や、より簡単に使えるサーバーレスかつマネージドなアプリケーションプラットフォーム、GPU利用、セキュアなシークレット引き渡しなどが語られた。
最初からマイクロサービスで構築したメルペイの事例
メルペイの高木潤一郎氏によるブレークアウトセッション「メルペイのマイクロサービスの構築と運用」では、メルカリの決済サービスであるメルペイでマイクロサービスを実践したことについて解説された。
メルペイは2019年2月にスタート。40以上のマイクロサービスからなり、200万人以上の利用者、2019年第3四半期で1444億円以上を取り扱うという。
セオリーとしては、最初はモノリシックで始めて後からマイクロサービスに分割すると言われる。それに対し、メルペイでは最初からマイクロサービスを採用した。複数のサービスを短期間で立ち上げるためで、そのために人材もどんどん採用しているという。
そのほか、マイクロサービスではそれぞれ言語やデータベースなどを自由に選択できると言われるが、メルペイでは共通の言語やライブラリを使うことで、情報共有し、品質向上につなげているという。さらに、チーム間の人の移動も可能になるという。
さて、メルペイのマイクロサービスはすべてGoogle Cloud Platform上のGKEで動いている。選択当時はKubernetesプラットフォームとしてGKEが進んでいたからだという。
すべてのサービスが同じGKEクラスタに乗り、チームごとにNamespaceで分かれる。クラスタの面倒はプラットフォームチームが見て、各チームはNamespaceの中を運用することになる。1つのマイクロサービスが1つのGCP Projectになっており、TerraFormで管理しているとのことだ。
メルペイのマイクロサービス開発では、金融サービスなので、一貫性と信頼性に気をつけているという。マイクロサービスのような分散システムのデータの一貫性の担保は難しいが、そこを工夫している。また、信頼性については、マイクロサービスのテンプレートを用意し、社内で開発した共通のGoライブラリを整備することで、必要な機能を漏れなく盛り込むとした。そのほか、最初の設計段階と最後の本番リリース前でレビューを行っている。
マイクロサービスの運用で気をつけていることには、SLO(Service Level Objective)を設定して、何を優先して直すかをサービスごとに決めることがある。また、メトリクス、トレース、ログというObservabilityをサービス横断して見られるようにすることで、問題の特定をスムーズにするという。
最後には、「デプロイ時にサービスが上がりきっていなくてリクエストの一部がエラーになる」「GKEのバグでIngressの再作成に失敗する」など、細かいトラブル事例とその対応が、時間いっぱいまで紹介された。