この記事は、Quarkus.io のブログ記事、Vodafone Greece replaces Spring Boot with Quarkus の翻訳記事です。
Vodafoneギリシャはギリシャで2番目に大きな電気通信会社で、600万人以上の加入者に固定電話および携帯電話サービスを提供しています。
Vodafoneギリシャは、オンプレミスとクラウド上で多くのアプリケーションを実行しているため、クラウドリソースの消費コストは同社にとって非常に重要だ。
そのアーキテクチャの一つのコンポーネントはKubernetesベースのソフトウェアであるDigital eXperience Layer(DXL)であり、これはVodafoneのコアシステム(SOAPベースの通信)とクライアント(Web/モバイル)の間のミドルウェアとして、TMF仕様 (https://www.tmforum.org/)に基づいた簡単に利用できるREST APIを提供する。
その目標は、今後何年もVodafoneのデジタルサービスの中核になることだ。
そのコンポーネントはMongoDB、Kafka Streams、Redisなどの技術を活用して、旧サービスの応答性を800%以上改善すると同時に、それらをRESTフレンドリな汎用APIに変換する。DXLはSpring Bootを使って実装されていて、完全にクラウド上で動作します。また、彼らはメモリリソースの大量消費と長い起動時間を経験していたため、これらを削減する方法を探し始めました。
Vodafoneギリシャにとってもう1つの重要な懸念事項は、アプリケーションの起動時間が長いことでした。Vodafoneギリシャは起動時間を改善するために、DXLにさらに多くのクラウドリソースを割り当てることができましたが、これはクラウドコストの増加を意味していました。そこで彼らは、DXLを最適化してクラウドのリソースを消費を減らすようにする方法を見つけようと試みました。
DXLの他に、VodafoneギリシャはSpring Bootを使ってマイクロサービスの大部分を実行している。現在、彼らが開発と本番で実行しているマイクロサービスの80%はSpring Bootをベースにしているが、彼らはNode.jsによるマイクロサービスも混在しています。
彼らはどの様にQuarkusを選択したのか
Spring Bootに代わるものを見つけるための彼らの選択プロセスの主な基準は、開発者の効率性、クラウドリソースの消費の低減、アプリケーションの起動時間の短縮だった。後者はユーザ体験の改善だけでなく、クラウドリソースの消費コストにも大きな影響を与えると考えた。
彼らはネイティブにコンパイル可能なフレームワークであるNode.jsとVert.xなど他の技術やフレームワークを見て評価した。彼らは、Java開発者がJavaアプリケーションを学び、Javascriptに移行するのは負担であるため、Node.jsは彼らにとって良い選択肢ではないと判断した。いくつかのフレームワークは、大きな堅実な支援者やスポンサーを求めていたため、どちらも基準を満たしていなかった。もうひとつのネイティブコンパイル可能なフレームワークは、その時点ではMongoDBドライバのコンパイルに失敗するという理由で選択されなかった。MongoDBドライバをネイティブモードで使用することはサポートされておらず、ネイティブにコンパイルできないMongoDBドライバの部分をスキップする方法もなかった。彼らが危うくVert.xを選びそうになった理由は、その優れた状況伝播能力と卓越したパフォーマンスにある。しかし、2019年の4月にQuarkusについて知り、それがVert.xをそのスタックに含め、メモリと起動時間の最適化を提供していたため、彼らはQuarkusを採用することを決めた。Vodafone ギリシャのDXL技術責任者であるChristos Sotiriou氏によると、Quarkusは「我々が必要としていた性能の向上を提供すると同時に、優れた支援者(レッドハット)を持ち、実戦でテストされた技術に依存しているように思われた」という。2019年6月、VodafoneギリシャはQuarkusで書き換えられた共通ライブラリの一部を利用したマイクロサービスのデプロイに初めて成功した。
競合する技術よりもQuarkusが選ばれたもう1つの理由は、開発者が独自の拡張を作成できることだった。さらに、コミュニティメンバーの数、プロジェクトのスターの数、Quarkus開発者によるコミュニティの問題への回答と修正への迅速な応答時間、プロジェクトのコミュニケーションチャネルを介して完全に技術的な質問に答えるRed Hat開発者の数などのプロジェクトの高い活動特性は、彼らがQuarkusを選択するための肯定的な指標でした。最後に、Red Hatへの信頼とソフトウェア市場における同社の信頼は、Red HatがスポンサーとなっているQuarkusを選択することが、同社は正しい選択をしていることを確信しました。
解決策
彼らが前進する道を決めた後、Vodafoneギリシャはまず彼らの共通内部ライブラリをSpring BootからQuarkusへ移行し始めた。共通ライブラリは、次のような分野横断的な関心ごとを網羅している。
- ロギング
- セキュリティ
- DB接続
- Kafka接続
- 分散ロギング
Christos氏によると、「分散ロギングの実装はSpring Bootでは非常に困難でしたが、Quarkusではこの新しい共通ライブラリの作成は実行可能であり実現可能でした。Quarkusでマイクロサービスの受信-送信リクエストに対してヘッダ伝搬を組み立ててアクションを実行する方法は、少なくとも私たちのユースケースでは、Spring Bootよりも再利用性が高く、国を横断したチームの簡単な配置も可能になりました。」という。
現在、15のQuarkusマイクロサービスがあり、そのうちの5つは2019年9月末に本番環境へ移行した。取り組みに関しては、開発者2名がこれら最初の5つのマイクロサービスの開発に専念し、これらは現在JVMモードで稼働している。間もなく、彼らのチームは今後3ヶ月で20のマイクロサービスの提供に取り組んでいる。これまでの彼らの経験から、Spring開発者がQuarkus Javaスタックを手に入れるのは非常に簡単だったことは、Christos氏の言葉を借りれば「Spring BootからCDIベースのフレームワークへの移行には多くの労力を必要としなかった」と言うことは言及する価値がある。
QuarkusにはSpring APIの互換性があるが、Vodafoneギリシャはそれを使用する計画はない、なぜなら「マイクロサービスに2つのプログラミングモデルを混在させるのは意味がない」とChristos氏は言う。コードを清潔に保つため、Christos氏の言葉を借りればVodafoneギリシャは、「Spring構文で混乱させずにQuarkus構文のみを使用する」である。彼らの要求に対して、Quarkusスタックはすでに必要なものをすべて提供しているので、Spring Bootはまったく必要ありません。
利点
Vodafoneギリシャは、Quarkusを使用することで多くのメリットを得ています。その1つは、JVMモードではメモリリソースの消費が半分になったことだ。さらに、最適化を行わなくても、起動時間がほぼ4分の1に短縮されました。これらのマイクロサービスの多くは複雑なものだ、彼らは「多くのKafkaやデータベースと接続している」とChristos氏の説明する
Kafkaを使用する同社のロギングシステムは、サイズの大きいメッセージを処理してJSONに変換するため、大量のメモリを使用する。例として、Spring Bootを使用している時にはいくつかのマイクロサービスは1GBのメモリを必要としていた。一方、本番環境で現在稼働しているQuarkusマイクロサービスは512MBで導入できるようになりました。「80個あるマイクロサービスにとって、これは大きな節約になります!」とChristos氏は強調し、「Quarkusが最適化せずにJVMモードでデフォルトで提供するものは、Springが最適化後(依存関係の管理、JVMオプションの操作など)に提供するものに比べて50~60%軽量化されている」と加えた。起動時間に関しては、その時間の大部分を占めるのはメッセージブローカやデータベースが接続の受け入れを待っている時間です。これはSpring Bootマイクロサービスが約50秒で起動させました。しかし、Quarkusマイクロサービスを使えば、そのうちの四分の一以下で起動できる(14秒)。
彼らが経験した開発者効率の大きな利点は、予想外で、嬉しい驚きだった。最初に彼らは、Spring BootからCDIベースのフレームワークへの移行には、Spring開発者の多大な労力を必要としないことに気付きました。第二に、Quarkusのライブコーディング機能(別名:devモード)を利用することで、開発者の生産性が向上した。これをChristos氏は「経験としてとても良いこと」と表現した。例えば、Christos氏によると、各開発サイクルは開発中のロジックの複雑さに応じて1~2スプリント(1スプリント=2週間)で構成される。Quarkusでは「Spring Bootに比べて開発者の生産性が30~40%向上する事が分かった。これは元Spring Boot開発者のためになる。」と語った。
彼らに感銘を与えたもうひとつの機能は、QuarkusがエンタープライズJavaを使用する方法、例えばCDIを非同期メソッドのコンテキスト伝播と組み合わせて使用する簡潔な方法などの有効性だ。マイクロサービスが他のマイクロサービスを呼び出して、他のマイクロサービスから返された情報を集約することは珍しくなく、MicroProfile Context PropagationとMicroProfile Reactive Messaging拡張を通じて、Quarkusと容易に連携することができる。実際、「MicroProfileは、開発ツールとしてQuarkusを気に入っている良い理由です。」とChristos氏は述べた。
次へ
次のステップとして、Vodafoneギリシャのマイクロサービスの数は、彼らがやろうとしていることのほんの一部しかカバーしていない。つまり、マイクロサービスの数とこの構想に専任する開発者の数を2倍にしたいのです。この目標を達成するために、同社は今後三ヶ月で20のQuarkusマイクロサービスをリリースする予定だ。Christos氏によると、成長するにつれ、「組織化と開発者の生産性は、彼らが消費するリソースにとってさらに重要になるだろう。」という。
現在はMongoDBとのインターフェース時にJVMモードでQuarkusを実行しているが、将来的にはMongoDBとネイティブコンパイルを使用することも検討している。VodafoneギリシャがQuarkusを使い始めた数ヶ月前には、MongoDB用の拡張機能は含まれていなかったが、今ではMongoDBクライアント拡張機能が含まれて利用できる。さらに、MicroProfile の耐障害性のサーキットブレーカのようなQuarkus拡張をより多く使用し、より広くMicroProfileリアクティブメッセージング仕様を採用する予定である。
さらに、JVMモードで実行しているが、Quarkusではメモリ消費と起動時間をすでに半分以上に削減している。将来的にはQuarkusマイクロサービスをネイティブモードで実行し、メモリ消費と起動時間をさらに改善する計画だ。
Quarkusについて追加の情報は
- Quarkus Webサイト: http://quarkus.io/
- Quarkus GitHub プロジェクト: https://github.com/quarkusio/quarkus
- Quarkus Twitter: https://twitter.com/QuarkusIO
- Quarkus チャット: https://quarkusio.zulipchat.com/
- Quarkus メーリングリスト: https://groups.google.com/forum/#!forum/quarkus-dev
- Quarkusを使う4つの理由