# メルカリ Web Platform インフラエンジニアとしての業務内容
## チーム概要
現在、メルカリのWeb Platformチームでインフラエンジニアとして勤務しています。チームは9名で構成されており、私を含めて2名がインフラエンジニア、残りはフルスタックエンジニアです。Tech LeadとManagerも含まれています。アジャイルソフトウェア開発のKanban管理手法を採用し、効率的な開発プロセスを実現しています。
## 役割と責任
私の役割は、メルカリのWebサイト(https://mercari.com/jp)のメンテナンスおよび新機能の開発サポートを担当することです。具体的な業務内容は以下の通りです:
- **Kubernetes 管理**:クラスタのスケーリング、アップデート、トラブルシューティングを行い、安定したサービス提供を実現。
- **Webアーキテクチャの決定事項に参加**:サイトのパフォーマンスと信頼性を向上させるための技術的な提案と評価。
- **ネットワーキング管理**:サイト全体のネットワーク設定と最適化を行い、効率的なデータフローを確保。
- **CI/CDの改善と高速化**:継続的インテグレーションとデリバリーパイプラインの効率化を図り、開発速度と品質を向上。
## Static Site Hosting 課題と解決
### 課題
各チームがGitHub PagesとAmazon S3を利用して分散的に静的サイトをホスティングしており、GitHub PagesではプライベートページのパージにGitHubの権限が必要なため、デザイナーなどGitHubアカウントを持っていない人がアクセスできないという問題が発生していました。これを解決するため、システムを統一する必要がありました。
### 解決策
私が提案し、開発した解決策は以下の通りです:
- **Google Cloud Storageを利用**:GitHub Actionsを経由して静的ファイルをアップロードし、統一的なホスティング環境を提供。
- **CloudFlare Workersを使用**:URLリライト機能を活用し、TypeScriptで実装。Vitestを使用してテストも行いました。
### 成果
- **統一管理の実現**:分散されていた静的サイトを集中管理できるようになり、メンテナンスとアクセス権限管理が容易になりました。
- **アクセスの簡便化**:デザイナーや非技術者も簡単に静的サイトにアクセスできるようになり、業務効率が向上しました。
## Global Rate Limiting 課題と解決
### 課題
メルカリのWebサイトはReal UserとBotの対応に二つのBackendシステムを使用しており、それぞれ異なるルーティングが必要です。また、Kubernetes環境で多数のPodが動作しているため、一貫したRate Limitingの適用が困難でした。
### 課題の詳細
- **異なるルーティング**:Real UserとBotのトラフィックに対して適切なRate Limitingを設定する必要がありました。
- **Kubernetesの多様なPod**:多くのPodに対して統一的なRate Limitingを適用する難しさ。
- **スケーリングの必要性**:大量のリクエストに対応するため、スケーラブルなRate Limitingソリューションが求められました。
### 解決策
1. **Cloudflareの利用**
- グローバルなRate Limitingを提供し、全トラフィックに一貫した制限を適用。
- トラフィックの監視と分析をリアルタイムで行い、異常なパターンを検出。
- Bot管理機能を活用し、不正なBotトラフィックを効率的にブロック。
2. **Istio Rate Limitingの活用**
- サービスメッシュを利用し、Kubernetes内の全サービスに統一的なRate Limitingを実施。
- 各サービスに適したポリシーを柔軟に設定。
- 分散トレーシング機能を活用し、トラフィックフローを詳細に分析、最適なRate Limiting設定を行う。
### 成果
- **一貫したRate Limitingの実現**:CloudflareとIstioの組み合わせにより、Real UserとBotのトラフィックに対して一貫したRate Limitingを実現。
- **トラフィック管理の効率化**:リアルタイム監視と分析が容易になり、異常なトラフィックパターンを迅速に検出し対応可能。
- **ユーザー体験の向上**:過負荷によるレスポンス遅延を防ぎ、ユーザー体験を向上。
- **システムの安定性向上**:Botトラフィックを効率的に管理し、システムの安定性が向上。