今日のサービス提供において、IT は欠かすことのできない存在です。顧客ニーズをいち早くサービスへ反映するために、多くの企業が、基盤となる IT の機能を変更し、追加し、拡張してここへ対応しています。しかし、こうした改修の積み重ねは、多くの場合システムの実行順序や構造に複雑化を引き起こします。顧客ニーズに応えるためにサービスの改修を重ねてきたことが、結果として企業としてのアジリティ (IT や経営、組織運営の俊敏性) の低下を引き起こしてしまった――こうしたジレンマは今でも多く耳にします。
これを解消するために近年注目されている技法が、マイクロサービスです。自然派食品宅配業界の最大手であるオイシックス・ラ・大地が運営する「Oisix」は、今まさに、このマイクロサービスを用いた IT モダナイゼーションに取り組んでいます。同社は、2000 年より 19 年間メンテナンスや機能改修を続けてきたサービス基盤を対象とし、Microsoft Azure (以下、Azure) によるマイクロサービス化を着手。Docker や Kubernetes を利用したコンテナ型設計を採用することによって、先のジレンマを解消しつつあるのです。同プロジェクトでは構築からわずか 3 か月で、食品宅配サービスの核を担う「受注確定バッチ」をマイクロサービス化。2020 年までに段階的に移行を進めていくことが計画されています。
サービス基盤をモノリシック型からモジュール型へ
有機や特別栽培野菜などといった自然派食品市場は、1 ~ 2% ながら年々その規模を広げています (矢野経済研究所 : 2018 オーガニック食品市場に関する調査)。安全性に配慮した食品宅配サービスで知られる Oisix は、自然派食品で1 位のシェアを誇り、市場の成長率よりも高い 120% 水準で新規会員を増やしているなど、同市場において圧倒的なプレゼンスを築いています。
同社は 2000 年創業と、決して歴史の長い企業ではありません。そんな同社がなぜここまでの地位を築けたのか。その理由の 1 つは、時代に先駆けて販売チャネルを整備してきたことにあります。Oisix では 2000 年から EC によるサービス提供を開始。良い商品を最適な形で顧客へ届ける、そのためのチャネル整備に、企業としての努力を費やしてきたのです。2000 年といえば Google や Amazon が日本語版のサービス提供を開始した年であり、Oisix がどれほど市場の 1 歩先をいっていたかがよくわかります。
ただ、早期からこうしたサービスを提供してきたために抱える課題もあるといいます。オイシックス・ラ・大地株式会社 システム本部 シニアエンジニアリングマネージャーの長尾 優毅 氏は、サービス基盤のモノリシック化を挙げてこう説明します。
「2000 年に最初のコードを書いてから 19 年間ずっと今の仕組みで食品宅配サービスを提供してきました。その過程で数えきれない程のシステム改修を重ねてきたのですが、機能やロジック、データなどサービスで必要なすべての要素が単一モジュール化されているために、システムの実行順序や構造が複雑化していました。コードを 1 行追加するだけでもそれが引き起こし得る全体への影響を考察しないとならない、一部機能を拡張したいだけなのにシステム全体にビルド & リリースを適用せねばならない、そんな状態に陥っていたのです。こういったモノリシックな構造は、サービスを発展させるまでのリードタイムを長期化させます。常にお客様から支持されるサービスであり続けるためには、今のままでは限界が来ていると感じていました。モノリシックな仕組みから、サービスの各機能を独立したものとして切り出す、そして API 連携によってサービス間を連結するというマイクロサービス化へシフトすることが求められたのです」(長尾 氏)。
Oisix ではこのマイクロサービス化にアプローチすべく、コンテナ技術の採用を決定しました。これは、今までのようにサーバーを仮想化するのではなく、コンテナと呼ばれる "アプリケーションの実行環境" を仮想化するというものです。コンテナを活用したマイクロサービス化はアプリケーションの柔軟性を飛躍的に高めることが可能なため、IT のアジリティも同様に高めることができます。
今日、サービス基盤にはこのマイクロサービスを採用することが主流となりつつあります。ですが、Oisix がこれを進められなかったことには理由があります。
オイシックス・ラ・大地株式会社 システム本部 シニアアーキテクトの小林 弘明 氏は、「コンテナ型仮想化環境の開発プラットフォームである Docker や、コンテナ化したアプリケーションのデプロイ、スケーリング、管理を自動化するための Kubernetes などは、まだ登場してそれほど間もない "新しい技術" です。有効な技術であることは疑いようがありませんから、兼ねてから注目していました。ただ、有効だとは分かっていても、サービス基盤は私たちの事業の核ですから、"新しい技術" を採用するかどうかは慎重に判断せざるを得なかったのです。」と説明。しかし、今ようやくこれを進めるべきフェーズにきたと述べ、長尾 氏とともにこう続けます。
「当社は Java を主に利用してサービス基盤を構築していますが、Docker と高い親和性を持つ Spring Boot がその完成度を高めてきました。"新しい技術" ではなく "安定した技術" としてコンテナ型仮想化を採用できるようなりつつあったのです。Kubernetes も、少しずつですがこれを採用した実例が増えてきました。世の中にある実績を参考にすれば高い運用性のもとでコンテナ型仮想化環境を稼働させることができるのではないか、そう期待しました」(小林 氏)。
「Spring Boot や Kubernetes がこうした動きをみせたのは 2017 年末のことですが、ちょうどその時期から、お客様へ商品を宅配するための情報を確定させる『受注確定バッチ』が悲鳴を上げ始めました。Oisix を利用いただくお客さまは毎年 120% 水準で増加しています。大変幸いなことなのですが、一方でこの増加率に既存システムが対応できなくなってきたのです。早期に対策せねばならない、こうした当社の状況と技術の発展が合致したことを受けて、マイクロサービス化を決意したのです」(長尾 氏)。
Azure Kubernetes Services とマイクロソフトのサポートが、マイクロサービス化を成功に導く
長年改修を重ねてきたことを背景に、Oisix のサービス基盤はフロントエンドとバックエンドが複雑に絡み合った構成となっていました。一挙にマイクロサービス化することには大変なリスクがあります。そこで同社では、1 つひとつの機能を切り出して段階的にマイクロ サービス化を進めることを決定。現在、Azure を利用してこの作業が進められています。
長尾 氏は、「当社は様々なシステムでクラウドを利用しており、各用途で適したサービスを選定するマルチ クラウドの方針を採っています。実は今回の取り組みにあたって、当初、Azure は選択肢には上がっていませんでした。」と述べますが、Azure が選ばれたのにはどのような理由があったのでしょうか。
「当社が利用している Java やコンテナ型仮想化に必要な Docker、Kubernetes はオープン ソース (OSS) です。マイクロソフトはどうしても Windows の印象が強く、OSS 開発には向いていないだろうという先入観があったのです。実際、検討をスタートした時はAmazon Web Service 上に Rancher や kube-aws を利用して kubernetes を立ち上げようと考えていました。ただ、ここでは Kubernetes 環境を自力で構築、運用せねばならず、高いハードルを感じていました」(小林 氏)。
「ちょうどその頃に、Azure が Kubernetes をフルマネージドで提供する Azure Kubernetes Services (AKS) のプレビュー版を公開しました。また、Azure Database for MySQL など OSS 関連の PaaS もプレビュー版を公開しました。これまでAzure には Windows というイメージを持っていたため正直いい意味で予想外で、一度相談したいと考えたのです」(長尾 氏)。
Oisix がマイクロソフトへ相談したことは、同社がマイクロサービス化を Azure 上で進めていることからも英断だったことが伺えます。事実、この相談において、Oisix は "マイクロサービス化の成功" への手応えを強く感じたといいます。小林 氏は、「AKS のようなコンテナ型仮想化を採用する上で有効なツールが備わっていることも理由ですが、それ以上に、手厚いサポートで当社のマイクロサービス化を成功に導いていただけることに期待しました。」と述べ、マイクロソフトの持つエンタープライズ水準のサポートを高く評価。長尾 氏もこれに続けて次のように語ります。
「導入を決定する前に、マイクロソフトのエンジニアと我々とでマイクロサービス化に必要な機能、アーキテクチャ設計を議論して POC までを行う HackFest の場を提供いただきました。5 日間のプログラムだったのですが、マイクロソフトからは "Java の神" とも呼ばれる寺田 佳央さんに参加いただき、私たちと一緒に "Oisix 目線" で最適な構成を考えていただけたのです。我々の知識だけでマイクロサービス化を進めることは困難だと考えていました。それは技術の問題もありますが、何よりも、"これが最適だ" という確信が私たちだけでは得られないからです。スペシャリストの支援の下で "これが最適だ" と確信できる仕組みを作っていくことができる。これが Azure の大きな利点だと考え、採用を決定しました」(長尾 氏)。
客観的な視点を得ながら最適な仕組みを構築していくことができる。これが示された好例が 1 つあります。Oisix では基幹となる関係データベース (Relational Database : RDB) に Oracle Database を利用していますが、ライセンスの背景からこの環境を Azure へ移行することはできませんでした。そのため、マイクロサービス化した Azure 上の機能とタイムラグなく通信する方法を考えねばならなかったのです。
同プロジェクトを支援した、マイクロソフト コーポレーション デベロッパー・リレーション Sr. Cloud Developer Advocateの寺田 佳央 氏は、ここで採った手法について次のように説明します。
「こうした場合に頭を悩ませるのは、課題解決の手法が複数あるということです。例えばKubernetes の Pod (複数のコンテナを束ねたユニット) を増やして並行稼働させ Oracle Database へのコネクション数を確保する方法や、インメモリ・グリッド製品をデータベースの二次キャッシュとして利用し、既存の Java アプリケーションを改修する手法などもあります。手法の選択はケースバイケースで、費用対効果や既存システムへの影響なども考えなければなりません。今回はコードの属人化を防いだり、運用をより容易にするために、始めに述べた手法が最適だとお伝えしました。実際に、最初にマイクロサービス化した『受注確定バッチ』は、リリース後、Oisix 様の会員の伸長にもしっかり対応しながら安定して稼働しています」(寺田 氏)。
"私たちのサービス基盤には様々な制約があり、一部のコードはブラック ボックス化しています。マイクロソフトはまずこの理解に努めてくれて、そこから一緒になってベスト エフォートを設計してくれました。まだ道半ばですが、同社とともに進めればマイクロサービス化を成功させられると確信しています。"
-長尾 優毅 氏: システム本部 シニアエンジニアリングマネージャー
オイシックス・ラ・大地株式会社
定常運用の工数を大幅に削減。サービス発展によりリソースが割けるように
「受注確定バッチ」は、ロジスティクスなど周辺システムとも連携するきわめてミッションクリティカルな機能です。Oisix では作業を着手してからわずか 3 か月でこれをマイクロサービス化することに成功。これを初期実績にして他の機能のマイクロサービス化を進め、現在、「Item Service」など複数の機能がリリースされています。
こうしたマイクロサービス化は、Oisix にどのような効果をもたらしているのでしょうか。
「配送対象の会員が増えた場合、従来は VM (仮想マシン) で OS サーバーを増加する作業から準備する必要がありました。現在は "閾値を超えた場合に Pod を増やす" という処理でここに対応ができますし、AKS によってこの処理自体も自動化することが可能です。バッチ処理が安定化し、所要時間もこれまで 44 分かかっていたのが 21 分になるなど半分以上短縮できました。pod の数を増やせば、さらに短縮できる見込みです」(小林 氏)。
「運用面だけでなく改修のスピードを高められたことも大きな成果です。従来は 1 つの機能を改修するだけでもシステム全体をリリースせねばならなかったため、1 日 1 回リリースするのが限界でした。マイクロサービス化が加速すれば、各機能を 1 日に何回もビルド & リリースできる形となります。常にお客様から支持されるサービスであり続ける、そのための大きな一歩になったと考えています」(長尾 氏)。
"エンジニアのモチベーションが高まったことも、大きな効果でしょう。定常運用に割り当てるリソースが減ったことで新しいことがどんどんできる、すぐこれをサービスへ反映できる――こうした環境になったことが、彼らの魂に火を付けたのだと思います。"
-小林 弘明 氏: システム本部 シニアアーキテクト
オイシックス・ラ・大地株式会社
Oisix にとって、OSS を利用して Azure 上の環境を構築するのは初の試みでした。ですが、小林 氏は「当社では AWS を一種のスタンダードとしていました。ただ、Azure でも、Spring Boot を公式でサポートしていることなどもあり全く違和感なく構築を進めることができました。今回のプロジェクトを通じて、Azure は Windows だけでなく OSS とも高い親和性を持っていることを実感しました。」と述べます。
これに続けて寺田 氏は、「ソース コード エディターである Visual Studio Code でもJava や Kubernetes などに対する強化が施されており、プラグインも豊富に用意しています。これにより Visual Studio Code で Azure と連携する Java アプリケーション開発がとても容易になっています。AKS に関する拡張では、ローカルの PC からリモートの AKS 環境へデバッグをしかけられる Azure DevSpaces (プレビュー機能) という仕組みを提供しています。この機能はとても便利です。また Visual Studio Code 関連以外でも AKS には様々な便利機能が追加されています。例えば、昨年末に、サーバーレスのコンテナ実行環境である Azure Container Instances を AKS の仮想ノードとして立ち上げることができる機能も発表し (プレビュー機能)、急激なリクエスト増加へも柔軟な対応が可能になりました。プレビューの機能も含まれますが、今後もこうした本番活用に適した機能を拡充させて、Oisix 様の取り組みを支援してまいります。」と語りました。
常にお客様から支持されるサービスであり続けるために
モノリシックな IT をマイクロサービス化することで、サービスの安定性と発展性を大きく高めつつある Oisix。"常にお客様から支持されるサービスであり続ける"、ここへ向けた同社の取り組みは、マイクロサービス化の歩みとともに今後いっそう加速していくに違いありません。
長尾 氏は、「現在の RDB が EOL を迎える 2020 年をターゲットとして、サービス基盤が備える全機能をマイクロ サービス化させる予定です。最終的には数百のマイクロ サービスが API で連携し合う仕組みになる見通しですが、Kubernetes による運用の自動化によって工数を格段に減らすことができると考えています。ここで生まれるリソースを割り当てて、お客様のニーズを迅速にサービスへ反映させていきたいと考えています。」と述べました。
長年のシステム改修でモノシリック化が加速している、事業の核となるサービスであるゆえに新しい技術を実装できない――こうした悩みを抱える企業は、きっと多いはずです。Oisix の取り組みからは、これを解決し得るコンテナ型仮想化や Kubernetes が、今や "安定した技術" となりつつあることが伺えます。業界大手の同社の取り組みは、今後、世の中のマイクロサービス化を加速させる大きなきっかけになるでしょう。
[PR]提供:日本マイクロソフト