300人から1000人へ――メルカリは開発組織を拡大するため「マイクロサービスアーキテクチャ」を採用した(前編)Mercari Tech Conf 2018(4/5 ページ)

» 2018年10月11日 08時00分 公開
[新野淳一Publickey]

gRPCをコミュニケーションプロトコルに採用

 次にサービス間のコミュニケーションプロトコルの統一です。APIゲートウェイとサービスの間、サービスとサービスの間のコミュニケーションプロトコルとして、われわれは「gRPC(Googleが開発したRPC=Remote procedure call用のプロトコル)」を採用しています。

 gRPCではProtocol Buffers(プロトコルバッファー)というIDL(インタフェース定義言語)を使って、サービスのインタフェースを定義します。それを基にあらゆる言語のライブラリを生成できるので、初期の実装コストを減らせる他、インタフェースの定義の効率化を図れます。

 各マイクロサービスのプロトコルバッファーの定義などを簡単にできるよう、私たちは「platform-proto」というリポジトリを作成しました。各サービスの開発チームは、自分たちのサービスのプロトコルバッファーの定義を書いて、このリポジトリにプルリクエストできます。

 プルリクエストがマージされると、Go、Python、Java、Node.jsといった、メルカリでよく使われている言語のクライアントやサーバをCI(継続的インテグレーション)ツールで自動生成できるようになります。この仕組みによって、マイクロサービスを提供する側も使う側も、すぐに実装を始められます。

 また、プロトコルバッファーの定義を1カ所にまとめているため、これがドキュメント的な役割も果たせるわけです。例えば、サービスAを使いたいときは、このリポジトリでプロトコルバッファーの定義を見れば、サービスAをどう呼び出せばいいか簡単に分かります。

photo 各サービスのプロトコルバッファーの定義を記した「platform-proto」というリポジトリは、各サービスの呼び出し方をまとめたドキュメントのような役割も果たせる

マイクロサービスのためのテンプレートを提供

 次に私たちが整えたのは、新規にマイクロサービスを作るためのテンプレートプロジェクトの提供です。

 これまでメルカリのメインの言語はPHPでした。マイクロサービスではメインの言語としてGo言語を採用していますが、全てのエンジニアがGo言語を得意としているわけではありません。そこで、すぐにマイクロサービスの開発を始められるように用意したのが「mercar-echo-jp」というテンプレートです。

 これは受け付けたリクエストをそのまま返すだけという、非常にシンプルなgRPCアプリケーションですが、この中に標準のGoのパッケージ構成や、本番運用で必要なモニタリング、エラーレポート、ヘルスチェックなども実装しています。

 また、コンテナ化のための標準的なDockerfileや最低限必要なCIの設定ファイルなども含んでおり、マイクロサービスの開発者は、このリポジトリをコピーするだけで、すぐに開発を始められるわけです。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ