アソビューのモジュラモノリスの裏話

こんにちは!アソビューでVPoE兼テックリードをしている兼平です!

先日、エンジニアHubにて「モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み」という執筆させてもらったのですが、こちらではこの記事の裏話的な内容を書ければと思います。

eh-career.com

記事の構成について

アソビュー社は創業から10年以上経過し、事業としてもシステムとしても様々な歴史を辿ってきました。

その中で、得てきた経験や背景を踏まえ、現在実践している内容を公開できればと思い記事の執筆をさせて頂きました。

また今回のテーマであるモジュラモノリスはShopifyの事例が有名です。

モジュラモノリスの考え方は自体は決して目新しいものではく、モノリスとして自然と実践していた方もいると思いますが、まだマイクロサービスなどのアーキテクチャと比べ認知が広がっていないということもあります。

そのため社内の事例だけでなく、対比となるアーキテクチャやどういった課題から生まれる問題なのか、またどういった方法で実現するかなど、初めて知る方も理解してもらえる内容になればと思い、長くなってしまいますが導入的な内容から記載しています。

これらを踏まえ全体としては、「アソビューの歴史(Why)」「モジュラモノリスの説明(What)」「アソビューでの実践事例(How)」のような流れになっています。

モジュラモノリスに至るまで

アソビューではモノリスやマイクロサービスなど、ここまで様々なシステムを構築、運用してきました。

モジュラモノリスを選択している背景としては、すごくありふれた理由ではありますが、現状の事業や組織、今後の成長を鑑みて会社の状況に最適化を行った結果でした。

現在アソビューでは、複数事業、複数サービスを運営しており、その中には会員数は700万人のマーケットプレイス事業や、契約社数が9000施設になるSaaS事業が含まれます。

システム規模としては、メインで使用しているJavaのコードで有効稼働ステップ数300万を超え、施設数 × 商品数 × 商品種別(大人/子供など) × 日付(年365日) × 時間(10時開催, 12時開催など)ごとの在庫や料金のような大量データ、オーバーブッキングや決済など重要なデータに対する一貫性、最大で秒間数千リクエストを越えるトラフィックに耐えうるような可用性などのサービス特性などがあげられます。

また、毎年事業、組織共に成長も続けている中、スピーディな開発を70名程度(2022/8時点)のプロダクト組織でも実現するなど、単純なモノリスでは難しい部分も増えてきています。

一方、マイクロサービスでの運用もメリットとデメリットがあるため、今後の成長を考えると適切に適用していく必要がありました。

こういった経緯を踏まえ、モジュラモノリスに至った詳細に関しては、以前の記事で紹介していますので興味があればご覧ください。

tech.asoview.co.jp

執筆を通して

今回の執筆にあたり得たものとして大きかったのは、改めてモジュラモノリスを考える機会だったと思います。

導入にあたって調査や検証を行い、現状運用もしていますが、一般的な内容を含め公開するために様々な文献を見直し自分自身の学びにもなりました。

また、公開してから頂いたフィードバックとして、マイクロサービスとの棲み分け、モジュールの分割方針や維持、組織論的な話など非常に参考になりました。

今後はこういった内容も含め社内への展開や反映、社外に対して公開していけばと思っています。

今後やりたいこと

記事としてまとめると、かなり完成しているように見えるかもしれませんが、まだまだ課題は山積みです。

一例を出すと、

モジュールの分割基準

現在モジュール分割を行う場合の多くは話し合いによって決定している場合が多いです。

そのため、話し合いの場の流れや意見に左右されやすくなってしまうので、今後は処理や概念の依存度を可視化し、疎結合なモジュールを作り出せる仕組みを作れればと思っています。

大規模なトラフィックに対する可用性

サービスも順調に成長していることから、これらに対してモジュラモノリスでも耐えうる可用性を担保していくのは重要な要素となっています。

パフォーマンス・チューニングやリソース管理など

モジュールを論理的に分割しても、同一のランタイムで実行されるため、パフォーマンスは非常に重要な要素です。

適切にリソースを使い、パフォーマンスを活かせるような、構成、チューニングは今後のプロダクト成長に直結するため非常に重要な要素となります。

Spring Frameworkの力を引き出す

アソビューではSpring Boot × Javaの組み合わせを利用しているため、これらの機能を最大限活かしていくことが求められます。

例えばSpringのDIはランタイムで動的に行われるため、静的にモジュール分割を行っていても、ランタイムでこの境界を越えてしまうことがあります。 こういった問題を静的解決するなど、より安全に開発を行えるような仕組みの必要性が高まっています。

事業にフォーカスする開発

エンジニア一人一人の力をより素早く、直接的に事業に反映できるようにするというのが、モジュラモノリスに至る背景の一つとしてもありました。

部分的に置き換えが進んでいますが、まだ全体に適応が終わったわけではないので、よりエンジニアの力を引き出せるアーキテクチャを構築し、事業成長、イノベーションを生み出したいと考えています。

他にも様々ありまりますが、このように解決したい課題が多数あります。

こういった分野や事業に興味があれば、アソビューでは一緒に働くメンバーを大募集しています! カジュアル面談もありますので、少しでも興味があればお気軽にご応募いただければと思います!

www.asoview.com