Spring Boot 어플리케이션을 확장하려면 어떻게 해야 합니까?
Spring Boot에는 Tomcat 서버(또는 Jetty)가 내장되어 있어 신속한 개발이 용이하다는 것을 알고 있습니다.그러나 트래픽이 증가하여 애플리케이션을 스케일아웃해야 할 경우 어떻게 해야 합니까?
코멘트에서 지적한 바와 같이 여기에는 문제가 없습니다.인프라스트럭처에 따라 다르며 도움이 되는 툴도 몇 가지 있습니다.고객에게 가장 적합한 것을 선택하기만 하면 됩니다.
로드밸런싱은 Nginx와 같은 것을 선택하거나 스프링 클라우드에 맡길 수 있습니다.스프링 클라우드는 스케일링/클러스터링을 위한 기타 편리한 기능을 많이 갖추고 있습니다.스프링 부트는 자체 서버에서 실행되므로 확장이 어렵지 않습니다.
확장/클러스터링을 지원하는 도구:
스프링 부트 앱:
확장하려면 앱이 거의 상태 비저장 상태여야 합니다(예: x 인스턴스로 확장하면 x번 실행되므로 스케줄링된 작업 등을 수행할 수 없습니다).
스프링 클라우드 프로젝트를 사용하여 서비스 검색 및 기타 기능을 쉽게 확장할 수 있습니다(예: 새로운 인스턴스를 스핀업할 때 구성 서버에서 쉽게 구성을 가져와 서비스 간의 로드 밸런싱을 용이하게 하고 클러스터와 같은 동작을 할 수 있습니다).
인프라스트럭처 및 컨테이너:
Docker는 어플리케이션과 그 레플리카를 필요에 따라서 간단하게 기동할 수 있습니다.리소스를 더 활용하고 Kubernetes를 선택할 수 있지만, 모든 것은 사용 사례에 따라 다릅니다.
여러 서버(노드) 중 하나에 장애가 발생하여 부하를 쉽게 분산할 수 있는 경우
스프링 클라우드를 아직 사용하지 않았다면 로드 밸런싱에 대한 ngnix는 매우 간단합니다.
데이터베이스:
- MySQL은 봄 앱만큼 확장성이 뛰어나지 않기 때문에 여기 있는 MySQL을 사용하고 싶지 않을 것입니다.Cassandra나 Redis와 같은 것을 선택할 수 있지만 데이터 모델을 재구성해야 합니다.MySQL에서 확장이 가능한 NoSQL로의 이행은 MongoDB(임호: Cassandra의 퍼포먼스가 향상)일 것입니다.
로깅:
- 이것은 악몽이 될 수 있지만 봄에도 이에 대한 해결책이 있다.짚킨과 봄 진눈깨비를 확인해 보세요.
또한 여기에는 아키텍처 전반에 대해 많은 이야기를 하고 분산 서비스를 실행할 때 사고방식을 어떻게 바꿀 필요가 있는지에 대한 많은 자료가 있습니다.
이게 도움이 됐으면 좋겠다.
업데이트 2021-02-23
오늘날 Kubernetes는 확장에 대해 이야기할 때 거의 사실상의 표준이며, 비즈니스 도메인 로직에만 응용 프로그램을 활용하고 집중할 수 있는 풍부한 기능 세트 때문에 선호되고 있으며, 서비스 발견을 위해 스프링 클라우드와 같은 것을 제거할 수 있습니다.EKS 및 GKE와 같은 일부 퍼블릭 클라우드를 사용할 수 있다면 클러스터를 직접 관리하지 않아도 됩니다.자동스케일링과 내장 헬스체크를 제공합니다.Spring Boot 2.4부터는 라이브 및 준비 프로브의 전용 헬스 체크 엔드 포인트, 그레이스 풀 셧다운 등 K8 상에서 Spring Boot을 실행하는 데 많은 이점이 있습니다.
데이터베이스 측에서는 AWS Aurora 등 관리 및 확장이 용이한 것을 목표로 합니다.
스프링 부트 서비스를 규모에 맞게 관리할 때 주의해야 할 중요한 사항은 구성 관리일 수 있습니다.즉시 사용할 수 있는 매우 유용한 솔루션은 집정관입니다.이를 통해 설정을 핫 새로고침할 수 있습니다.이러한 설정은 50개의 서비스가 있는 경우에 중요합니다.이 서비스는 1개의 부울 변수를 변경하기 위해서만 재시작해야 합니다.애플리케이션의 크기에 따라서는, CPU/메모리 자원이나 시간 면에서, 기동시에 코스트가 드는 일이 있습니다.
언급URL : https://stackoverflow.com/questions/39130014/how-can-you-scale-a-spring-boot-application