※本記事は2022年1月18日に公開された記事の翻訳版です。
Author: @urahiroshi、Web Platformチーム エンジニアリングマネージャー
Web Platformチームのミッション
Web Platformチームは、もともとメルカリWeb版のネットワークインフラとセッション管理サービスを維持するために作られました。しかし、今後はミッションを「メルカリグループのWebプロダクトに対し、Webマイクロサービスのプラットフォームをサービスとして提供する」に変更する予定です。
このミッションの目的を明確にさせていただくと、メルカリには「Camp」という体制があります(https://engineering.mercari.com/structure/) 。Campはクロスファンクショナルな構造で、それぞれのCampにはWebフロントエンド開発者とモバイル開発者がいます。
ただし、Web開発にはいくつかの課題があります。
- モバイルアプリと比較して、WebアプリケーションにはHTTPレスポンスを返すためのインフラが必要ですが、多くのフロントエンドエンジニアはKubernetesのようなインフラの知識に精通していないため、Webフロントエンド開発者がインフラを運用するには、追加の認知的負荷がかかります。
- 認証やセッション管理、ネットワークルーティングなど、複数のWebプロダクトと開発チームで共通の課題があります。
私たちのミッションは、Webプロダクトに関する横断的な問題を解決して、Web開発の認知的負荷を軽減すること、そして最終的には信頼性、セキュリティ、開発者の生産性を向上させることです。
以下のセクションで、私たちが維持・管理しているサービスの種類について説明します。
Web Gatewayサービス
基本的に、Webプロダクトにはそれぞれ独自のWebマイクロサービスがあります。Web Gatewayは、各Webマイクロサービスの前に配置され、適切なマイクロサービスにリクエストをプロキシします。
この構造によってプロキシだけでなく、Webプロダクトに以下のようなネットワーク機能を提供します。
- Cookieによるセッションアフィニティ
- Cookieによるカナリアリリース
- リクエストパスの書き換え
- HTTPヘッダーの変更
- 開発環境に対する社内ユーザーの認証
Webマイクロサービスの多くは、ローリングアップデート戦略を元にKubernetesクラスタにデプロイされていきます。この場合、セッションアフィニティ機能によって、デプロイ中にお客さまのリクエストが、異なるバージョンのサーバーに送信されるのを防ぎます。またカナリアリリース機能によって、すべてのお客さまに新しいバージョンを提供する前に、その動作を確認することができます。
ちなみにweb-gatewayはNGINX Ingress Controllerで構成されています。ネットワーク機能の構成はIngressでおこない、Webプロダクトごとにカスタマイズできます。
Web Authサービス
私たちはWeb Authサービスを運用しており、メルカリのログイン機能をWebプロダクトに提供しています。これには、ログイン画面と新規登録画面を提供するWebフロントエンド、およびそれらに関連する機能が含まれます。たとえば、ソーシャルログイン/新規登録(Google、Apple、Facebook)の機能、パスワードリセット画面、多要素認証機能などが含まれます。
上記機能のバックエンドとインフラも運用していますが、ReactとTypeScriptで書かれたシングルページアプリケーションアーキテクチャを使用しているため、ほとんどの作業はフロントエンドに関連しています。バックエンドサーバはBFFの役割を持ち、既存のAPIに対してWeb用の機能を追加するために利用しており、Goで実装されています
DevOpsツール
またWebプロダクトの開発と運用のためのツールとインフラの提供もおこなっています。
たとえば、E2EテストのインフラはMoonを使用して維持をしています。
このインフラはKubernetesクラスタにデプロイされ、ブラウザの自動化処理を実行するためのAPIインターフェイスと実行環境を提供します。
このE2Eテストのインフラにより、E2Eテストのスケーラビリティと、E2Eテストから開発環境へのアクセス制御を簡単に管理できます。テストの実行結果を保存するためのインフラもAllureを使用して運用しています。
Web開発チームは、このインフラをCI/CD経由で使用し、Pull Request環境とステージング環境のE2Eテストとビジュアルリグレッションテストを実行します。
その他の業務
また、Webフロントエンドチームと連携して、ネットワークアーキテクチャ、キャッシュ戦略、CI/CD、SLI/SLO、On-Callの運用を設計しています。
Webアプリケーションに必要なインフラ、たとえば、ダイナミックレンダリングサーバーのインフラの運用もおこなっています。これは、Headless Chromiumで構成され、クローラーとボット用に動的にレンダリングされたHTMLコンテンツを返すものです。
採用情報
上記のように、私たちは多種多様なサービスを手掛けており、Webフロントエンドからバックエンド、インフラまで幅広い技術要素を扱っています。メルカリの開発チームがお客さまへの機能提供やお客さまの体験の向上に専念できるよう、Webアプリケーションの特徴を理解してそれに合わせたサービスやインフラを提供するためには、これらの技術要素が必要であると考えています。
Web Platformチームの個々のメンバーにすべての知識があるわけではありませんが、それぞれのメンバーには独自の強みがあり、互いに協力することで、チームの責任範囲をカバーできるのです。
そのため、私たちのチームはWebアプリケーション開発、Kubernetes、ネットワークなどの分野のいずれかを得意とするだけでなく、馴染みのない技術領域にも興味を示し、進んで学習できるメンバーを探しています。
メルカリでのエンジニアリングに興味のある方は、ぜひ一度キャリアサイトをご覧ください。