BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース QCon NY: Matt Klein氏の講演 - Lyftにおけるサービスメッシュアーキテクチャ導入

QCon NY: Matt Klein氏の講演 - Lyftにおけるサービスメッシュアーキテクチャ導入

原文(投稿日:2018/07/03)へのリンク

LyftエンジニアリングチームのMatt Klein氏がQCon New York 2018 Conferenceで、Envoyサービスメッシュアーキテクチャについて講演した。同社は最初のマイクロサービス導入で運用上の問題に直面して、サービスメッシュアーキテクチャの使用に移行している。

Klein氏は、Amazon Web Service (AWS) Elastic Load Balanser (ELB)をベースとして、PHP/ApacheモノリスとバックエンドデータベースにMongoDBを使用していた5年前からのアーキテクチャ上の進化について論じた。3年前にマイクロサービスを使い始めた頃、同社では依然としてモノリシックなアプリケーションをメンテナンスしていた。このモデルで問題となったのは、複数の言語(PHP、Python、NodeによるフロントエンドコードとGoのサービス)とフレームワークの存在だ。MongoDB、Rails、キャッシュサーバに接続するプロトコルも多数あった。もうひとつの課題は、メトリクス/統計、トレース、ログに関する可観測性(observability)の欠如だ。サービス再試行やサーキットブレーカ、レート制限、タイムアウトといった機能は、完全には実装されていなかった。

一般的にこれらの問題は、すべてがネットワークと可観測性に行き着くものだ、とKlein氏は述べている。従って、可観測性をソリューションに組み込むことが極めて重要だ。それと同時に、アプリケーション開発チームは、これらの機能をすべてのプロジェクトでスクラッチ開発するようなことは避けるべきである。開発者がビジネスロジックやアプリケーションコードを書かないというのは、そのすべてが時間の無駄なのだ。

Lyftの現在のアプリケーションアーキテクチャは、すべてEnvoyを通じて通信するサービスをベースとしている。サービスメッシュアーキテクチャの背景にあるアイデアは、サービスからネットワークを完全に抽象化することだ。同時にそれは、開発者からも抽象化されることになる — ローカルホスト上で動作するすべてのサービスには、サイドカープロキシが付随する。サービスはサイドカーと通信し、それが別のサービス(を直接呼び出す代わりに、そのサービス)のサイドカーに通信して、サービスディスカバリやフォールトトレランス、トレースの実装などを行う。

Envoyはプロセス外アーキテクチャとして、以下の機能をサポートする。

  • TCP/IPプロキシのようなL3/L4フィルタアーキテクチャ
  • HTTP/2ベースのL7フィルタアーキテクチャ
  • サービスディスカバリとアクティブ/パッシブヘルスチェック
  • ロードバランシング
  • 認証と承認
  • 可観測性

Envoyは中間プロキシ、サービスプロキシ、エッジプロキシとして使用できる。エッジプロキシはインターネットゲートウェイ(外部からの着信ポイント)に配置され、サービスディスカバリやロードバランシングなどの問題を処理するものだ。

Klein氏はまた、Envoyを使い始めた後の開発者エクスペリエンスについても論じた。サービス毎に自動生成された、一貫性のあるダッシュボードがすべてのサービスに対して提供され、問題点のトラブルシュートを支援する。ダッシュボードには処理対象データへのリンクがあり、クリックすると詳細が表示される。ダッシュボードをクリックするとトレースUIにナビゲートされて、アプリケーションのどの部分の応答時間が長いかを確認することができる。Lyftチームでは現在、サービス間のギャップなく、100パーセントのトレースカバレッジを実現している。着信するクライアント要求にはそれぞれユニークなIDが割り当てられ、ログとの相関に利用される。ダッシュボードにはサービス間の通信のオーバービューも表示される。各サービスにはドロップダウンが表示されており、テンプレートから呼び出し元と呼び出し先を選択することで、どこでエラーが起きたかを確認できる。また、Lyftの20,000台のホストをサポートするグローバルヘルスダッシュボードは、システムの状態を見るファーストストップとして頻繁に利用されている。

Klein氏はさらに、Envoyベースの構成管理ソリューションがDiscovery Service (xDS) APIに基づいたものであることを説明した。ディスカバリAPIにはListener Discovery Service (LDS)とCluster Discovery Service (CDS)があり、レガシサービスを使用したサービスディスカバリと新たなサービス用の新ソリューションとを区別するアーキテクチャをサポートしている。Lyftの現在のEnvoyデプロイメントには100のマイクロサービス、10,000のホスト、毎秒500~1,000万のメッシュリクエスト要求(RPS)が含まれている。すべてのエッジ、サービス・ツー・サービス (StS)、外部パートナの大部分は、このデプロイメントに含まれる。

導入の立場から見たEnvoyは、2016年9月にオープンソースとしてリリースされたコミュニティプロジェクトである。品質と速度、拡張性、さらには一貫性を持った構成APIのサポートの面から、開発者はEnvoyを使用してはどうか、とKlein氏は提案した。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT