スケーラブル
成長のために初日から構築されたスケーラブルなアーキテクチャとグローバルなリーチ
モジュラーおよびデカップルドアーキテクチャ
密結合システムが脆弱なシステムであることを知っています。マイクロモジュールまたはサービスベースの構造が、モノリスであっても使用されます。グルーピングは技術レイヤーではなく、機能/ドメインによって行われます(ドメイン駆動設計ライト)。フロントエンドとバックエンドはAPI契約(OpenAPI、GraphQL)を介してデカップルされています。利点:全体のシステムを壊すことなく、モジュールを簡単に孤立させたり、スケールさせたり、置き換えたりできます。
スケーラブルなテックスタック(適切な作業に適切なツール)
バックエンドにはスケーラブルなユビキタスランタイム(主にNode.js)を選択します。必要に応じてPostgreSQL、クラウドPostgreSQL互換DB、Supabase、Firebaseが使用されます。重い読み取りトラフィックやキャッシングのためにRedisが統合されています。クラウドネイティブインフラストラクチャとDockerが使用されます:AWS / GCP / — オートスケーリングサポート付き。水平スケーリングできない不明瞭なツールやコミュニティサポートが不足しているツールは避けられます。
非クリティカルタスクのための非同期 + キュー ベースのワークフロー
すべてがリアルタイムで発生する必要はないことを知っています。長時間実行されるタスクやバックグラウンドタスク(メール、画像処理、請求)はキューなどにオフロードされます。例:ユーザーがサインアップした後、請求/メールはバックグラウンドで処理され、インラインでは処理されません。これにより、パフォーマンスとスケーラビリティが向上します。
進化するために構築されたデータモデルとAPI設計
悪いスキーマは将来の再作業につながることを知っています。クライアントを壊さないように、バージョン管理されたAPI(/api/v1/...)が使用されます。UUIDは増分ID(例:地域間でデータを統合するため)よりも好まれます。マルチテナンシーが計画されています(特にSaaSにおいて):行レベル対スキーマレベルの分離、早期にtenant_idを追加します。
監視、可観測性、アラートを初日から
見えないものはスケールできないことを私たちは知っています。フロントエンドのエラートラッキングにはSentry、バックエンド/インフラの可観測性にはPrometheus、プロダクト分析にはPostHogやGoogle Analyticsが使用されます。ダウンタイム監視のための継続的なチェックも行われています。クラッシュ、キューバックログ、DBスパイクなどのアラート(Slack/email)が設定されています。
水平スケーラビリティとステートレスサービス
モノリスがスケールできることは知っていますが、ステートレスサービスはより良くスケールします。ユーザーセッションをローカルメモリに保存することは避け、Redis/sessionストアが使用されます。サーバーはステートレスにされ、簡単に複製できるようになります。コンテナ化が使用され、Dockerとオーケストレーター(クラウドプロバイダー)が組み合わされています。これにより、スティッキーセッションや共有メモリのボトルネックなしでオートスケーリングが可能になります。
スケールにおけるセキュリティとアクセス制御
ユーザーが増えるほど攻撃面が広がることを私たちは知っています。RBAC/ABACパターン(役割ベースのアクセス制御)が設定されています。レート制限、入力検証、セキュリティヘッダーが適用されています。秘密情報はボールトに保管され、ローテーションされます。
レイヤーごとのスケーラビリティのベストプラクティス
APIレイヤー:レート制限、ページネーション、GraphQLフェデレーション(必要に応じて)が実装されています。フロントエンド:レイジーローディング、CDNホスティング、コード分割が使用されています。オートスケーリングが使用されています。データベース:インデックスは再インデックスされ、必要に応じてシャーディングが計画されています。