企業と顧客のよりよい関係を支えるMGReのアーキテクチャー(バックエンド編)

f:id:MGRe:20220118125736p:plain

こんにちは、CTOの大久保です。今後ランチェスターでは、エンジニア社員からMGReの技術的な側面についてお伝えしていこうと思ってます。今回は、サーバサイドのバックエンドシステムのアーキテクチャーについてです。

MGReとは

MGRe(メグリ)は、モバイルアプリの開発から運用・マーケティング活動までサポートするモバイルアプリプラットフォームです。マルチテナント型のSaaSとして提供しており、バックエンドのAPI/CMSシステムと、iOS/Androidアプリにてサービスが構成されております。

バックエンドシステムは主にAWSをインフラとしてRuby on Railsにて実装されております。(データ分析等に一部GCPを活用してGoやPythonも利用していますが、別の機会にお伝えできればと思います。)

MGReのバックエンドシステムは、大きく2つの拡張性を持たせた設計となっております。アプリケーションの拡張性とインフラの拡張性です。

 

アプリケーションの拡張性

MGReでは企業と顧客のよりよい関係を実現するため、モバイルアプリの運用に必要な標準機能を提供する領域(コア領域)と、お客様のご要望に応じて自由にカスタマイズをおこなえる拡張領域(テナント領域)が定義されております。このテナント領域の考え方こそ、ランチェスターがこれまで事業を進めてきた中で直面してきた課題への一つの解です。

テナント領域はエンタープライズプランにてご利用いただくことができ、任意のCRMシステムやポイントシステム、MAツールとの連携等をおこなうことができます。また、独自の機能も実装することが可能です。

独自の実装をおこなうテナント領域ですが、SaaSとして提供されている各種データソースへの接続やログイン認証等、コア領域と共通の処理をおこないたい部分は、Ruby on Railsの機能である、Rails Engine (mountable) を活用しています。

SaaSとしてのMGReは日々進化されていきますが、カスタマイズの入るテナント領域においても、Rails Engineで共通処理をマウントしているので、自動でその進化が適用されていきます。

また、テナント領域におけるカスタマイズ開発には、RailsのApplication Templatesも活用しています。テンプレートを利用することで、迅速に開発プロジェクトを立ち上げることが可能になっています。

インフラの拡張性

MGReのバックエンドシステムは、AWSのインフラ上に構築されております。継続的な成長を実現し、突発的なアクセス負荷にも対応可能なよう、自動的に拡張される設計となっています。

APIアプリケーションサーバAWS Fargateにて実行されており、新規テナントの加入やアクセス数の増加に応じて、キャパシティが増加するよう調整されております。ターゲット追跡スケーリングポリシーを設定しており、MGReのアプリケーション全体で、CPU使用率もしくはリクエスト数が一定の値となるよう常にタスク数が増減します。

DBはAurora Serverlessを利用しており、接続数や負荷状況に応じて自動的にスケールアップがおこなわれます。また、スケジュールによるスケーリングもおこなっており、プッシュ配信の多いお昼の時間帯等はDBの処理能力を他の時間帯より上がるように調整されております。

Aurora Serverlessは仕組み上スケールアップされるまでにある程度の時間がかかり、また、処理能力の細かい制御をおこなうことができません。現在プレビュー版が公開されている Aurora Serverless v2 が正式版となりましたら、ぜひ導入をしていきたいと検討しています。データベースワークロードを1秒もかからずに数十万トランザクションにスケールアップできるようになりますので、さらなる拡張性が担保できると想定しています。

 

このようなMGReのバックエンドアーキテクチャーですが、まだまだ技術的に実現したいこと、試してみたいことが沢山あります。正直やりたいことに対して人手が追いついていない状況です。面白そうだなと思ったらお気軽にカジュアル面談等にご応募ください。MGReを技術的にスケールアップしてくれる方とぜひご一緒できればと思っています。

▼MGReについて

moovy.jp

プロダクトチームの雰囲気について

moovy.jp