Architecture🛠️ 開発体験(DX)⚡ パフォーマンス・速度
メルカリ (Mercari)
メルカリ、出品機能をPHPモノリスからGoマイクロサービスへ移行
PHPモノリスGoによるマイクロサービス
メルカリJPの出品機能をPHPモノリスからGCP上のGoマイクロサービスへ切り出す過程で、DB接続・トランザクション設計・例外互換性など4つの課題に直面し解決した。
何が起きたか
メルカリはPHPモノリスとして運用してきた出品(Listing)機能を、初の本格的なマイクロサービス化プロジェクトとしてGo・GCP上のサービスへ移行した。課題の一つはGCP上のGoサービスからさくらのクラウド上のMySQLへポートを外部公開せず安全に接続することで、SQL over gRPCサービスと専用クライアントライブラリを開発して解決した。また従来PHPでは商品・配送情報・分析データの更新を単一トランザクションで行っていたが、顧客向けデータは同期更新、内部データは非同期の結果整合性に分割する設計に変更した。移行期間中もPHP側の機能追加が続くため、変更を検知してGo側への反映漏れを防ぐ仕組みや、クライアントが依存するPHPの例外名をgRPC Statusのdetailsで維持する共有ライブラリも構築し、カナリアリリースによるAPI互換性維持を重視しながら移行を進めた。
2018-10-04
他の事例も見る