CloudflareのシニアシステムエンジニアAndrea Medda氏と、同社のエンジニアリングマネージャ Matt Boyle氏は、QCon LondonでApache Kafka で1兆件のメッセージの処理を実現するためにプラットフォームサービスチームが学んだプラクティスを紹介した。
Boyle氏はまずCloudflareの技術的課題として自社のプライベートクラウドとパブリッククラウドの提供を挙げ、次にビジネスニーズの拡大・進化に伴って発生するチーム間の結合という運用上の課題を挙げた。そしてMessage Busパターンの実装としてApache Kafkaを選択した経緯を説明した。
Boyle氏はMessage Busパターンはマイクロサービス間の負荷を分散できるが、スキーマ管理が非構造的であるためにサービス間が密結合になりやすいと述べた。その問題を解決するため彼らはJSONフォーマットからProtobufに移行し、メッセージを発行する前に検証するためのクライアントライブラリを構築した。
Apache Kafkaの採用がチーム内で進みはじめると、彼らはApache Kafkaと他のシステム間でデータをストリーミングして、その過程でのメッセージ変換を容易にするコネクタフレームワークを開発した。
パンデミックの際にCloudflareのシステム負荷が高まるにつれ、チームは主要なConsumerでSLAを逸脱するボトルネックが発生していることに気付いた。この問題の根本原因を特定するのに苦労したチームは、Open TelemetryエコシステムのツールをSDKに組み込んで、スタック全体のインタラクションの可視化を向上させたという。
Andrea氏は、SDKの成功によって内部ユーザーが増え、ドキュメントやChatOpsといったサポートの必要性を促したことを強調した。
Andrea氏は、主な教訓をまとめている。
- Apache Kafkaの開発者向けツールを提供する際に、高度に構成可能なアプローチと単純な標準化されたアプローチのバランスを取ること。
- 最大限の可視性を確保するために、シンプルで厳密な1:1のコントラクト・インターフェイスを選択すること。
- 開発ツールのメトリクスを整備して、問題を容易に発見できるようにすること。
- Apache Kafkaの導入と使用の一貫性を維持するために、アプリケーション開発者向けの明確なドキュメント整備を優先すること。
最後にBoyle氏はチームがCloudflareのベストプラクティスに従ってサービスを簡単に作成できるようにするために、開発している新しい社内製品「Gaia」を紹介した。