BluecoreによるIstioを活用したKubernetes移行事例
Bluecoreは、大規模にパーソナライズされたメール、サイト上のメッセージ、有料メディア広告を専門とするマルチチャネルパーソナライゼーションプラットフォームです。Bluecore独自のサービスは、顧客推薦データの処理と大量のパーソナライズされたデジタルコミュニケーションの送信を必要とするため、大量のデータの取り込み、処理、送信を扱っています。これは非常に大きなワークロードであり、最近のブラックフライデーには20億通以上のメールを送信しました。
ボリュームに加えて、Bluecoreは迅速性も必要としています。ほとんどのパートナーとのサービスレベルアグリーメント(SLA)で、顧客はジョブの提出から数時間以内にメール、サイト上のメッセージ、または広告を受け取ることが保証されているため、処理速度は非常に重要です。これは、Google App Engineで実行されるモノリシックアプリケーションと、約12,000個のポッドを実行するGoogle Kubernetes Engine(GKE)クラスタの両方を使用して実現しています。
課題:モノリシックアーキテクチャと増加するデータトラフィック
Bluecoreは大規模な運用であり、データ転送と処理に関して厳しい要件があります。彼らは困難な課題に直面していました。処理する必要があるデータ量は継続的に増加しています。アーキテクチャが増加する需要に対応できない場合、パイプラインが過負荷になることを知っていました。
アーキテクチャの調査により、モノリシックアプリケーションが最大の課題となることが明らかになりました。Bluecoreの開発チームは、将来の成長を可能にするために、より柔軟でスケーラブルなインフラストラクチャへの移行を開始する時期だと認識しました。
Kubernetesはスケーリングへの道筋を提供し、BluecoreはすでにApp Engineで実行されていたため、ワークフローの一部をGKEに移行することは簡単なことのように思われました。しかし、Bluecoreのエンジニアの大部分は、コンテナ化されたアプリケーションに関する十分な経験を持っていませんでした。これは、GKEへの移行を困難なものにする可能性がありました。
幸いにも、彼らは解決策を見つけました。
解決策:Istioサービスメッシュによる開発者のエンパワーメント
「Istioは、すぐに開発を始められるアプローチを可能にします」と、BluecoreのインフラストラクチャチームのソフトウェアエンジニアであるShray Kumar氏は説明します。「そして、正しい方法で開発していることを確認できます。」
サービスメッシュがない場合、モノリシックアプリケーションをコンテナ化されたサービスに分割することには、明確な解決策のない多くの課題が伴います。たとえば、認証と認可の実装はその1つです。各コンテナ化されたサービスが独自のソリューションを必要とする場合、個々の開発者が独自の方法でこれを行う可能性が高すぎます。これは、断片化されたコードと将来の多くの頭痛の種につながる可能性があります。
幸いにも、Kumar氏とインフラストラクチャチームはIstioに精通していました。彼らは、BluecoreのデータプラットフォームチームのプリンシパルエンジニアであるAl Delucca氏と緊密に協力して、実装を開始するための計画を立てました。
「私たちは問題を抱えていました」と、Delucca氏は説明します。「しかし、Istioがそれを解決するためのツールであるかどうかは、私たちが判断しなければなりませんでした。」
彼らは、Istioの機能セットが既存の課題に対する多くの解決策を提供していることを発見しました。認可は大きな課題でした。パートナーアプリケーションからの着信メッセージを認証する必要がありました。Istioはエッジでその認証を実行できるため、個々のサービスが独自のメソッドを実装する必要はありませんでした。
「認証と認可をエッジにプッシュできるため、エンジニアはそれらのシステムの理解という負担から解放されます」と、Delucca氏は述べています。「それは彼らがIstioを直接どのように使用するかとそれほど関係ありません。彼らが知らずにIstioが彼らに何をしてくれるかということです。それが鍵であり、私たちにとって大きな成果です。」
エンジニアがモノリシックアプリケーションをサービスに分割し始めると、Istioが解決できる別の課題に遭遇しました。サービスへの呼び出しのトレースが問題になる可能性があるように見えました。多くのレガシー機能には、その依存関係と要件に関する明確なドキュメントがありませんでした。これは、パフォーマンスの問題やリモートサービスの呼び出しにより、開発者が頭を悩ませる可能性があることを意味します。幸いにも、Istioの分散トレーシングが救世主となりました。これにより、開発者はボトルネックとバグ修正や追加作業が必要なサービスを特定することができました。
Istioのサービスメッシュにより、開発者は、インフラストラクチャ全体に関する深い知識を開発することなく、モノリシックアプリケーションを個々のサービスに分割することに集中できました。これにより、Bluecoreのエンジニアは、より迅速に生産性を向上させることができました。
結論:未来
Bluecoreチームはすでに使用しているIstioの機能から信じられないほどの価値を見出していますが、さらに多くの機能を利用しようとしています。これらの機能の中には、自動スケーリングされたカナリアデプロイメントを管理する機能があります。カナリアデプロイメントにより、チームはアプリケーショントラフィックのごく一部を使用してテストすることにより、新しいバージョンのサービスを導入できます。テストがうまくいけば、以前のバージョンを段階的に廃止しながら、アップグレードを自動的にデプロイできます。一方、新しいバージョンに問題が検出された場合は、以前のバージョンに迅速にロールバックできます。
Bluecoreチームは、モノリシックアプリケーションをコンテナ化されたサービスに分割し続け、Istioを使用してますます多くのサービスをエッジにプッシュし、開発者に彼らが最も得意とすることにより多くの時間を与えます。ますます多くのデータをインジェストおよび処理する必要があるため、次の成長段階の準備ができていると確信しています。