Microservicesは常に最適な解決策とは限りませんが、モノリスがチームの速度を低下させ、スケーリングが求められるときには、当社が適切な移行方法を熟知しています。分散型の複雑さを生み出すのではなく、Microservicesを成功させるための境界付けられたコンテキストを設計し、イベント駆動型通信を実装し、運用プラクティスを確立します。
サービス要件に応じて、Node.js、Python、Goを使用してMicroservicesを構築します。イベントにはApache KafkaまたはRabbitMQ、同期呼び出しにはgRPC、オーケストレーションにはKubernetesを介して通信します。各サービスは、Dockerベースのローカル開発環境とともに、独自のPostgreSQLまたはRedisインスタンスを持ちます。
モノリスがチームの速度やスケーリングのボトルネックとなっているシリーズB+のスタートアップ。複数のチームが互いのコードに干渉している、デプロイが危険、または単一コンポーネントが独立してスケールできない場合、Microservicesを検討する時期です。
ビジネスドメインをマッピングし、境界付けられたコンテキストを特定し、最大のインパクトを得るために最初に抽出するサービスを決定します。
サービスインターフェース、通信パターン、データ所有権、デプロイメントトポロジーを設計します。
ストラングラーフィグパターンを使用してサービスを一つずつ抽出し、システム全体の安定性を維持します。
共有インフラストラクチャ(サービステンプレート、CI/CDパイプライン、オブザーバビリティ、開発者ツール)を構築します。
サービス所有権についてチームをトレーニングし、運用プラクティスを確立し、アーキテクチャの決定を文書化します。
モノリスがデプロイのボトルネックを引き起こしている場合、異なるコンポーネントを独立してスケールさせる必要がある場合、またはチームが8〜10人以上のエンジニアに成長した場合に、マイクロサービスへの移行を検討することをお勧めします。MicrocosmWorksは、この移行を適切なタイミングで行うのに役立ちます。
MicrocosmWorksでのmicroservices architectureとスケーリングは、スタートアップの場合、1時間あたり25ドルから50ドルです。私たちは段階的なアプローチを採用しており、一度に1つのサービスを抽出することで、コストを分散させ、リスクを軽減します。
はい、私たちはバイラルな成長に対応するために、auto-scaling、database read replicas、caching layers、CDN distribution、および非同期処理を実装しています。また、ユーザーがスケーリングの問題に気づく前に、お客様がその問題について把握できるよう、監視とアラートを設定しています。
EKSやGKEのようなマネージドサービス上でKubernetesを使用し、3〜5のサービス、メッセージブローカー、およびAPIゲートウェイから始めることをお勧めします。小規模なスタートアップの場合、運用上の複雑さとコストを削減するために、ECSやCloud Runでコンテナオーケストレーションを利用します。
私たちは、小規模チームにとってマイクロサービスを管理しやすくするサービスメッシュ、一元化されたロギング、分散トレーシング、および自動化されたデプロイメントパイプラインを導入しています。また、オンコール負担を最小限に抑えるために、自己修復インフラストラクチャと自動化されたランブックも設定します。