28 ポイント 投稿者 xguru 2024-02-01 | 1件のコメント | WhatsAppで共有
  • サーバーレス(Serverless)は実際にサーバーが存在しないことを意味するのではなく、単に他人のサーバーを使うことを意味する
  • ServerFreeアーキテクチャは、バックエンドサーバー、コンテナ、仮想マシンなしでもコードを実行できるという概念を提案する
  • このアーキテクチャではブラウザ内でコードを実行し、必要なのは静的ファイルを配信するサーバーだけである
  • Webアプリケーションをブラウザで実行できるようにパッケージ化する方法を実演
  • フロントエンドコードは通常どおりビルドされ、バックエンドはパッケージ化されてWeb Workerで実行され、データベースにはWebAssemblyにコンパイルされたSQLiteを使用する

アイデア

  • コンテンツマーケティングを通じてデモプロジェクトを作ることに決め、Hacker Newsに着想を得て、プライバシー面で注目される求人応募トラッカーを作ることにした
  • このプロジェクトは、Web Worker、ドキュメントの不整合、欠落したドキュメントなどの問題を解決しながら、新しいアーキテクチャを開発するプロセスへと発展した

クラシックアーキテクチャでの最初の試み(簡単な部分)

  • SubZero CLIを使ってデータベーススキーマを変更し、権限を設定してアプリを構築
  • CRUDとフィルタリング機能を提供する一方で、デモというより製品に近いUIのカスタマイズを進めた
  • 左側の無駄なスペースを減らすため、サイドバーを上部へ移動
  • "Opportunities"ページにShow、Create、Edit、Listコンポーネントを追加
  • バックエンドコードに手を入れずに複雑なフィルタリングフローを実装
  • ダッシュボードを改善し、「公開中の機会」「応募あたりの平均進捗率」「応募後の平均日数」などの関連データを表示
  • 本番デプロイのためにDockerイメージをビルドし、データベースをシードしてコンテナを実行
  • SQLiteデータベースファイルをコンテナ外に保持して、データを永続化
  • Turso DBを使ってSQLiteデータベースの永続性とバックアップの問題を解決

ServerFreeアーキテクチャへの移行(面白い部分)

  • SQLiteをWebAssemblyにコンパイルしてデータベースとして使用
  • OPFS(Origin-Private FileSystem)を使ってデータを保存
  • バックエンドコードをWeb Workerで実行し、UIスレッドのブロッキングを防止
  • ブラウザ互換性を確保するため、Expressをitty-routerに置き換え
  • Service Workerを使ってUIとバックエンド間のリクエストを横取りして処理
  • メインスレッドを介して、Service WorkerとWeb Worker間の安定した通信を実装
  • メインスレッド(UI)から認証関連コードを削除
  • データはユーザーのコンピュータ上に保存され、サーバーへ送信されない

結論

  • このアーキテクチャは、特に顧客データが独立しており、ユーザー間で共有する必要がない場合に有用
  • バックエンドサーバーが不要なためホスティングコストが削減され、データプライバシーが強化され、セキュリティが向上する
  • Electric のようなツールを使うことで、データベースの一部をクライアントに同期し、一部のリクエスト/クエリをブラウザで処理できる

1件のコメント

 
[このコメントは非表示になっています。]