데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [Software Architecutre Pattern 02] Micro Service Architecture

      KIDO 23.07.10
      1,987 15 0

      지난번 [Software Architecutre Pattern 01] Software Design 원칙 SOLID 알아보기에 이어 Software Architecutre Pattern 관련 두번째 연재글입니다.

      이번에는 MSA(Micro Service Architecture)에 대해 알아보고자 합니다.

      Netfllix Spring Cloud MSA 모델과 Kubernetes Architecutre, Spring Cloud Kubernetes를 살펴보려고 합니다.


      Netflix Spring Cloud MSA Model

      SpringCloudCourse-SpringCloudConclusion.png


      스프링 클라우드 아키텍처는 위와 같은 구조를 가집니다.

      구성요소

      설명

      Service Discovery

      Service Discovery는 MSA 에서 각 서비스 목록을 관리하고, health 상태 정보를 저장합니다.

      Api Gateway Routing

      API Gateway 는 들어오는 요청(uri) 에 따라 필요한 Service 로 라우팅 합니다. (Service Discovery 이용)

      Api Gateway Filter

      API Gateway 는 요청을 필터링 합니다. (pre, route, post, error 필터링수행)

      Client Side Loadbalancer Ribbon

      Ribbon 은 Client Side LoadBalancer 이며, ServiceDiscovery 로 부터 서비스 목록을 캐싱합니다.

      Client Side Loadbalancer Feign

      FeignClient 은 Ribbon을 이용하여 서비스간 Communication 을 간편하게 추상화 합니다.

      Circuit Breaker

      CircuitBreaker 은 특정 이슈 상황이 Threadhold 를 넘어서면 CircuitBreaker 가 오픈되며, 대응방안이 동작합니다.

      Circuit Breaker Fallback

      Fallback 은 정상적인 응답이 불가능할때 대체 응답이 동작하는 방법입니다.

      Circuit Breaker Retry

      Retry 는 서비스 응답이 정상적이지 못한경우 혹은 응답을 받지못한경우 재 시도를 통해서 응답을 받습니다.

      Circuit Breaker Bulkhead

      Bulkhead 는 여러개의 Thread 혹은 Semaphore 를 이용하여 하나의 장애가 전체 장애가 되지 않도록 격리합니다.

      Distributed Trace Sleuth

      멀티 쓰레드 환경에서 수많은 서비스간의 통신을 하나의 traceId 로 취합할 수 있습니다.

      Distributed Trace Zipkin

      Zipkin 은 Sleuth 가 생성한 Trace 정보를 수집하는 서버로, 분산 트레이싱을 취합하는 서비스 입니다.

      Distributed Config

      분산 설정 서버는, 수십, 수백대의 서비스를 일관되게 관리할 수 있는 설정 서버입니다.

      Streaming

      Stream 서비스는 EDA (Event Driven Architecture)로 비동기 요청을 통해 서비스간 의존성을 해소합니다.

      상기 나열된 각 기능들을 활용하여, Spring Cloud 기반의 MSA 를 구축할 수 있게 됩니다.

      참고: SpringCloud Architecture 의 자세한 구현체와 설명은 다음 자료를 참조하세요.

      https://github.com/unclebae/SpringCloudCourse


      Kubernetes Architecture

      SpringCloud Kubernetes 를 활용하기 위해서 기본적인 Kubernetes Architecture 을 살펴볼 필요가 있습니다.

      Kubernetes 의 전체적인 아키텍처 개요는 아래와 같습니다.

      SpringCloudCourse-KubernetesOverview

      ~

      Component

      Description

      Master

      API Server

      Kubernetes 의 모든 컴포넌트들은 API Server 와 통신합니다.

      외부 오퍼레이션을 받아들이거나, 각 Node 에 Pod 설치 명령을 내리는 역할, 각 노드들의 상태를 저장하거나, 상태에 따라 새로운 노드를 배포하는 역할을 위해 통신하는 게이트웨이 역할을 합니다.

      ^

      Controller Manager

      Node Controller(노드 다운에 대한 감시), Replication Controller(원하는 복제 계수에 대한 모니터링을 수행), Endpoint Controller(엔드포인트 객체 노출, 서비스/파드 조인), Service Account & Token Controller(기본 어카운트 생성, API 접근을 위한 토큰 생성등을 수행)

      ^

      Scheduler

      노드들의 자원 상태를 감시합니다. 이를 통해 노드에 새로운 포드를 배포할 수 있도록 정책을 관리합니다.

      또한 리소스 요구사항을 수집하고, 하드웨어, 소프트웨어, 정책 제한, 어피티니/안티어피니티 정책, 워크로드 인터페이스 등의 팩터들을 수집하여 이를 통해 스케줄링을 합니다.

      ^

      Etcd

      고가용성 key-value 스토어로, 모든 클러스터의 데이터를 저장합니다. 또한 Config-Map, Secret 등도 저장합니다.




      Node

      Kublet

      각 클러스터 노드에서 수행되는 에이전트입니다. 파드에서 컨테이너가 수행되도록 하거나, 파드 스펙에 따라 정상적으로 수행 되는지를 보장합니다.

      ^

      Pod

      Kubernetes 에서 배포의 최소단위 요소 입니다. Pod 안에서는 여러개의 컨테이너가 수행될 수 있으나, 기본적으로 하나의 Pod에 하나의 컨테이너를 권장합니다.

      ^

      Kube Proxy

      네트워크 프록시를 수행하며, 각 클러스터 노드에서 동작합니다. 이는 노드의 네트워크 룰을 관리합니다.

      Pod간 네트워크 통신을 담당하거나, 내부와 외부 연결을 담당하게 됩니다.




      -

      Kubectl

      kubectl 은 admin 하여금 api server 엔드포인트와 통신하도록 해주는 cli 툴 입니다. 대부분 이 툴을 이용하여 kubernetes 에 명령을 수행합니다.

      -

      Ingress

      Ingress 는 Kubernetes 로 들어오는 네트워크 엔드포인트로, 외부 사용자가 kubernetes 의 서비스로 L7 로드 밸런싱을 지원합니다.

      인입되는 트래픽을 지정된 Rule에 따라서 어떠한 서비스 전달할지 룰을 지정하며, Ingress Controller 가 이 룰을 통해 라우팅을 수행할 수 있도록 해줍니다.

      간략하게 Kubernetes 의 아키텍처를 알아 보았습니다.

      위 아키텍처의 구조를 유심히 살펴보면 SpringCloud과 Kubernetes 가 어떻게 통합되었는지 감을 잡을 수 있습니다.


      SpringCloud vs SpringCloud Kubernetes

      각각의 아키텍처를 알아 보았으니 이제 SpringCloud Kuberentes 가 SpringCloud와 어떻게 통합되는지 한번 알아보겠습니다.

      SpringCloudCourse-SpringCloudVsKubernetes

      위 아키텍처에서 어떠한 부분이 다른지 한눈에 파악할 수 있습니다.

      SpringCloud 에서 제공하던 도구들중에서 Kubernetes 와 통합하면서 변경되는 부분은 다음과 같습니다 .

      • ServiceDiscovery : 기존 SpringCloud 에서 사용하던 서비스 디스커버리(Eureka) 대신에 Kubernetes Api Server 을 통해서 각 서비스를 Discovery 할 수 있습니다.

      • ConfigMap : ConfigMap 을 통해서 SpringCloud의 ConfigServer 를 대체할 수 있으며, 실시간 Refresh 등을 수행할 수 있습니다.

      • Secret : Secret 은 Kubernetes 에서 암호화된 환경변수등을 관리하기 위한 도구로 ConfigServer 을 대체합니다.

      • API Gateway : SpringCloud 에서 제공하던 Zuul Proxy, SpringCloud Api Gateway 는 Kubernetes 의 Ingress 로 대체할 수 있습니다.


      어떻게 MSA를 쪼갤 것인가?

      vertical






      vertical-2

      WrapUp

      • 마이크로 서비스의 구성 요소를 살펴 보았다.

      • 위 구성요소들은 MSA를 효과적으로 구현하기 위한 요소이며, 이들 요소가 초기 Netflix MSA OSS 도구들로 발전하였고,

        이후 Spring Cloud Kubernetes, 최근에는 Kubernetes의 다양한 도구들로 MSA를 효과적으로 구현하기 위한 OSS들이 많이 출시 되었다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      KIDO 님의 최신 블로그

      더보기
      동영상 기고하기