Concepts/Cloud Native

Cloud Native의 구성요소

ocwokocw 2023. 10. 10. 23:36

- 출처: 클라우드 네이티브 GO - 매튜 A. 티트뮤스 지음

 

- 확장성 (Scaleability)

요청량이 급격하게 증가했을 때 대응하는 시스템의 능력을 말한다. 

  • 수직적 확장(Vertical scaling, Scale up): 시스템의 할당된 하드웨어 자원을 늘리는것을 말한다. 예를 들어 DB 서버의 경우 성능 향상을 위해 메모리를 늘린다면 이는 수직적 확장에 해당한다. 직관적이고 관리가 쉽지만 요청량이 아주 커지면 한계점이 존재한다.
  • 수평적 확장(Horizontal scaling, Scale out: 인스턴스를 추가하는 방식을 말한다. 늘어난 요청량을 처리하기 위해 장비 Node를 늘린다면 이는 수평적 확장에 해당한다. 관리가 어렵지만 서비스 규모가 아주 커진다면 수평적 확장은 피할 수 없다. 수평적 확장이 가능하기 위해서는 App의 상태를 관리하지 않아야 가능하다.

- 느슨한 결합 (Loose Coupling)

시스템의 구성요소가 다른 구성요소에 영향을 최대한 덜받도록 설계하는것을 말한다. 특히 MSA가 더이상 특별한 설계전략이 되지 않은 지금에는 서로 다른 구성요소간에 영향도가 적도록 설계해야하므로 중요한 요소이다.


- 탄력성, 내장애성 (Resilience, Fault tolerance)

시스템이 에러를 견딜 수 있는 능력을 말한다. 시스템을 에러없이 설계한다면 좋겠지만 이는 이론상으로나 가능한 이야기이며 이를 달성하려고 한다면 아마 리소스를 모두 소모해버리고 말것이다. 특히 여러 요소로 구성되어있는 복잡한 시스템일 경우 구성요소간 장애 전파를 막으면서 원활하게 동작할 수 있는 시스템을 설계하는 능력도 중요하다.

 

장애 전파를 막기 위해 서킷 브레이커나 재시도 로직을 넣는것 모두 탄력성과 관련된 이야기이다.


- 관리용이성 (Manageability)

코드 변경없이 동작을 충분히 변경할 수 있는 능력을 말한다. 예를 들어 DB 접속정보를 바꿔야 하는 경우 관리 용이성을 잘 고려한 시스템이라면 코드 변경없이 환경 변수나 k8s의 ConfigMap을 수정하는것만으로도 이를 대응할 수 있을것이다. 관리 용이성은 설정뿐만 아니라 TLS 인증서 갱신, 컴포넌트 배포의 범위도 포함한다.

 

관리 용이성과 유지보수성은 어떻게 다른가?

  • 관리 용이성: 시스템의 동작 변경 관점. 시스템 외부에서의 변경이 얼마나 쉬운가를 말한다.
  • 유지보수성: 내재되어있는 기능 변경 관점. 시스템 내부에서의 변경이 얼마나 쉬운가를 말한다.

- 관찰 가능성 (Observability)

시스템의 출력으로 내부 상태를 얼마나 잘 추론할 수 있는지에 대한 척도이다.