この記事は、2020 年に開催された VMware Tanzu の年次イベントである SpringOne でのセッション「IoT Scale Event-Stream Processing at Penske」を元に構成したものです。
EC サイトでのショッピングなどを追い風に、物流に対する需要は年々高まっています。米国のペンスキー ( Penske )社は、トラックのレンタル、トラックのリースとメンテナンス、物流、そして中古トラックの販売といった形で、輸送においてユニークなビジネスを展開しています。
図:Penske 社のWebサイト
ペンスキーは「トラック」を中心にビジネスを展開しているわけですが、ビジネスを成長させるために「コネクテットフリート (トラック群)」の構想を打ち立てます。狙いとしては、トラックの全車両とリアルタイムで接続し、収集されたデータに反応し、問題が発生する前に解決することと、その能力をどのようにマネタイズするかという点でした。
コネクテッドフリートのビジネス効果
ペンスキーは自社の全トラックをネットワークに繋げることで以下のビジネス上の成果を得ることができました
- 米国内のどこでもどんなトラックでも遠隔診断が可能に
- トラックの性能をより深く知ることが可能に
- フリート管理の意思決定をデータを基に実施
- データを指先で操作できるツールへのアクセス
- ドライバーが必要とするペーパーワークの管理を支援
- すべての法律と政府規制の遵守を保証
ソリューションアーキテクチャの基本的考え方
ソリューションの構築にあたり、アプリケーションとプラットフォームに求められる基本構想を以下のように定義しました。
アプリケーション:
- Spring Boot を標準とする
- マイクロサービスパターンのサポート
- アプリケーションインスタンスを自動スケールできる能力
- 本番環境への流れの自動化
- 構成管理とクレデンシャル管理との統合
プラットフォーム:
- 開発者がセルフサービスで環境を利用できること
- 業務時間にダウンタイムなしにアップグレードできること
- メモリーとサーバーの利用効率を最大化できること
- 自動化の効率と一貫性の向上
- ペンスキーのセキュリティと監査ニーズに遵守できること
ペンスキーの開発者の多くは、Spring テクノロジーを活用することに非常に慣れていました。これらの機能を開発する際に念頭に置いたのは、マイクロサービスアーキテクチャをサポートする12ファクターのアプリケーション原則に則って、クラウドネイティブアプリケーションを開発するということでした。 一方、コードがソースコードリポジトリにチェックインされると、ソースコードリポジトリから本番環境までのエンドツーエンドが自動化され、同時に設定や認証情報が自動的にこの環境に統合されるようになりました。プラットフォームの観点から、ペンスキーでは、開発者がセルフサービス機能を持ち、このプラットフォームを展開する際に必要なことを確認することにこだわりました。
このプラットフォームを展開する際、営業時間内にパッチを当てながらもダウンタイムがゼロになるようにしなければなりません。プラットフォームは AWS クラウド環境で稼働するため、利用率を最大化し、インフラとしてのコストを抑えることが必要でした。同時に利用率を最大化し、インフラ消費の観点からコストを低く抑えることができるよう、プラットフォームの導入とロールアウトを自動化することが必要でした。
この IoT アーキテクチャでは、トラックからのセンサーデータは、Spring Boot で開発した Poller アプリケーションが受信し、 VMware Tanzu Application Service プラットフォームに継続的に取り込まれます。取得したデータは、 Spring Cloud Data Flow と Kafka フレームワークを使用してリアルタイミングにストリーミングします。リアルタイムのユースケースでは、インメモリキャッシュ ( VMware GemFire )を使用しています。GemFire はデータの高速検索と高速挿入のために使用されます。大量のデータ分析やヒストリカル分析、機械学習のようなユースケースには超並列データベース (VMware Greenplum )の機能を使用しています。
プラットフォームのハイライト
この IoT プラットフォームにおいては、堅牢性、セキュリティ、スケーラビリティの3つの主要な分野で取り組み、お客様や開発者にとって望ましいプラットフォームを提供することができました。
堅牢性:
- 業務時間中であってもダウンすることなくパッチを適用できる
- アップグレードやパッチ適用はプラットフォームによって自動的に行われる
- プラットフォームの自動化は一切の問題なく展開できる
IaC (Infrastructure as Code ) を導入したことで、パッチの自動化やアップグレードが可能になり、プラットフォームとインフラを完全に自動化しました。アップグレード時のダウンタイムがなくなったことで、開発者の負担が軽減されただけでなく、オペレータのワークライフバランスにも貢献することができました。また、自動化によって環境内で同じスクリプトをロールアウトし下位環境から上位環境まで同じスクリプトを使用することで、問題が起きないようにしました。
セキュリテイ:
- すべてのクレデンシャルはプラットフォーム側で管理される
- 年間500以上の脆弱性に対してパッチが適用された
- OS とランタイムの依存性に対してはパッチが適用され 100% コンプライアンスを遵守している
あるときは、その日のうちに脆弱性パッチを取得し、3つの環境すべてを3日以内に実装することができましたが、2つは1日半以内に実装しました。また、OS のランタイムに依存する部分をすべて自動化されたスクリプトに組み込みました。
スケーラビリティ :
- 複数チームのプラットフォームへのオンボーディングは数分で完了する
- オンデマンドでのデータの取り込みは数分でスケールできる
- 複数種類のワークロードのサポートをコストを抑えながら実現できる
プログラムは非常に速いスピードで成長していたので、環境のスケーラビリティを確保し高速に拡張できるようにすると同時に、リソースのコストを低く抑えることができました。その結果、5つの並列チームを数分で開発環境に導入することができました。たとえば 5つのチームが開発から QA に移行する際、同時に3つのチームだけが並行して作業していた場合、環境をスケールダウンすることができたので、結果的にコストを削減することができたのです。
コミュニティ
ペンスキーでは、このプラットフォームを “Platform Pheonix “と名付けました。ペンスキーは、プラットフォームのプラクティスの一部を作っただけでなく、文化を構築しました。また、一般的なパターンのアーキテクチャ標準とテンプレートを作りました。Confluence ページや Slack チャネル、デモなどのツールを使用して開発者を教育し、真の実践のコミュニティを作りました。そして、お客様やステークホルダー、開発者を教育し問題を共有して解決し、スキルを向上させ互いの経験から学ぶことができたのです。
このプロダクトを作りそれをプラットフォームと名付けたことは、とても素晴らしい経験でした。プラットフォームをプロダクトとして扱うために厳格なプロセスを設けています。そのため、開発チームが求めている機能はすべてバックログに登録されています。チームは毎週そのバックログを見直し優先順位をつけて、これらの機能が確実にロールアウトされるようにしています。
まとめ
コネクテッドフリートのジャーニーをまとめると、ペンスキーでは Spring エコシステムを最大限に活用し、核となる Spring Boot や Spring Cloud Dta Flow 、その他の Spring エコシステムのコンポーネントをTanzuプラットフォーム上で活用しました。これがペンスキーにおける IoTスケールのストリーム処理なのです。
そして、自動化が成功の鍵となる要素です。1つはアプリケーションの観点で、CI/CD パイプラインが自動化され、ソースコードから本番環境まですべてのアプリケーションが自動化されました。また、プラットフォームの観点では、プラットフォームのロールアウトやアップグレードパッチがエンドツーエンドで自動化されていることが、誇りをもって言えることです。プラットフォームに追加されるすべての新機能は、自動化の観点から検討され、プラットフォームを活用して、アプリケーションインスタンスやプラットフォームコンポーネントを自動でスケールさせることができます。
セキュリティは、アプリケーションやプラットフォームの観点から行うすべての作業において重要な要素であり、重要なテナントの1つとなっています。セキュリティは決して後付けではなく、実際に実装する前に考え抜かれた重要な要素であります。セキュリティは可能な限り強力で攻撃的であるべきだと考えています。
新しいユースケースや新しいアプリケーションを開発し、プラットフォーム上にデプロイする必要がある場合、再利用可能なパターンとコミュニティを活用しました。すでに定義され、作成されたパターンを活用することで、成果を加速させることが可能となりました。
ペンスキーの成功の一つに Spring エコシステムの活用があります。Spring エコシステムには数多くのプロジェクトがありますが、オープンソースの活用は難しいというお客様には、Springに対する有償サポートをVMwareはご提供しています。詳細は VMware Spring Runtime のページをご覧ください。