Special
» 2019年03月18日 18時30分 公開

Oisixが19年運用してきたモノリシックなサービスのマイクロサービス化を進め、Kubernetesを本番運用できる理由

2000年に生鮮食品のネットショップとして創業したサービス「Oisix」。創業以来19年間連続でサービス規模を拡大し続けていたが、システムの肥大化により、サービスをローンチするまでの期間が長くなる、開発/リリースの難易度が上がるなどが課題になっていた。そこでマイクロサービスアーキテクチャへの刷新とKubernetesの採用に取り組み始め、現在は幾つかのサービスで本番運用を開始している。マイクロサービス化とKubernetesの本番運用が可能になった理由とは何だったのだろうか。

[PR/ITmedia]
PR

2000年にJavaで構築したECサイトをリフォームし続けてきた結果

 有機野菜や特別栽培野菜などの安全性に配慮した食品の宅配を手掛けるオイシックス・ラ・大地。オイシックス、大地を守る会、らでぃっしゅぼーやの3社が統合するかたちで生まれた同社は、「より多くの人が、よい食生活を楽しめるサービスを提供する」ことや「食に関する社会課題を、ビジネスの手法で解決する」ことなどを企業理念に掲げ、宅配事業を中心に3つのブランドそれぞれが培ってきたノウハウを生かした店舗運営や、企業向けノベルティー展開、ECやCRMのコンサルティングといった独自ソリューションを展開している。

 中でも「Oisix」は2000年に生鮮食品のネットショップとして創業したサービスだ。週に一度買い物をするサブスクリプション型が特長で、創業以来19年間連続でサービス規模を拡大し続けており、2018年12月時点の会員数は19万7272人に達した。前年同期比21.1%増のペースで会員が増加するなど、特に30〜40代女性からの支持を獲得している。

 だが、こうした会員数の伸びに対応し、会員のニーズに応え続けるためには、システムの課題が年々大きくなってきていた。オイシックス・ラ・大地株式会社 システム本部 シニアエンジニアリングマネージャー の長尾優毅氏はこう話す。

オイシックス・ラ・大地株式会社 システム本部 シニアエンジニアリングマネージャー 長尾優毅氏

 「ITの新しいトレンドを取り入れながらシステムの改善を続けてきましたが、限界に達しつつありました。お客さまにより良いサービスを提供するために、サービスの改善とそれに伴うシステムの改善を繰り返してきましたが、それによるシステムの肥大化が原因で、徐々にサービスをローンチするまでの期間が長くなり、開発/リリースの難易度も上がっていきました。2000年に構築してから拡張を繰り返してきたシステムには多くの課題がありました」(長尾氏)

 OisixのECサイトは創業当時からJavaで開発されてきた。立ち上げ時のJavaのバージョンとしては、2000年5月8日にリリースされたJava 2 Platform Standard Edition(J2SE)の1.3にまでさかのぼる。その後、Java SE 8まで段階的にバージョンアップを続け、バージョン管理システムのSVN(Subversion)からGitへの移行、構成管理ツールのGradleへの移行など、機能追加と同時にシステム構成の最新化を行ってきた。

 数々の取り組みを行ってきたが、創業当時の設計に拡張を加える形では解決できない課題が表面化してきたという。そこで取り組んだのがマイクロサービスアーキテクチャへの刷新とKubernetesの採用だった。

マイクロサービス化を成功に導く3つのアプローチ

 長尾氏は「近年のECサイトの成長によってアプリケーション、インフラの両面で問題が発生していました」と振り返る。Oisixのサイトが抱えていた課題は大きく3つに整理できる。「品質の維持」「ローンチスピード」「スケーラビリティ」だ。

 1つ目の「品質の維持」は、「お客さまへ提供したいサービスのレベルが高度化し、品質を維持したまま開発を継続することが次第に困難になっていったことを指しています」(長尾氏)。サービスのレベルが高度化すると、より複雑なプログラムが必要になってくるが、これらは、設計当初には想定しないものであるため、どうしても要件を後付けで追加することになる。そうした後付けが増えれば増えるほど、システム全体が巨大で複雑になり、見通しが悪くなっていったという。

 2つ目の「ローンチスピード」は、開発とリリース時間の短縮が難しくなってきたことだ。より多くのサービスを提供したり、より早くPDCAサイクルを回したりしようとしていたが、ECサイトが巨大で複雑になり、CI/CDの短縮が限界に来ていた。

 3つ目の「スケーラビリティ」は、「サイトを利用するお客さまの増加が見込まれる中、システムが動作するサーバをスムーズにスケールアップする必要がありましたが、それが難しくなっていたことです」(長尾氏)。システムをスケールアップしてサーバのパフォーマンスを維持するには、ボトルネックの特定が欠かせない。だが、システムが巨大化したことで、ボトルネックの特定に時間がかかるようになっていた。また、ボトルネックを特定できても、その部分だけをスケールアップすることは難しかった。

 こうした3つの課題によって引き起こされる弊害について、オイシックス・ラ・大地 システム本部 シニアアーキテクトの小林弘明氏はこう話す。

オイシックス・ラ・大地 システム本部 シニアアーキテクト 小林弘明氏

 「巨大なシステムであり、機能を追加するための難易度が高くなっており、ビジネスのスピード感や要求に応え切れなくなることが大きな懸念でした。サービスをリリースした後に何か問題が発生した場合に、原因箇所の特定や影響範囲を測ることが難しくなっており、1カ所の変更が思わぬボトルネックとなってサイト全体のパフォーマンスに影響を与えることもありました。これまでのシステムは伝統的なモノリシックな構成であり、このままの構成ではECサイトの成長に限界がありました。そこでマイクロサービス化を進めることを決めたのです」(小林氏)

 モノリシックなシステムをマイクロサービス化するに当たって採用したアプローチは、「ストラングラーパターン」「マルチクラウド構成」「共有データベースの段階的な分離」だ。

 ストラングラーパターンとは、機能の特定の部分を新しいアプリケーションやサービスに徐々に置き換えることで、レガシーシステムを段階的に移行するもの。OisixのECサイトは24時間365日稼働しており、一度で全てをマイクロサービス化することは不可能だ。そこで、既存のECサイトを稼働させたまま、徐々にサービスとして切り出していった。

 マルチクラウド構成とは、既存のECサイト用Javaアプリケーションとデータベースがある国内クラウドデータセンターを利用しつつ、機能単位でパブリッククラウドにサービスを切り出して、既存のシステムと連携していく方針を立てたことだ。当初は、システムを丸ごとリフト&シフトしてコンテナ化することも検討したが、既存のECシステムはアプリケーションサイズが大きく、ステートフルな構成だったため断念した。

 共有データベースの段階的な分離とは、先にアプリケーション部分をマイクロサービスとして分離し、データベースの分離は後から行うという方針だ。マイクロサービスでは、サービスが利用するデータベースはサービスごとに専用のものを用意し、各マイクロサービス間で独立して運用するのが一般的な構成だが、既存のアプリケーションとデータベースは密結合しており(例えば、SELECTで複雑なJOINを多用している、多数のドメインの更新を1トランザクションで更新しているなど)、データベース分割はすぐに行えなかった。そこで、まずアプリケーションを分割して、既存のデータベースを参照、更新しながら、徐々にデータベースも分割していく方法を採ることにした。

国内クラウドデータセンターからパブリッククラウド(Microsoft Azure)に段階的にマイクロサービス化

Azure Kubernetes Service(AKS)を採用した理由

 マイクロサービス化とともに活用を始めたのがKubernetesだ。Kubernetesは、マイクロサービス化に必要となる、多数のコンテナのオーケストレーションを行えるオープンソースソフトウェアとして多くの企業での利用が増えている。オンプレミスやパブリッククラウドに構築して利用したり、各クラウドベンダーが提供するマネージドサービスを利用したりするなどさまざまな利用方法がある。Oisixで採用したのはMicrosoft Azure上で提供されるマネージドサービス「Azure Kubernetes Service(AKS)」だった。

 小林氏は「Azureの利用は初めてでした。個人的なエンジニアとしての理解からすると、AzureといえばMicrosoftであり、Microsoftといえば、自社で開発したJavaと立ち位置が近いC#を推進している印象でした。『うちはJavaの会社だが、サポートは大丈夫なのだろうか』というのが最初の感想でしたね」と振り返る。

 AKSを採用した背景について長尾氏は「Kubernetesの運用に社内のリソースを割くのは難しく、マネージドの環境を利用することが前提でした。マネージドサービスは各クラウドベンダーが提供していましたが、初めての挑戦であるため相談できる人が欲しいと思っていました。そのような中、MicrosoftにJava Championの寺田佳央さんが在籍していることは大きな後押しとなりました」と話す。

 寺田氏はMicrosoftでCloud Developer Advocateという立場で、Azure上でのJavaやKubernetesを使った企業の取り組みを支援していた。小林氏と長尾氏は2018年4月、「Microsoft Hackfest」に参加し、5日間にわたって直接Kubernetesのレクチャーを受け、PoCを行った。「19年稼働してきたOisixのJavaシステムをどのようにKubernetesを使ったマイクロサービスアーキテクチャに移行するか」についても、パラレル化の課題やボトルネックになりがちな点のアドバイスをもらい、大きな手応えをつかんだという。その後、AKSの国内リージョンでの提供が正式にアナウンスされたことで、AKSの採用を決めた。

アプリケーションの並列化により、受注確定バッチ処理を4倍速く

 Oisixでは現在、10程度のサービスを切り出し、開発、検証、本番運用のフェーズのいずれかに入っているという。例えば、ECサイトから出力される大量のログから特定の条件のデータのみをピンポイントで取得する「ログ検索サービス」や、アクセス頻度が高い商品系マスタのテーブルをマイクロサービスとして切り出した「商品サービス」などだ。

 ここでは、そうしたサービス群の中から、定期宅配に欠かせない「受注確定バッチ」の事例を詳しく見てみよう。小林氏はこう解説する。

 「週1回の定期宅配サービスのため、毎週特定の曜日に大規模なバッチを起動させています。お客さまが増加したことでサーバリソースが逼迫(ひっぱく)していて、特定のバッチにリソースを振り向け過ぎると、他のサービスが不安定になることがありました。また、リソースの切り替えにはサーバの再起動も必要でした。そこで、マイクロサービスに切り出して、システム全体を安定させようとしました」(小林氏)

受注確定バッチの概要

 ここで生きたのがKubernetesによるコンテナの管理だ。データベースは既存の国内データセンターに置かれており、Azure上のバッチとは物理的に離れていた。バッチアプリケーションを切り出した後はマルチクラウド構成の影響でデータベースとアプリケーションの通信時間により遅延が発生した。そこでKubernetes側でコンテナのレプリケーション数を増加させることで処理時間の短縮させたのだ。

 「以前は40分程度かかっていたバッチ処理が現在は、10数分で終わる程度になりました。会員の増加やデータベースとのコネクションを見ながら、コンテナの数を調整することでスケーラビリティを確保しています」(小林氏)

 また、マイクロサービスとして各サービスが切り出されたため、品質の維持もこれまでより容易になり、ローンチスピードの短縮にもつながった。現在、基盤刷新プロジェクトは2チームで進めているが、人員とチームを増やし、残されているサービスの切り出しに取り組んでいくという。

会員数をさらに増やすために、全てのJavaアプリケーションをマイクロサービス化する計画

 Oisixでは、今後も会員数を増やす計画を推進している。それに向けて、今後は、全てのJavaアプリケーションをマイクロサービス化してAKSで動作する状態に移行する計画だ。加えて、既存のデータセンターで運用しているデータベースもAzureに移行するために調査を開始したところだという。

 長尾氏はプロジェクトを振り返りながら多くのメリットがあったと話す。

 「Kubernetesを自社で構築し本番サービスで稼働させてみましたが、動作が不安定だったり、ノウハウがなく苦労したりしました。そのような中、Javaアプリケーションのコンテナ化やAKS(マネージドKubernetes)の知見をMicrosoftから得られたことは、マイクロサービス導入で大きな助けとなりました。マネージドサービスとして利用できるので運用管理の負担もなく、サービスの切り出しといった業務に集中できるようになりました」

 小林氏も「クラウド技術の進展は速く、前提となる知識やノウハウも幅広く求められます。新しいサービスでは知識や経験が追い付かないケースも増えています。自社の強みにつながらない作業などを含めて全て自分でやろうとせずに、クラウドベンダーの便利なサービスを利用することがポイントだと思います。どのようなサービスがあるかを含めて、まず相談してみる。われわれにとっても結果的にそれが近道でした」と話す。

 マネージドサービスやサポート環境など、ユーザーにとって新しいクラウドサービスが試しやすくなってきた。マイクロサービス化は難しいと感じている企業は少なくないはずだが、「まずは試してみる」という姿勢で望むことが大切といえそうだ。Microsoftは、企業が“試す”ための環境を用意している。

Copyright © ITmedia, Inc. All Rights Reserved.


提供:日本マイクロソフト株式会社
アイティメディア営業企画/制作:ITmedia エンタープライズ編集部/掲載内容有効期限:2019年4月17日