[배경]
EC2 분산 배포에 대한 설명
현재 EC2 하나에 카프카, 엘라스틱서치, 레디스, 스프링부트 서비스를 모두 배포하는 구조에서, 해당 EC2 인스턴스에 장애가 발생하면 모든 서비스가 동시에 중단될 위험이 있습니다. 따라서 각 서비스를 개별 EC2 인스턴스에 배포하여 분산 및 고가용성을 보장할 필요성이 커졌습니다.
[요구사항]
각각의 서비스인 레디스, 카프카, 엘라스틱서치, 스프링부트를 각기 다른 EC2 인스턴스에 배포해야 합니다. 이를 통해 서비스 간 독립성을 보장하고, 한 인스턴스에 장애가 발생하더라도 다른 서비스는 정상적으로 동작할 수 있도록 하는 것이 목표입니다.
[선택지]
1. 각각 EC2에 배포
- 각 서비스마다 별도의 EC2 인스턴스를 할당하여 배포합니다.
- 장점:
- 고가용성: 한 EC2에 문제가 생겨도 다른 EC2에서 서비스가 지속되므로 시스템의 전반적인 가용성을 높일 수 있습니다.
- 성능 최적화: 각 서비스는 전용 리소스를 사용하여 성능이 최적화됩니다.
- 유지보수 용이: 각 서비스가 독립적이므로, 하나의 서비스를 수정하거나 업데이트할 때 다른 서비스에 영향을 미치지 않습니다.
- 단점:
- 비용: EC2 인스턴스를 별도로 운영해야 하므로 비용이 증가합니다.
- 복잡성: 서비스가 분리되므로 관리와 설정이 복잡해질 수 있습니다. 특히 네트워크 및 보안 설정을 세밀하게 해야 합니다.
- 서비스 간 통신 지연: 각 서비스가 다른 EC2 인스턴스에서 실행되므로 네트워크 지연(latency)이 발생할 수 있습니다.
2. 모든 서비스를 하나의 EC2에 배포
- 한 EC2 인스턴스에 모든 서비스를 배포하여 관리합니다.
- 장점:
- 비용 효율성: EC2 인스턴스를 한 대만 운영하므로 비용이 적게 듭니다.
- 단순성: 한 EC2에서 모든 서비스를 실행하므로 설정과 관리가 간단합니다.
- 단점:
- 고가용성 부족: 한 EC2에 문제가 생기면 모든 서비스가 동시에 중단됩니다.
- 성능 제한: 여러 서비스가 동일한 리소스를 공유하게 되어 성능 저하가 발생할 수 있습니다.
[의사결정/사유]
각각의 서비스를 별도의 EC2 인스턴스에 배포하는 것이 장기적인 안정성과 성능 측면에서 유리하다고 판단하였습니다. 여러 인스턴스를 활용하면 각 서비스가 독립적으로 운영되므로 장애 발생 시 다른 서비스에 미치는 영향을 최소화할 수 있습니다. 또한, 성능 최적화가 가능하고, 유지보수가 용이해집니다.
[회고]
기술의 장단점
- 장점:
- 고가용성: 각 서비스가 별도의 EC2 인스턴스에서 동작하여 하나의 서비스 장애가 다른 서비스에 영향을 미치지 않음.
- 성능 최적화: 서비스마다 리소스를 전용으로 할당할 수 있어 성능 최적화가 가능.
- 유지보수 용이성: 각 서비스가 독립적으로 관리되므로 장애 추적과 문제 해결이 더 용이함.
- 단점:
- 비용 증가: EC2 인스턴스를 여러 대 배포해야 하므로 운영 비용이 증가함.
- 관리 복잡도: 여러 인스턴스를 관리하기 위한 네트워크 설정 및 보안 설정이 복잡해질 수 있음.
- 서비스 간 통신 지연: EC2 인스턴스가 분리되어 있기 때문에 서비스 간의 통신에서 약간의 지연이 발생할 수 있음.
다시 시도한다면?
- 모니터링 및 자동화 강화: EC2 인스턴스 수가 늘어나면서 발생할 수 있는 관리 복잡도를 줄이기 위해 모니터링 시스템과 자동화 도구를 더 적극적으로 활용할 것입니다. 예를 들어, AWS CloudWatch, AWS Auto Scaling, AWS Systems Manager 등을 통해 모니터링과 자동화를 강화할 수 있습니다.
- 네트워크 최적화: 여러 EC2 인스턴스 간의 네트워크 지연을 줄이기 위해 VPC 내 서비스 통신 최적화를 고려할 수 있습니다. 이를 통해 서비스 간의 지연을 최소화하고 안정성을 높일 수 있습니다.
- 비용 최적화: EC2 인스턴스의 수와 성능을 고려하여 스팟 인스턴스나 온디맨드 인스턴스와 같은 비용 최적화 전략을 활용할 수 있습니다.
'PORTFOLIO > TROUBLESHOOTING' 카테고리의 다른 글
[CodeChef - 트러블 슈팅] 포인트 전쟁에서 살아남기! Redis로 실시간 속도 전투! (0) | 2025.01.06 |
---|---|
[CodeChef - 트러블 슈팅] 인덱싱: 데이터 속도 전쟁에서 살아남기! (1) | 2025.01.06 |
[CodeChef - 트러블 슈팅] 실시간 알림의 비밀: RabbitMQ로 댓글 알림 시스템 구축하기 (0) | 2025.01.06 |
[CodeChef - 트러블 슈팅] 배포 지옥 탈출기: GitHub Actions로 만들어낸 자동화 천국. (0) | 2025.01.06 |
[CodeChef - 트러블 슈팅] 데이터 수호자들 : 동시성 이슈와의 싸움에서 살아남기. (0) | 2025.01.06 |