성장하는 스타트업을 위한 마이크로서비스 아키텍처. 독립적인 확장과 팀의 신속한 작업 속도를 가능하게 하는 이벤트 중심 마이크로서비스를 설계하고 구현합니다.
시작하기
마이크로서비스가 항상 정답은 아닙니다. 하지만 모놀리식이 팀의 속도를 늦추고 확장이 필요한 경우, 저희는 올바른 전환 방법을 알고 있습니다. 분산된 복잡성을 만드는 대신, 마이크로서비스를 성공적으로 만드는 바운디드 컨텍스트를 설계하고, 이벤트 중심 통신을 구현하며, 운영 관행을 수립합니다.
저희는 서비스 요구사항에 따라 Node.js, Python 또는 Go를 사용하여 마이크로서비스를 구축합니다. 이벤트 통신에는 Apache Kafka 또는 RabbitMQ를, 동기 호출에는 gRPC를, 오케스트레이션에는 Kubernetes를 사용합니다. 각 서비스는 Docker 기반 로컬 개발 환경과 함께 자체 PostgreSQL 또는 Redis 인스턴스를 가집니다.
모놀리식이 팀의 작업 속도나 확장에 병목 현상이 되는 Series B+ 스타트업을 위한 것입니다. 여러 팀이 서로의 코드를 건드리거나, 배포가 위험하거나, 단일 구성 요소가 독립적으로 확장할 수 없는 경우, 마이크로서비스를 고려할 때입니다.
비즈니스 도메인을 매핑하고, 바운디드 컨텍스트를 식별하며, 최대의 효과를 위해 어떤 서비스를 먼저 추출할지 결정합니다.
서비스 인터페이스, 통신 패턴, 데이터 소유권 및 배포 토폴로지를 설계합니다.
스트랭글러 피그 패턴을 사용하여 서비스를 한 번에 하나씩 추출하며, 이 과정 전체에 걸쳐 시스템 안정성을 유지합니다.
서비스 템플릿, CI/CD 파이프라인, 관측 기능 및 개발자 도구를 포함한 공유 인프라를 구축합니다.
서비스 소유권에 대해 팀을 교육하고, 운영 관행을 수립하며, 아키텍처 결정을 문서화합니다.
모놀리식이 배포 병목 현상을 유발할 때, 서로 다른 구성 요소들이 독립적으로 확장해야 할 때, 또는 팀이 8~10명 이상의 엔지니어로 성장했을 때 마이크로서비스를 고려하시기를 권장합니다. MicrocosmWorks는 이러한 전환 시기를 올바르게 맞추도록 도와드립니다.
MicrocosmWorks에서의 Microservices architecture 및 스케일링은 스타트업의 경우 시간당 $25~$50입니다. 저희는 비용을 분산하고 위험을 줄이기 위해 한 번에 하나씩 서비스를 추출하는 점진적인 접근 방식을 취합니다.
네, 바이럴 성장을 처리하기 위해 auto-scaling, database read replicas, caching layers, CDN 배포 및 asynchronous processing을 구현합니다. 또한 사용자가 알기 전에 확장 문제를 파악할 수 있도록 모니터링 및 알림을 설정합니다.
EKS 또는 GKE와 같은 관리형 서비스에서 Kubernetes를 사용하여 3-5개의 services, message broker, 그리고 API gateway와 함께 시작하는 것을 권장합니다. 규모가 작은 startups의 경우, 운영 복잡성과 비용을 줄이기 위해 ECS 또는 Cloud Run에서 container orchestration을 사용합니다.
저희는 소규모 팀을 위해 microservices를 관리하기 쉽게 만드는 service meshes, centralized logging, distributed tracing 및 automated deployment pipelines를 구현합니다. 또한 on-call 부담을 최소화하기 위해 self-healing infrastructure와 automated runbooks를 구축합니다.