[レポート] マクドナルド社におけるマイクロサービストランスフォーメーションによるアジリティの実現 #SVS227 #reinvent

re:Invent 2019から、[SVS227] Delivering agility at McDonald's with microservices transformation についてレポートします。
2019.12.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

西澤です。本稿では、以下のセッションについてレポートします。

セッション情報

Consumer applications are excellent conduits for delivering rich features and collecting valuable usage information to power business decisions. Digital enterprises leverage platforms to rapidly hypothesize, test, scale up, and roll out features to remain competitive and agile. At McDonald’s, the largest quick-service restaurant (QSR) chain in the world, microservices transformation on AWS is the foundational solution for empowering business agility at global scale. In this session, learn how McDonald’s, Capgemini, and AWS have created a powerful digital e-commerce platform using Kubernetes, AWS Lambda, and more, and hear how they leverage this solution to deliver innovative features at great speeds without adverse impact to scale, availability, or cost. This presentation is brought to you by Capgemini, an APN Partner.

レポート

AWSプレミアコンサルティングパートナーのCapgemini社のJason Hatch氏と、マクドナルド社のグローバルアーキテクチャーサービスのDirectorであるSean Kinney氏によるトークセッションでした。以下にざっくり私の方で理解できた内容についてまとめてご報告してみようと思います。

はじめに

今日は、マクドナルドがマイクロサービスを利用して、どのようにデジタルプラットフォームを変革し、レストランでのより良い顧客体験を提供しているのかについて、お話します。

まずは、コンテキストについて少しだけ触れておきます。2017年にCapgeminiを戦略パートナーとして招き、新しいモバイルコマースとデジタルプラットフォームの開発を支援することになりました。より豊かな顧客体験を実現するために、デジタルアジリティを求めてマイクロサービス化を進めました。ECSを基本とした新しい宅配サービスに関する取組については、以前のre:Inventでも紹介していますが、今日はそれを改めてより詳しくご紹介したいと思います。

システムの概要

厳しいスケジュールの中、クラウドネイティブなデザイン、DevOps、自動化等を取り入れるため、マイクロサービス化されたコンテナーを利用したアーキテクチャを採用しました。我々には世界中に118もの配送パートナーがおり、アップグレードやテストを顧客へのインパクトなしに実現する方法が求められていました。

まず、はじめにEコマース基盤ですが、こちらには非常に高い信頼性が求められる一方で、マーケティングチームでは新しい試みも必要でした。そのため、コンテナーベースのシステムを利用して一部の段階的なカナリアリリース等の手法も利用しています。マクドナルドは120カ国でのサービス提供のため、毎分250,000のリクエストを処理し、37,000の参照先と連携して、スケーラブルなアーキテクチャが必要でした。

様々なツールを組み合わせた自動化のためにJenkinsを利用したDevOpsを行っています。顧客が増加しており、また、ヨーロッパやアジア、または、他の配送パートナーと連携が必要なWEBオーダーのシステムにおいては、5台のmasterノードと70のpodを有するKubernetesクラスタにしてスケーラビリしての担保と、ダウンタイムなしでのデプロイを実現しています。一部のシステムはビジネス的な観点からまだリスクが大きすぎるため、コンテナーベースの管理に踏み切れず、EC2ベースで動作しているものもあります。

その他の様々なAWS上のツールを組み合わせることで、我々は機能の開発とその改善に注力することができます。ジョブのトリガーとしてLambdaを利用したり、ジョブのステータスをStep Functionsで管理しています。他システムとの連携にはS3を利用し、検索にはElasticsearch Serviceを利用したり、データストアとしては、AuroraとDynamoDBを利用しています。機械学習や分析のためにKinesisを利用したデータ連携も行っています。またサードパーティのマーケティング管理やソーシャルメディア管理のシステムとの連携も行います。そして、これらの仕組みは簡単に拡張することが可能です。現在は北米を中心に展開されていますが、徐々に他のリージョンにも拡大中です。

課題

これらのシステムをスクラッチから構築し、直面した課題や学びについてです。最も大きな課題は、世界中に存在する1,000を超える開発者たちの技術的な成熟度の足並みを揃えることでした。CI/CDのパイプライン構築やブランチ開発戦略において、チームとしてすべての技術を集約して管理する必要があります。そこで、我々はトランクベースの開発モデルを採用することで、全てのチームで課題を共有しながら、CI/CDの仕組みを作り上げました。

移植性や透明性を考慮して、マイクロサービス化を進めたわけですが、SLAベースでのアーキテクチャ設計おいて、全体を俯瞰しつつ、それぞれの機能が正常に動作しているのか、監視し、分析する仕組みを持つことも重要です。

レガシーアプリケーションを分解し、マイクロサービス化をすることも大きなチャレンジでした。新しいサービスをマイクロサービス化することはそこまで難しくありませんが、既存の仕組みを独立してデプロイできるように紐解く作業は困難を伴いました。

負荷分散の仕組みについても様々な考慮が必要でした。連携するサービスが正常に動作していないことを考慮して、エクスポネンシャルバックオフを使ったリトライの実装し、サービスの独立性を保ちつつ、一部トランザクション処理が必要な箇所もありました。また、これらをテストを自動化することで、監視することが必要でした。マクドナルドでは、ランチタイムの負荷のピークが訪れ、二番目のピークがディナータイムに訪れます。24時間営業の店舗も存在しているため、オフピーク時には効果的にコスト節約しました。

経営層への訴求

デリバリービジネスにおいて、その基幹となるシステムをマイクロサービス化した例は非常に珍しいと言えると思いますが、経営層への訴求が不可欠でした。まずは機械学習を利用したパーソナライズされたオファー等の顧客体験の改善を行い、そのレポートの詳細かとマーケティングチームと連携したアピールが重要でした。また、マーケティングチームのアイディアを高速に何度も試すための環境であることも訴求につながりました。また、スケーラビリティを持ちつつ常に最大のキャパシティを維持する必要が無い点は、コスト効率の観点で重要なアピールととなりました。もう1つの観点としては、データ分析基盤との連携し、正確なデータに基づく経営判断ができるようにすることも重要でした。

今後の展望

今後のトレンドの1つと考えられるのは、「自動化」です。全てを自動化し、ボタン1つで、インフラ構築ではterrafromを利用し、Jenkins等のツールを利用してテスト、デプロイの自動化をすることがでいるようになります。今後もテストのカバー率を上げながら、改善を続けていく予定です。

次にポイントと考えているのが、「IoT」の利用です。各店舗にもインテリジェントデバイスを配置し、様々な情報を集約することです。

また、「AI」と「機械学習」も活用が進んでいます。パーソナライズされたレコメンデーション機能やドライブスルー体験の向上等のための音声注文の仕組みも検討しています。

このような新しい取り組みにおいて、AWS環境は必要不可欠なもので、この1年に1回のイベント(re:Invent)で発表される新サービスを我々も楽しみにしています。

まとめ

そこまで詳しく技術に立ち入った話があるわけではなかったので、一般論として語られるような話題も多かったのですが、マクドナルドのような世界規模の企業がこのようなコンテナベースのマイクロサービス化への取り組みを行っていることは驚きでした。また、最後のあたりは重複する情報もあったので、少し端折ったところもありますし、翻訳も不正確なところもあるかもしれませんが、英語のトークセッションを理解してまとめる作業は正直かなり骨が折れました。まあ自分にとっても良い英語のトレーニングになったと思います。こういうセッションをリアルタイムで理解できるようになりたいです。