SolarSystemDB - Universal Serverless Database | アーキテクチャ

に公開

導入

今回はSolarSystemDBのアーキテクチャについて解説していきたいと思います。

技術スタック

  • SvelteKit(TypeScript)(フロントエンド・バックエンド)
  • TailwindCSS(スタイリング)
  • Cloudflare D1(SolarCoreDB、SolarSystemDB)
  • Cloudfalre Pages(ホスティング)
  • AWS Lambda(Time Travel ロールバック)

ドメイン

  • auth.solarsystemdb.com(Auth0認証用)
  • app.solarsystemdb.com(アプリケーションサイト)
  • api.solarsystemdb.com(APIサーバー)
  • solarsystemdb.com(エントランスサイト)

アーキテクチャ

SolarSystemDBでは、各ブランチをCloudflare D1データベースにマッピングします。
そして、各ブランチのステージングを可能にするユニットのグループをクラスタとして扱います。
クラスタにはStarSystemバックエンドを介して WebConsole か HTTP APIによってアクセスできます。
また、SolarCoreDBという分離したDBに各種システム情報を保管しています。

architecture

StarSystem

StarSystemはSvelteKit上に構成された、主にブランチのステージングを扱うロジックです。
以下のようなSQLコマンドによって、tableのdiffを計算しています。

PRAGMA table_info("TABLE_NAME")
PRAGMA index_list("TABLE_NAME")

後々オープンソース化する予定です。

TimeTravel ロールバック

インフラを含めたTimeTravelロールバックの仕組みは以下のようになっています。

TimeTravelはHTTP APIを提供しておらず、wrangler経由でしかロールバックできないので、AWS Lambdaを使用してwranglerコマンドを送信しています。Lambdaは関数URLを使用して各種バックエンドから叩かれる仕組みになっています。
また、素のLambda上ではnpm i -g wranglerが使用できないので、ECRにwranglerをインストール済みのイメージをデプロイして使用しています。

time-travel-arch

まとめ

意外と書くことが少なくなりましたが、SolarSystemDBのアーキテクチャ解説は以上になります。
不明点や質問等ありましたら、遠慮なくコメントください!

Discussion