カラーミーショップ

ポストコロナの商売を支えるカラーミーショップのアーキテクチャ

カラーミーショップ

EC事業部でチーフテクニカルリード改め、シニアエンジニアリングリードをしています@kenchanです。先日開催されたGMO Developers Night 10 ペパボ EC テックカンファレンスでの「ポストコロナの商売を支えるカラーミーショップのアーキテクチャのこれから」という発表について、発表原稿を加筆修正したものを公開します。

発表資料の全体はポストコロナの商売を支えるカラーミーショップのアーキテクチャのこれから - Speaker Deckに、動画はGMO Developers Night #10 ペパボ EC テックカンファレンス - EC サイトの開発の裏側大公開 - YouTubeにありますので、あわせてご覧ください。

はじめに

本日は、「ポストコロナの商売を支えるカラーミーショップのアーキテクチャのこれから」というタイトルで、カラーミーショップの現状と、現在取り組んでいる、主にサーバサイドのアーキテクチャの変更・改善について3つのトピックで話します。

  • コロナ禍におけるカラーミーショップを取り巻く状況
  • カラーミーショップの現在のアーキテクチャ
  • ポストコロナの商売を支えるために取り組んでいること

コロナ禍におけるカラーミーショップを取り巻く状況

まずはじめに、コロナ禍におけるカラーミーショップを取り巻く状況についてです。

全体の流通は前年比1.7倍、4月の申し込みは前月から比較して大きく増加

先日、プレスリリースオンラインイベント『ポストコロナに向けて今こそ取り組むべきデジタル化 〜実例から学ぶ ネットショップ活用のヒント〜』にて発表がありましたとおり、このコロナ禍において、カラーミーショップ全体の流通額は前年比1.7倍の成長を記録しました。また、新しくネットショップを開設すべく、新規申込をしてくださった方も、4月から大きく増加しています。私達は、これが一過性のものではなく、人々のライフスタイルが変わったことによる不可逆な変化だと考えています。

ネットショップの利用者が増加した結果、ショップにとってのネットショップの重要性は高まった

私達をはじめとする一般消費者の変化はもちろんですが、ネットショップを運営しているショップオーナー様にも大きな影響を与えています。これまでは、ネットショップの運営を、実店舗の片手間にやっていたお店も少なくなかったことでしょう。しかし、これからの時代は、ネットショップ全体の流通額が増えたことにより、ショップ運営におけるネットショップの重要性は、以前とは比べ物にならないほど大きくなりました。

一方で、この半年程の間で、カラーミーショップの障害により、ネットショップの運営が一時的に不可能になってしまう事態が何度かありました。ショップオーナーの皆様にはご迷惑おかけして、大変申し訳ありませんでした。先程も述べたとおり、この状況下でネットショップが停止してしまうというのは、ショップの流通の大部分を失ってしまうということになります。

ここで、カラーミーショップが置かれている状況を整理します。

コロナ禍における消費行動の変化によって、ネットショップの流通額は大きく増加しました。また、新しくネットショップを始める方も増加しています。実店舗を運営しているショップでも、売上に対するネットショップ比率は増えていることでしょう。つまり、ショップ運営におけるネットショップの重要性が増し、私達カラーミーショップが、良い方向にも悪い方向にも、今まで以上に大きな影響を与えられるようになったと言えます。

カラーミーショップの現在のアーキテクチャ

ここからは、カラーミーショップの現在のアーキテクチャを簡単に紹介します。

複数のショップを1つのシステム上で管理しているマルチテナントウェブアプリケーションです

まず、はじめにカラーミーショップは、複数のショップを1つのシステムで提供している、マルチテナントウェブアプリケーションであることが挙げられます。マルチテナントウェブアプリケーションとは、1つのシステムで複数の組織とその組織に属するユーザアカウントを扱うアプリケーションを指し、カラーミーショップでは「ショップ」がテナントの単位となっています。

マルチテンシーの3レベルではカラーミーショップはレベル3

マルチテナントウェブアプリケーションであることは「マルチテナンシー」と呼ばれることがあります。

Web アプリケーションをマルチテナント型 SaaS ソリューションに変換するをご覧になったことがある方も多いのではないでしょうか。この記事では、マルチテナンシーのアーキテクチャは3段階のレベルがあると記事内で述べられています。

1段階目は、データベースもアプリケーションもテナントごとに用意されています。2段階目になると、アプリケーションは同じものを使いますが、データベースが別れています。データベースを垂直分割したアーキテクチャであるとも言えるでしょう。そして、3段階目になると、アプリケーションもデータベースも論理的には1つになり、そのなかでテナントが分割されている状態になります。

カラーミーショップは、いくつかの課題はあるものの、データベースを共有する3段階目に近いかたちをとっています。

データベースを共有する複数のサブシステムで構成

次に、カラーミーショップを構成するサブシステムと、それを利用するユーザの種類についてお話します。

カラーミーショップは、1つのデータベースを共有する複数のサブシステムによって構成されています。たとえば、お店を表現するショップページやカートといったサブシステム、ショップオーナー様が商品の登録などを行うショップ管理、昨年リリースした「カラーミーショップアプリストア」という外部の開発者様がカラーミーショップに機能を追加できる仕組みも提供しており、ここで使われる公開APIといったサブシステムもあります。さらに、私たちGMOペパボのパートナーが問い合わせ対応などに使う顧客管理システムもあります。

これらのサブシステムは、それぞれ独立してスケールアウトさせられるような構成になっています。

カラーミーショップのアーキテクチャまとめ

ここまでで、私達のシステムが、データベースを共有する形の「真のマルチテナンシー」に近いアーキテクチャをとっていることと、データベースを中心とするサブシステムによって構成されていることを説明しました。ざっくりとカラーミーショップの内部構造について理解していただけたでしょうか。

ポストコロナの商売を支えるために取り組んでいること

それでは、最後に私達が現在抱えている課題と、それに対してどのように取り組んでいるか、ポストコロナの商売を支えるアーキテクチャをどのように構築しようと考えているのかについてお話します。現在、私達は次の3つのテーマに取り組んでいます。

  • データベースサーバの耐障害性・可用性の向上
  • 各サブシステムの拡張性(スケーラビリティ)の向上
  • ショップ単位での独立性の向上による可用性の確保

データベースサーバが単一障害点

まずは、1つ目のデータベースの耐障害性・可用性の向上についてですが、「真のマルチテナンシー」なアプリケーションにおいては、データベースが単一障害点の1つになります。先程、ショップ様の売上におけるネットショップの比重が高まっているということをお話しましたが、そういった状況を考えても、単一障害点をなくしていく、あるいはその耐障害性と高めていくというのは大切なことです。

カラーミーショップのデータベースは、現在、GMOペパボのプライベートクラウド基盤であるNyah上で、VMとして稼働しています。データベースサーバはMySQLを利用しており、総データ量はディスク容量で700GB、書き込み用のサーバが1台、読み込み用のサーバが複数台あります。それぞれ、ピーク時の1分間に発行されるクエリは、書き込みが20,000クエリ、読み込みが1台あたり900.000クエリ程度です。

この規模のデータベースの可用性を高いレベルで確保し続けるのは、挑戦のしがいがあるものではないでしょうか。

このデータベースサーバの耐障害性、可用性の向上のため、2つの取り組みを行っています。

1つ目は、sysown/proxysqlというミドルウェアを使った負荷分散とフェイルオーバーの導入です。これはすでに本番環境に適用済みで、セキュリティ対策の1つであるクエリログの取得も兼ねた仕組みになっています。

2つ目として、パブリッククラウドを活用したハイブリッドクラウド構成にすることで、可用性を向上させる方式を検討をしているところです。

サブシステムの拡張性の向上には改善できる部分がまだまだある

次に、サブシステムの拡張性の向上についてお話します。

カラーミーショップのサブシステムは、それぞれ独立してスケールアウトできるようになっています。しかし、スケールアウトさせるための手順や、また必要十分なリソースで稼働させ続けるという点ではまだ課題があります。

そのため、アプリケーションをVMからコンテナ技術を利用した運用に変更しようとしています。

その結果として、コンテナオーケストレーションシステム、具体的にはkubernetesを利用し、より拡張性の高いシステムにすることを進めています。

なお、ペパボのkubernetesへの取り組みについては、技術部の高石のスライド 実録!CloudNativeを 目指した230日 / cloud-native-days-tokyo-2019 - Speaker Deckをご覧ください。

1つのショップの影響が他のショップにも影響を与えてしまうアーキテクチャ

最後に、ショップ単位での独立性の確保についてお話します。

カラーミーショップ上では、様々なショップが運営されており、常に一定のアクセス・流通があるショップもあれば、予告販売などで短時間に大量のアクセス・流通が発生するショップもあります。現在は、プランによる機能の差はあるものの、全てのショップを平等に扱うようなアーキテクチャとなっています。現在のアーキテクチャにおいては、たとえば、あるショップにシステムのキャパシティを超えるアクセスがあった場合に、その影響が他のショップにも及んでしまう場合があります。ある特定のショップやロールに起因する障害が、別のショップやロールに波及してしまうことは、なんとしても食い止めたいところです。

ショップをクラスタリングして影響を波及させないアーキテクチャ

そこで、特定のショップ、またはいくつかのショップをグルーピングし、クラスタとして独立させることを検討しています。そして、このショップクラスタの単位でキャパシティプランニングを行い、特定のショップへの恒常的なあるいは突発的なアクセス増加による影響を、他のショップに与えないようにしようとしています。

このサブシステム内で特定のショップを分離する仕組みは、初期実装がすでに本番投入されており、一定の成果を上げています。今後は、現在の仕組みをより精錬させ、ショップ毎の独立性を高める取り組みを進めていきます。

現在取り組んでいる3つの課題まとめ

それでは、ポストコロナの商売を支えるために取り組んでいる3つのことをまとめます。

1つ目はハイブリッドクラウドによるデータベースの耐障害性と可用性の向上、2つ目はコンテナ化とkubernetesによるサブシステム単位での拡張性の向上、3つ目はショップ毎の独立性を高めるアーキテクチャの検討です。

まとめ

私のセッションでは、カラーミーショップの昨今の状況、ポストコロナにおける消費行動の変化からくるネットショップの重要性の高まりに対し、3つの方向性で、システム全体のRe-Architectingにとりくんでいることをお話しました。

カラーミーショップは、これらの課題を解決し、ポストコロナ時代の商売を支えることができる、ナンバーワンのECプラットフォームサービスになることを目指しています。

また、このあとの登壇者は、私の発表の中では触れていない重要なポイント、ショップの売上に直接つながるカート部分の改善や、安全なショップ運営を支えるセキュリティなど、様々なテーマについて発表があります。ぜひ最後までご視聴いただき、感想やフィードバックなどいただけるととても嬉しいです。

仲間を募集しています

また、本日の発表内容に共感してくださった方は、ぜひ、これらの大きな課題に、共に取り組む仲間になっていただけたらとてもうれしく思います。

それでは、これで私の発表は終わります。ありがとうございました。