airClosetのシステムアーキテクチャ
アーキテクチャの工夫ポイント
エアークローゼットは日本初・国内最大級、女性向けの普段着に特化した月額制ファッションレンタルサービス『airCloset』の開発・運営をしています。モノを循環させるシェアリングを軸に、“サステナブルでワクワクする良いモノとの出会い”をお届けしています。
今回は、昨年リリースした、ディズニーアイテムのコーディネートセット(私服にキャラクターらしさを取り入れたコーディネート「バウンドコーデ」)を最短2泊3日からレンタルできる『Disney FASHION CLOSET』のアーキテクチャ図について説明します。
CQRSを採用しているため、WRITEとREADでアーキテクチャ図が分かれています。
エアークローゼットでは将来的にメンズやシニア、キッズ向けなど今展開していないラインを増やしていきたいと考えており、そのときに基盤となる汎用的なシステムを追求した結果、イベント駆動アーキテクチャを採用しました。
APIと比べると同期的に呼び出すことができないことがネックではあるものの、複数のシステムが相互に関連し合う仕様なのと、個別でもシステムが動作できるよう疎結合を保つことが最も重要だと考えたためです。
CQRSの採用については主に3点理由があり、1つはパフォーマンス観点から、もうひとつは確実にhistoryのログが残る点、そしてもう一つは強制的に責務分離させられることです。
現在のアーキテクチャの課題と今後の改善予定
このアーキテクチャの一番の課題は、非同期前提でのシステム構築が必須になるということと、それに付随してエラーが発生した際の調査が難しいことです。
イベント駆動アーキテクチャでは、処理ごとにトランザクションを分離して実装するのが一般的ですし、APIのようにresponseを待つといった概念も存在しません。
そのため、必然的にAPI駆動であるようなエラーをcatchするような実装はできず、エラーが発生した際には dead letter queue等の実装をする必要があります。
またそれぞれの処理が独立して動くため、どういう順番でどの処理が動いたのかログを残すのも工夫が必要になります。
これに対してエアークローゼットでは、 AWS X-Rayといったようなサーバレスに特化したログサービスや、処理のフローを制御してくれる AWS StepFunctionsを積極的に導入し、処理の可視化やエラー時の挙動の一括管理をできるようにしていく予定です。
◆執筆:辻亮佑 株式会社エアークローゼット 執行役員/CTO @RyanAircloset
【サービス公式サイト】
https://www.air-closet.com/
https://disney.air-closet.com/
アーキテクチャを構成するツール
Amazon EventBridge
API
Amazon API Gateway
会社情報
株式会社エアークローゼット
エアークローゼットは日本初・国内最大級、女性向けの普段着に特化した月額制ファッションレンタルサービス『airCloset』の開発・運営をしています。モノを循環させるシェアリングを軸に、“サステナブルでワクワクする良いモノとの出会い”をお届けしています。