Kyrios Blog

AWSのSimplexityの追求 | AWS re:Invent 2024 現地レポート

AWSのVP兼CTOであるDr. Werner Vogels 氏が、ますます複雑化するシステムを管理するために学んだ重要な教訓と戦略について講演したKeynoteの様子をご紹介します。AWSが大規模な分散システムを構築した経験に基づいて、複雑さを受け入れるための基本原則について探り、システム設計や運用におけるシンプルさと複雑さの関係を深く掘り下げました。



登壇者

  • Dr. Werner Vogels: VP and CTO, Amazon
  • Robert Christiansen: VP, Engineering, Too Good To Go
  • Andy Warfield: VP / Distinguished Engineer, AWS
  • Brendan Humphreys: CTO, Canva


シンプルさと複雑さの関係

Dr. Vogels は、「システムが複雑になるのは避けられない」としながらも、シンプルさを保つことが重要であると強調しました。彼は、複雑さの管理には意図的な設計と継続的な見直しが必要であり、これがシステムの運用において重要な要素であることを示しました。

シンプルなシステムの例として、自転車をあげていました。自転車は基本的な構造を持ちながらも、様々な用途に応じて進化できます。また、一輪車と自転車を比べると自転車のほうが使いやすいように、要素をただ減らせば複雑性は排除されるのかと言われればそういうことでもありません。

「Simplicity」と「Simplexity」の違い

「Simplicity(シンプリシティ)」と「Simplexity(シンプレクシティ)」は、システムやデザインに関連する重要な概念ですが、それぞれ異なる意味を持っています。

  • Simplicity
    シンプルさや簡潔さを指し、複雑な要素を取り除くことで理解しやすく、使いやすい状態を目指します。例えば、直感的なユーザーインターフェースや無駄を省いた製品設計がこれに該当します。シンプルなデザインは、ユーザーが容易に操作できることを重視しています。

  • Simplexity
    シンプルさと複雑さの融合を表現する言葉です。表面的にはシンプルに見えるシステムやデザインの裏には、実際には複雑なメカニズムや高度な機能が存在することを示します。例えば、使いやすいソフトウェアがその裏で高度なアルゴリズムやデータ処理を行っている場合などが該当します。

Simplicityは使いやすさを重視し、Simplexityはシンプルさと複雑さのバランスを強調します。効果的なシステム構築には、両方の要素を考慮することが重要です。


意図的な複雑さと非意図的な複雑さ

また、「複雑さ」の発生する過程の違いについても触れられました。

  • 「意図的な複雑さ」
    システムのスケーリングや新機能の追加などにおいて加わる複雑さで、システムが成長する過程で必要なものであり、計画的に取り入れることが求められます。

  • 「非意図的な複雑さ」
    設計ミスや不適切な管理から生じるものであり、これは避けるべきであり、減少させる努力が必要になります。


シンプルな設計の重要性

シンプルな設計は、システムの柔軟性と信頼性を維持するために不可欠です。シンプルさを追求することで、システムは変更に対して強くなり、運用コストを削減することができます。シンプルな設計の原則は、システムの複雑さを管理するための基本的な指針となります。

シンプルなサービスの進化

AWSのサービス、特にS3は、シンプルなAPIを提供しながらも、内部的には複雑なシステムを進化させてきました。S3は、ユーザーに対してはシンプルなインターフェースを提供しつつ、バックエンドでは複雑な処理を行っています。さらに、Amazon Aurora D SQLでは、仮想的に無制限にスケールアウトが可能になり、正確な時刻同期を実現することによりアーキテクチャをシンプルにしています。これにより、システムの運用が容易になり、ユーザー体験が向上しています。


「小さなチームの重要性」 - 2枚のピザチームの概念

「チームごとに2枚のピザ」という言葉は、ピザ配達員がピザを落としたエピソードから生まれたもので、機能的な階層を解体し、小さな自律的なチームに再編成するきっかけとなりました。このエピソードを通じて、チームのサイズを小さく保つことが、効率的な作業を促進することが示されました。

  高いパフォーマンスを発揮する組織 - Amazon ピザ 2 枚チーム | AWS Executive Insights 真に高いパフォーマンスを発揮するアジャイルな組織になる方法 Amazon のピザ 2 枚チームのコンセプトの詳細をご覧ください。ピザ 2 枚では足りない大きさのチームを編成すべきではありません。これは、10 名未満のチームであることが理想的です。 Amazon Web Services, Inc.


組織構造の再編と、チームの自律性

このエピソードを受けて、AWSは従来の機能的な階層を解体し、小さな自律的なチームに再編成しました。各チームは「2つのピザで十分に食べられるほどの小ささ」を目指し、これにより各チームが自律的に機能し、効率的な作業が可能になりました。小規模なチームは、コミュニケーションが円滑になり、迅速な意思決定ができるため、イノベーションを促進します。

小さなチームにすることで、各チームが自律的に機能し、効率的な作業が可能になります。自律性は、チームが自身のアイデアを所有し、成功を祝うことができる環境を提供します。効果的なリーダーは、チームに問題を提示し、その重要性を説明し、チームが自分たちのアイデアを実現するためのサポートを行うことが求められます。


AWSの技術的進化:継続的な学びの重要性

Dr. Vogelsは、Amazonでの20年間の経験を通じて、継続的な学びの重要性を強調しました。特に、顧客のニーズに応えることが技術的進化において不可欠であり、顧客からのフィードバックを受け入れ、それに基づいてシステムを改善する姿勢が必要です。

AWSアーキテクチャの進化

AWSのアーキテクチャは、モノリスからサービス、マイクロサービス、そして共有サービスインフラストラクチャへと進化しました。この進化により、イノベーションの速度が向上し、市場のニーズに迅速に応えることが可能となりました。特に、Amazon S3は初期の6つのマイクロサービスから300以上に成長し、シンプルなインターフェースを維持しつつ、内部的には複雑な処理を行えるようになっています。

ネットワークインフラとホストシステムの革新

AWSは、進化可能なネットワークインフラを構築するためにBlackfootを開発し、ネットワーク機能を柔軟に変更できるようにしました。また、Nitroの導入によりホストシステムのパフォーマンスが向上し、ネットワーク機能をボックス外に移動させることで、全体の効率性が高まりました。これらの革新は、AWSのインフラストラクチャを強化し、より高いパフォーマンスを実現するための重要な要素です。


Canvaの成長とスケーリング

セッションでは、CanvaのCTOであるBrendan Humphreys氏が登壇し、事例が紹介されました。

  Canva https://www.canva.com/ja_jp/about/

初期のアーキテクチャとスケーリング計画

Canvaは初期にモノリシックなアーキテクチャを採用し、将来的にはマイクロサービスへの移行を計画しています。この設計はステートレスであり、水平スケーリングが可能で、急速な成長に対応するための基盤となっています。

データベースの進化とAPIの提供

データベースはMySQLから複数のインスタンスに分解し、最終的にはDynamoDBに移行しました。特にメディアサービスの成長に伴い、MySQLのスキーマ調整も行われました。また、CanvaはAPIとSDKを提供し、120カ国以上の開発者がアプリを構築する活発なマーケットプレイスを形成しています。現在、Canvaは1秒あたり約1.2百万のリクエストを処理し、162ペタバイト以上のメディアを管理しています。


進化性の要件と重要性

システムが時間とともに成長する中で、アーキテクチャの選択を再検討することが重要です。進化性は、長期的な戦略としてシステムの複雑さに対処するために必要であり、未来のニーズに柔軟に対応できる能力を持つことが求められます。

進化性と保守性の違い

進化性は長期的で大規模な機能や構造の強化を指し、保守性は短期的で局所的な変更を意味します。進化性は、システムが将来的な変更に容易に対応できる能力を持つことを示し、ビジネスの変化に迅速に適応するためには不可欠です。

進化性のための設計原則と実例

ビジネスコンセプトをモデル化し、内部の詳細を隠す細かいインターフェースを持つフォーカスコンポーネントを構築することが推奨されます。また、分散化と独立したデプロイ可能性を利用して、個別に進化できるようにすることが重要です。

Amazon S3は、シンプルなAPIを提供しつつ内部的には複雑なシステムを進化させてきた例であり、顧客に影響を与えずに新機能を追加し続けることで、進化性の重要性を体現しています。さらに、BlackfootやNitroなどの基盤が構築され、ネットワークやホストシステムの進化性を確保しています。


システムの自動化

複雑なシステムの管理と自動化の必要性

自動化は、複雑な大規模システムを管理するために不可欠です。特にAWSでは、耐久性、容量、リージョンの構築などにおいて自動化が活用されており、運用コストの削減やエラーの減少を実現しています。

標準化と効率性の向上

自動化は標準的なプロセスとして考えられ、何を自動化しないかを明確にすることが重要です。手動入力は高度な判断が必要な場合に限定し、自動化を進めることで効率性が向上し、人的エラーを減少させることが可能です。

セキュリティとサポートチケットの自動化

セキュリティ分野でも自動化が重要で、脅威インテリジェンスの自動化により膨大なデータを効率的に処理し、迅速に脅威に対応できます。また、サポートチケットの処理においても自動化が推奨され、エージェントワークフローを活用することで顧客の問題に迅速に対応し、顧客満足度を向上させることができます。

さいごに

このセッションでは、システムの複雑さとシンプルさの関係について深く掘り下げ、「Simplexity」の重要性を強調しました。システムが複雑になることは避けられないが、意図的な設計と見直しを通じてシンプルさを保つことが不可欠であると述べました。このシンプルさは、システムの柔軟性や信頼性を維持し、運用コストを削減する基盤となります。自動化の重要性も強調され、特に複雑なシステムの管理においては運用コストの削減やエラーの減少に繋がることが示されました。

「複雑さ」の弊害については、日々の業務でも実感する点が多く、「シンプルさ」を意識した設計構築に取り組む重要性を改めて感じました。また、システムにおいても、組織においても、シンプルさを大切にすることが、新しい技術を受け入れる余裕やフレキシブルさを持つことであるという気付きを得ることができました。そのような意識を、常に適切で機能する大きさのチームで共有していることが、複雑化を最小限に留めるうえで、大切なのかもしれません。

Kyriosブログ新着記事

Kyrios 導入事例