LayerX エンジニアブログ

LayerX の エンジニアブログです。

LayerX インボイスのインフラアーキテクチャ

こんにちは、LayerXでインフラを担当している高江です。

今回は、弊社の請求書AIクラウドサービス「LayerX インボイス」のインフラについて、 現在のアーキテクチャ構成と、設計時に考慮したポイントをご紹介いたします。

サービス自体については事業責任者の @mosa_siru がご紹介しておりますので、こちらのエントリをご覧ください。

tech.layerx.co.jp

アーキテクチャ構成

まずはみんな大好き構成図から。
LayerX インボイスのインフラはAWS上に構築されており、その構成はざっくりこのようになっています。

f:id:shnjtk:20210402190022p:plain
LayerX インボイス インフラ構成図

大きく分けると、

  • LayerX インボイス(本体機能)
  • ユーザー情報管理・認証基盤
  • 共通データ基盤

という3つの部分から構成されています。

LayerX インボイス(本体機能)

ここがLayerX インボイスの本体となる部分で、請求書を受け取ってOCRで内容を読み取り自動で仕訳を切ったり、各種会計サービスと連携するといった処理を行います。

こちらについては、

  • フロントエンド : NuxtによるSPA
  • バックエンド : GoによるAPIサーバ
  • データストア : AuroraやDynamoDBなどのデータベース

という、いわゆる3-tierアーキテクチャです。

これに加えて、LayerX インボイスにはメールで送付された請求書を取り込むという機能があり、これはSendGridと連携することで実現しています。
メール受信機能はインボイスの本体機能とは切り離し、独立して稼働させています。
これは、本体機能をメンテナンスしている間や、万が一APIサーバに障害が発生した場合であってもメールは受信できるようにするためです。

また、時間のかかる処理は非同期処理とし、APIサーバとworkerタスクとのメッセージングにはSQSを介しています。
そのほか、定期バッチ処理のためにRundeck(ジョブスケジューラ)をEC2上に立てて運用しています。

ユーザー情報管理・認証基盤

ユーザー情報の管理やログイン時の認証機能を担当する部分です。
部署や担当者、役職といった組織情報の管理も行います。
インボイス本体に比べると軽量で、構成もシンプルです。
一部の機能はプライベートAPIとして実装されており、インボイス本体からプライベートネットワーク内の通信として呼び出されるため、internal ALBを配置しています。

共通データ基盤

ユーザーの情報や請求書情報、仕訳情報などのデータを管理する部分です。
データベースにはAuroraやDynamoDBなど複数のサービスを併用しています。
また、全文検索エンジンとしてElasticsearch Serviceも利用しています。

設計時の考慮事項

LayerX インボイスのインフラ構成を検討するにあたり、開発初期の頃から意識しているのは以下の点です。

  • ノンコア運用で頑張らない
  • 横展開できる
  • 出来る限りシンプルに

ノンコア運用で頑張らない

「適切に楽をする」とも言えるかと思いますが、これはスケーリングやバックアップなど、運用上必要ではあるがコアではない部分についてはマネージドサービスを活用して自分たちのコストはかけずにやろう、ということです。
こういったことはクラウドベンダーが提供してくれるサービスに任せ、開発リソースは本質的なコア部分に最大限投資できることを重視しています。

これは、LayerX CEOの福島がこちらのnoteで書いていた「コアとノンコアを意識。ノンコアにはSaaSを」という内容に通づるものがあります。

comemo.nikkei.com

横展開できる

今後LayerX インボイスと連携する新たなサービスを開発する際に、LayerX インボイスで蓄積した開発資産を活用することで、短期間で必要なインフラを構築し、サービスを提供できるようにするということです。
高い再利用性、汎用性を意識する、とも言えます。
少人数のチームで多数のサービスを高速に展開するために重要な要素であると考えています。

出来る限りシンプルに

構成が複雑化すると全体の把握が困難になり、例えば構成上の重要な部分に関する知識が一部のメンバーにしか理解されておらず、運用が属人化して担当者がSPOFになったり、設定ミスによる障害を引き起こす原因になったりします。
そのため、構成要素を少なくしたり、循環参照が発生しないように通信経路を一方向にするなど、設計段階から常に構成をシンプルに保つことを意識しています。

おわりに

以上、LayerX インボイスのインフラ紹介でした。

構成をご覧いただくと、特に奇をてらった部分はなく、比較的オーソドックスなものになっているのが分かると思います。
しかし、この構成に至るまでには数々の試行錯誤があり、その都度技術的な調査や選択を繰り返してきました。
その結果、なぜこのような構成にしたのかという判断のクオリティは、開発当初に比べて明確に上がっています。

今後も機能追加やサービスラインナップの拡充などによりインフラの規模はますます大きくなっていくと思われますが、設計の根底にある意識やアプローチは変わらないので、これまで積み重ねてきた経験を基に、開発スピードを落とさない運用を目指していきたいと思います。

おまけ

今年のAWS Summit Online 2021で、今回触れなかったCI/CDパイプラインやセキュリティ、ガバナンスといった点も含めて @mosa_siru と一緒にたっぷりとご紹介いたします。
5/12(2日目)の17時からとなりますので、こちらもぜひご覧ください!

aws.amazon.com