당신은 주제를 찾고 있습니까 “서비스 메시 – Keynote – Microservice Architecture의 복잡성 해결을 위한 Service Mesh 플랫폼 소개 – 임종진“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 kubernetes korea group 이(가) 작성한 기사에는 조회수 2,046회 및 좋아요 40개 개의 좋아요가 있습니다.
서비스 메쉬(Service Mesh)란 오픈소스 프로젝트 Istio처럼, 애플리케이션의 다양한 부분들이 서로 데이터를 공유하는 방식을 제어하는 방법입니다. 서비스 간 커뮤니케이션을 관리하는 다른 시스템들과 달리, 서비스 메쉬는 애플리케이션에 구축된 전용 인프라 계층입니다.
서비스 메시 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 Keynote – Microservice Architecture의 복잡성 해결을 위한 Service Mesh 플랫폼 소개 – 임종진 – 서비스 메시 주제에 대한 세부정보를 참조하세요
Cloud Native의 핵심 아키텍처인 MSA를 구현하고, 관리하는 것의 어려움이 지속 도출되고 있다. 이를 해결하기 위해 Red Hat OpenShift Container Platform을 이용한 컨테이너 관리 및 Istio, Prometheus, Grafana, Jaeger 등이 통합된 Service Mesh 기능을 이용한 MSA 기능 구현에 대해 소개를 할 것이다.
서비스 메시 주제에 대한 자세한 내용은 여기를 참조하세요.
서비스 메시(Service Mesh) – 아빠프로그래머의 좌충우돌 개발 …
서비스 메시는 서비스 간의 통신을 제어하고 표시하고 관리할 수 있도록 하는 데 특화된 마이크로 서비스를 위한 인프라 계층입니다.
Source: daddyprogrammer.org
Date Published: 2/7/2021
View: 5108
Service Mesh 란? – Medium
Service Mesh Architecture의 구현은 보통 서비스의 앞단에 경량화 프록시를 사이드카 패턴으로 배치하여 서비스 간 통신을 제어하는 방법으로 구현합니다 …
Source: medium.com
Date Published: 10/23/2022
View: 9641
[Service Mesh]서비스 메시란?
소개 · 서비스 메시란 애플리케이션의 다양한 부분들이 서로 데이터를 공유하는 방식을 제어하는 방법이다. · 현대의 애플리케이션은 각 서비스들이 다른 …
Source: well-made-codestory.tistory.com
Date Published: 5/29/2022
View: 9614
서비스 메시의 의미와 서비스 메시 프로젝트들 – ITWorld Korea
서비스 메시(service mesh)는 최근 부상하는 아키텍처 형식으로, 관리 및 프로그래밍 오버헤드를 낮추는 방식으로 마이크로서비스를 동적으로 연결 …
Source: www.itworld.co.kr
Date Published: 10/15/2021
View: 860
서비스 메시란 무엇입니까? | 팁코 소프트웨어 – TIBCO Software
서비스 메시는 서비스가 애플리케이션 수명 주기 전반에 걸쳐 데이터와 일관성을 공유하며 서로 통신할 수 있도록 지원하는 사전 구성된 애플리케이션 서비스입니다.
Source: www.tibco.com
Date Published: 7/25/2022
View: 9201
Service Mesh (서비스 메시) 고민 – 삵 (sarc.io)
각 서비스들이 자신의 위치 정보를 등록해놓는 대상 서비스이다. 레지스트리에 등록된 후에는 다른 서비스들은 모든 서비스에 접근할 필요 없이, …
Source: sarc.io
Date Published: 12/16/2022
View: 7888
서비스 메시란? | VMware 용어집 | KR
서비스 메시란 클라우드에서 호스팅하는 애플리케이션의 소프트웨어 코드가 통합 계층의 형태로 다양한 수준의 웹 서버에서 상호 연동되는 방식을 의미합니다.
Source: www.vmware.com
Date Published: 12/25/2021
View: 6754
MSA와 분산아키텍처 수용을 위한 방법: 서비스 메쉬와 이스티오
서비스 메쉬 아키텍처는 MSA의 트래픽 문제를 보완하는 마이크로서비스 간 커뮤니케이션 인프라입니다. 서비스 메쉬를 사용하면 마이크로서비스 간에는 …
Source: www.samsungsds.com
Date Published: 8/29/2021
View: 2142
마이크로서비스 아키텍처의 서비스 메시 | 클라우드 아키텍처 센터
서비스 메시는 개별 서비스 간에 관리형의 관측 가능한 보안 통신을 가능하게 해주는 인프라 레이어 위에 있는 플랫폼 레이어입니다. 이 플랫폼 레이어를 …
Source: cloud.google.com
Date Published: 5/12/2022
View: 8391
주제와 관련된 이미지 서비스 메시
주제와 관련된 더 많은 사진을 참조하십시오 Keynote – Microservice Architecture의 복잡성 해결을 위한 Service Mesh 플랫폼 소개 – 임종진. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 서비스 메시
- Author: kubernetes korea group
- Views: 조회수 2,046회
- Likes: 좋아요 40개
- Date Published: 2020. 11. 9.
- Video Url link: https://www.youtube.com/watch?v=sAK1ackPSDg
서비스 메쉬(service mesh) 개념, 기능, 작동방식, 최적화 방법
서비스 메쉬(Service Mesh)란 오픈소스 프로젝트 Istio처럼, 애플리케이션의 다양한 부분들이 서로 데이터를 공유하는 방식을 제어하는 방법입니다. 서비스 간 커뮤니케이션을 관리하는 다른 시스템들과 달리, 서비스 메쉬는 애플리케이션에 구축된 전용 인프라 계층입니다. 이 가시적인 인프라 계층은 서로 다른 애플리케이션 부분이 얼마나 원활하게 상호작용하는지를 기록할 수 있으므로, 더 쉽게 커뮤니케이션을 최적화하고 애플리케이션 확장에 따른 다운 타임을 방지할 수 있습니다.
애플리케이션의 각 부분인 ‘서비스’는 다른 서비스를 활용하여 사용자들이 원하는 기능을 제공합니다. 온라인 소매 애플리케이션 사용자는 구매를 할 경우 해당 아이템의 재고가 있는지를 알아야 합니다. 그러므로 해당 업체의 인벤토리 데이터베이스와 커뮤니케이션하는 서비스는 제품 웹 페이지와 커뮤니케이션해야 하며, 이 웹 페이지는 사용자의 온라인 장바구니와 커뮤니케이션해야 합니다. 비즈니스 가치를 추가하기 위해 이 소매업체는 사용자에게 인앱(in-app) 제품 추천을 제공하는 서비스를 구축하게 됩니다. 이 새로운 서비스는 제품 태그 데이터베이스와 커뮤니케이션하여 제품을 추천하고, 또한 제품 페이지에서 필요로 하는 재사용 가능하며 유동적인 부분이 많은 동일한 인벤토리 데이터베이스와도 커뮤니케이션해야 합니다.
현대적인 애플리케이션은 이와 같은 원리로 각각 특정한 비즈니스 기능을 수행하는 서비스 네트워크로 분류됩니다. 기능을 실행하기 위해 서비스는 여러 개의 다른 서비스들로부터 데이터를 요청해야 할 수 있습니다. 하지만 소매업체의 인벤토리 데이터베이스처럼 일부 서비스에 요청이 과도하게 몰릴 경우엔 어떻게 될까요? 여기서 한 서비스에서 다음 서비스로 요청을 전송하여 모든 구성 요소의 작동 방식을 최적화하는 서비스 메쉬를 도입합니다.
서비스 메시(Service Mesh)
서비스 메시(Service Mesh)란?
서비스 메시는 서비스 간의 통신을 제어하고 표시하고 관리할 수 있도록 하는 데 특화된 마이크로 서비스를 위한 인프라 계층입니다. 기존의 서비스 아키텍처에서의 호출이 직접 호출 방식이었다면, 서비스 메시에서의 호출은 자체 인프라 계층의 proxy를 통해 이뤄지게 됩니다.
서비스 메시를 구성하는 개별 proxy는 서비스 내부가 아니라 각 서비스와 함께 실행되므로 ‘sidecar’라고도 합니다. 각 서비스에서 분리된 이러한 sidecar proxy들이 모여 Mesh Network를 형성합니다.
Mesh Network
마이크로 서비스의 단점
서비스 메시 없이 동작하는 마이크로 서비스는 서비스 간 커뮤니케이션을 통제하는 로직으로 코딩해야 하기 때문에 개발자들이 비즈니스 로직에 집중하지 못하게 됩니다.
또한 서비스 간 커뮤니케이션을 통제하는 로직이 각 서비스 내부에 숨겨져 있기 때문에 커뮤니케이션 장애를 진단하기가 더 어려워집니다.
거대해진 MSA시스템은 수십개의 MicroService가 분리되어있고 운영환경에는 수천개의 서비스 인스턴스가 동작하고 있으며 서비스간의 통신도 매우 복잡하여 새로운 장애 지점이 계속해서 나타나게 됩니다. 이러한 복잡한 마이크로서비스 아키텍처 내에서 서비스 메시 없이는 문제가 발생한 지점을 찾아내기가 거의 불가능합니다.
서비스 메시로 얻는 이점
서비스 메시는 서비스 간 커뮤니케이션의 모든 부분을 성능 메트릭으로 캡처하게 되며 서비스 메시를 활용하면 다음 내용을 실현할 수 있습니다.
개발자들이 서비스 간의 안정적인 연동에 집중하는 대신 대신 비즈니스 가치를 추구하는 일에 좀 더 집중할 수 있습니다.
Jaeger를 통한 요청의 분산 추적은 서비스와 함께 가시적인 인프라 계층을 제공하므로 문제를 손쉽게 인식하고 진단할 수 있습니다.
서비스 메시는 장애가 발생한 서비스로부터 요청을 재 라우팅 할 수 있기 때문에 다운 타임 발생 시 애플리케이션 복구 능력이 향상됩니다.
성능 메트릭을 통해 런타임 환경에서 커뮤니케이션을 최적화하는 방법을 제안할 수 있습니다.
서비스 메시 주요 기능
요청 라우팅 제어
계단식 장애 방지 (서킷브레이크)
부하 분산 알고리즘(로드밸런싱)
보안 기능 (TLS, 암호화, 인증 및 권한 부여)
서비스 간 계층에서 계측 정보를 제공하는 메트릭
서비스 메시 구조
기존의 서비스 아키텍처에서의 호출이 직접 호출 방식이었다면, Service Mesh에서의 호출은 서비스에 딸린 proxy끼리 이뤄지게 됩니다. 이는 서비스의 트래픽을 네트워크단에서 통제할 수 있게 하고, 또한 Client의 요구에 따라 proxy단에서 라우팅 서비스도 가능하게 할 수 있습니다.
이런 다양한 기능을 수행하려면 기존 TCP 기반의 proxy로는 한계가 있습니다. Service Mesh에서의 통신은 사이드카로 배치된 경량화되고 L7 계층 기반의 proxy를 사용하게 됩니다.
Control Plain과 Data Plain
서비스 메시는 Control Plain과 Data Plain으로 구성되어 있습니다.
Control Plain
Control Plain은 트래픽을 제어하는 정책 및 구성에 따라 proxy에게 설정값을 전달하고 관리하는 컨트롤러 역할을 합니다.
Data Plain
Data Plain은 Proxy를 통해 마이크로 서비스 간에 오고 가는 모든 네트워크 통신을 조정하고 제어합니다. Service discovery, Load balancing, TLS termination, Circuit breaker 등의 기능을 제공하며 가장 인기 있는 Data Plain인 Envoy proxy가 많이 사용됩니다.
Envoy Proxy
Data Plain에서 사용되는 Envoy는 C++로 개발된 고성능 프록시이며 아래와 같은 기능을 수행합니다.
Dynamic service discovery
Load balancing
TLS termination
HTTP/2 and gRPC proxies
Circuit breakers
Health checks
Staged rollouts with %-based traffic split
Fault injection
Rich metrics
API Gateway vs Service Mesh
두 서비스 모두 서비스 검색, 요청 라우팅, 인증, 속도 제한 및 모니터링을 모두 처리할 수 있지만 적용되는 위치와 아키텍쳐 형태등에 차이가 있습니다.
적용되는 위치
API Gateway는 마이크로서비스 그룹의 외부 경계에 위치하여 역할을 수행하지만, ServiceMesh는 경계 내부에서 그 역할을 수행합니다. API Gateway의 주요 목적은 네트워크 외부의 트래픽을 수락하고 내부적으로 배포하는 것입니다. 서비스 메시의 주요 목적은 네트워크 내부에서 트래픽을 라우팅하고 관리하는 것입니다.
아키텍쳐 형태
API Gateway가 중앙집중형 아키텍쳐여서 SPOF(Single Point of Failure)을 생성한다면, Service Mesh는 분산형 아키텍쳐를 취하기 때문에 SPOF를 생성하지 않고 확장이 용이합니다.
패턴
API Gateway는 일반적으로 Gateway proxy pattern을 사용해서 수행됩니다. Consumer(호출자)은 구현 내용을 알 필요 없이 Gateway를 호출하는 방법만 알면 Gateway가 알아서 수행해주는 방식입니다. 반면 Service Mesh는 일반적으로 Sidecar proxy pattern을 사용합니다. Consumer(호출자)의 코드에는 Provider(공급자)의 주소를 찾는방법, failover와 관련된 코드 등의 내용이 들어가게 됩니다. 다만, 호출자의 코드는 어플리케이션 코드(비즈니스 로직)에 내장되는 것이 아니라 sidecar 형태로 별개로 관리됩니다.
둘다 필요한가?
Service Mesh와 API Gateway는 함께 작동하여 외부 트래픽을 효율적으로 수락 한 다음 해당 트래픽이 네트워크에 있으면 효과적으로 라우팅 할 수 있습니다. API 게이트웨이와 서비스 메시가 있는 배포에서 클러스터 외부에서 들어오는 트래픽은 먼저 API 게이트웨이를 통해 라우팅 된 다음 메시로 라우팅 됩니다. API 게이트웨이는 인증, 에지 라우팅 및 기타 에지 기능을 처리할 수 있으며 서비스 메시는 아키텍처에 대한 세밀한 관찰 및 제어를 제공할 수 있습니다.
향후 전망
서비스 메시 기술은 빠르게 발전하고 있으며 API 게이트웨이의 일부 기능을 수행하기 시작했습니다. 클라우드 네이티브 공간이 발전하고 더 많은 조직이 Docker 및 Kubernetes를 사용하여 마이크로 서비스 아키텍처를 관리하는 방식으로 이동함에 따라 서비스 메시와 API 게이트웨이 기능이 병합될 가능성이 높습니다. 앞으로 몇 년 안에는 독립형 API 게이트웨이의 많은 기능이 서비스 메시에 흡수되어 점점 더 적게 사용될 것으로 예측됩니다.
Istio vs AWS App Mesh
Istio
ISTIO 는 한동안 서비스 메시 분야에서 주요 역할을 해왔으며 Envoy를 데이터 플레인으로 래핑 한다는 점에서 AWS App Mesh와 유사점을 공유합니다. 두 가지 모두 마이크로 서비스 간의 트래픽 흐름을 모니터링하고 제어할 수 있도록 하는 유사한 요구 사항을 가지고 있습니다. 또한 Istio는 오픈 소스이며 공급 업체에 구애받지 않으며 AWS App Mesh보다 훨씬 오랫동안 사용되어 왔으므로 현재 더 많은 기능을 제공하고 다양한 플랫폼을 지원합니다.
AWS App Mesh
AWS가 제공하는 자체 서비스 메시입니다. AWS App Mesh는 ECS, EKS 및 EC2에서 구동되는 Kubernetes 환경 하의 마이크로 서비스 애플리케이션에서 통신을 모니터링하고 제어하는 데 사용할 수 있습니다.
App Mesh는 현재 Envoy를 사용하므로 마이크로 서비스 모니터링을 위해 다른 오픈 소스 및 AWS 파트너 도구와 호환됩니다. 수집되는 데이터는 AWS X-Ray, Amazon CloudWatch 및 Envoy와 통합되는 타사 모니터링 및 추적 도구를 비롯한 다양한 AWS 및 타사 도구로 내보낼 수 있습니다. 서비스에 대한 블루 / 그린 카나리아 배포를 활성화하도록 새로운 트래픽 라우팅 제어를 구성할 수 있습니다.
또한 ECS / EKS / EC2 등에서 이미 사용하고 있는 컴퓨팅 리소스 외에는 App Mesh에 대한 추가 가격이 없습니다.
AWS는 거대한 엔지니어링 리소스를 처리할 뿐만 아니라 대규모 엔지니어링 커뮤니티 내에서 널리 보급되어 있으므로 현재 일부 기능이 부족함에도 불구하고 Istio를 대체할 것으로 예상됩니다.
BenchMark
Service Mesh를 적용할 경우 각각의 서비스가 sidecar proxy를 통해 통신하므로 성능에 문제가 있는지 체크하기 위해 테스트를 진행하였습니다.
EKS Worker Node 사양 : EC2 t3.medium ( 2cpu, 4G memory )
Demo로 제공되는 Sample 페이지 호출( yelb )하여 TPS 측정
LoadBalancer, ISTIO, AWS App Mesh를 사용해서 서비스했을때의 성능 비교
결과부터 이야기하면 Service mesh 적용 전 후의 처리 성능에 대해서는 유의미한 차이를 발견하기 어려웠습니다.
LoadBalancer
ISTIO
AWS App Mesh
[참고]
[Service Mesh]서비스 메시란?
서비스 메시(Service Mesh)란 무엇일까?
개요
Istio에 관해 알아보던 중, Service Mesh라는 용어가 나와 이 용어가 의미하는 바를 알아보고 이해한다.
목차
소개
1. 서비스 메시(Service Mesh)란?
서비스 메시(Service Mesh)의 정의
서비스 메시란 애플리케이션의 다양한 부분들이 서로 데이터를 공유하는 방식을 제어하는 방법이다. 서비스 메시는 각 서비스(애플리케이션의 각 부분)에서 서비스간에 커뮤니케이션을 관리해야하는 다른 시스템과는 다르게 애플리케이션에 구축된 전용 인프라 계층을 통해, 서로 다른 애플리케이션이 얼마나 원활하게 상호작용하는지를 기록 할 수 있어, 더욱 손쉽게 어플리케이션 간의 커뮤니케이션을 활성화 하고, 애플리케이션이 확장됨에 따라 발생하는 커뮤니케이션의 복잡함을 해소시켜 다운 타임을 방지 할 수 있도록 해준다.
언제 서비스 메시(Service Mesh)를 도입할까?
현대의 애플리케이션은 각 서비스들이 다른 서비스 및 데이터베이스와 상호작용하며 데이터를 주고받는다. 이러한 상호작용은 특정한 비즈니스 기능들을 수행하는 서비스 네트워크로 분류 할 수 있는데, 이러한 네트워크 속에서 데이터들은 여러 서비스들로부터 데이터를 요청을 주고받게 되는 것이다. 이 때 특정 서비스에 데이터의 요청이 몰리는 경우를 대비해, 모든 동작들이 최적화 될 수 있도록 한 서비스에서 다음 서비스로 요청을 라우팅하는 서비스 메시를 도입한다.
2. 마이크로서비스(MicroService)와의 차이점
출처: https://www.redhat.com/cms/managed-files/microservices-1680.png
마이크로서비스(MicroService)란?
마이크로서비스는 각 마이크로서비스에 대해 자체적인 도구 및 코딩언어를 선택 할 수 있는 유연성을 적용 할 수 있는 소규모팀에 의해 구축된다. 즉 각 마이크로서비스는 독립적으로 구축되어 서로 통신하며 특정 서비스가 중단되어도 전체 서비스가 중단되지 않는 특징을 갖고 있다.
마이크로서비스(MicroService)에서 상호 통신의 한계
이러한 마이크로서비스는 서비스 메시 계층 없이 각 마이크로서비스에 코딩을 입혀 통신을 할 수 있지만, 통신이 복잡해지면 한계가 발생한다. 실제 마이크로서비스 아키텍처에 구축된 클라우드 네이티브 앱들의 서비스 메시는 수많은 개별 서비스를 기능적 애플리케이션으로 구성한 방법을 사용하였다.
3. 서비스 메시(Service Mesh)는 어떻게 동작하는가?
기존 데이터간 통신 방식과의 차이점
기존 모든 아키텍처의 앱에는 특정 요청에 대하여 A-B로 이동하는 방법을 지정하는 규칙을 항상 필요로 하였다. 하지만 서비스 메시는 기존의 서비스에서 서비스로 통신을 제어하는 개별 서비스적인 논리에서 벗어나, 인프라 계층으로 추상화 한다는 차이점이 존재한다.
서비스 메시(Service Mesh) 동작방식
서비스 메시는 네트워크 프록시 배열로 앱에 구축된다. 즉, 서비스 메시에서의 요청은 자체 인프라 계층의 프록시를 통해 마이크로서비스들 사이에서 라우팅된다. 즉, 서비스 메시를 구성하는 개별 프록시들은 마이크로서비스 내부에서 실행되는 것이 아닌, 각 마이크로서비스와 함께 실행되기 때문에 ‘sidecar’라고도 한다. 이러한 ‘sidecar’는 아래 그림처럼, 마이크로서비스와 나란히 위치하여 다른 프록시로 라우팅을 요청하고, 이러한 ‘sidecar’들이 모여 메시 네트워크를 형성한다.
출처: https://www.redhat.com/cms/managed-files/service-mesh-1680.png
서비스 메시(Service Mesh)가 없는 마이크로서비스(MicroService)
서비스 메시가 없는 마이크로서비스는, 각 마이크로서비스에 서비스들 사이에서의 커뮤니케이션을 통제하는 로직또한 코딩해야 하기 때문에, 개발자들은 자신들이 본래 구현해야 할 비즈니스 목표에 집중하지 못하게 된다. 또한 서비스들 사이의 커뮤니케이션을 통제하는 로직이 서비스 내부에 있어, 어느 서비스들 사이의 커뮤니케이션에서 문제가 발생했는지 알기 어렵다. 또한 각 애플리케이션에 새로운 서비스가 추가된다면 이는 서비스들 사이의 커뮤니케이션을 더욱 복잡하게 만들고, 복잡해진 마이크로서비스는 애플리케이션 내에 장애 지점을 찾는데 어려움을 유발시킨다.
4. 서비스 메시(Service Mesh)의 이점
서비스들 사이에서 발생하는 커뮤니케이션의 모든 부분을 성능 메트릭으로 캡쳐하여 준다. 이러한 성능 메트릭은 시간이 지남에 따라 데이터가 누적되면서, 커뮤니케이션에 대한 룰에 적용이 가능하게 되며, 이는 서비스들이 효율적이고 안정적으로 서비스를 요청 할 수 있도록 한다. 개발자들은 서비스들 사이의 커뮤니케이션에 신경을 쓰지 않고, 비즈니스 목표에 더욱 집중 할 수 있게 된다. Jaeger(분산 추적 시스템)와 같은 소프트웨어를 통해 서비스와 함께 눈에 보이는 인프라 계층을 형성하여 문제를 더욱 손쉽게 인식하고 진단 할 수 있도록 해준다. 서비스 메시(Service Mesh)는 장애가 발생한 서비스로부터의 요청을 다시 라우팅 할 수 있기 때문에 다운타임이 발생 시 애플리케이션 복구 능력을 향상 시켜 줄 수 있다.
Jaeger(예거) 란?
분산 서비스들 사이에서의 트랜잭션을 추적하는 오픈소스 소프트웨어로 복잡한 마이크로서비스 환경을 모니터링하고 문제를 해결하는데 사용된다. 이 때 분산 추적이란, 마이크로서비스 간 복잡한 상호 작용에서 사건 발생의 전체를 파악하는 방식이다.
참고사이트
https://www.redhat.com/ko/topics/microservices/what-is-a-service-mesh
서비스 메시의 의미와 서비스 메시 프로젝트들
Offcanvas
Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
서비스 메시란 무엇입니까?
서비스 메시는 서비스가 애플리케이션 수명 주기 전반에 걸쳐 데이터와 일관성을 공유하며 서로 통신할 수 있도록 지원하는 사전 구성된 애플리케이션 서비스입니다. 서비스 메시는 컨테이너의 쓰기 가능한 얇은 계층을 사용하여 마이크로서비스를 관리하는 데 사용됩니다. 쉽게 설정하고 배포할 수 있도록 구축된 서비스 메시는 마이크로서비스의 가치를 실현하여 기업이 새로운 서비스를 쉽게 발견하고 API 제품으로 관리할 수 있도록 합니다.
서비스 메시를 구현하려면 디지털 시대에 맞는 현대적인 통합 전략이 있어야 합니다. 민첩해야 하고 혁신을 촉진해야 하며 비즈니스 요구 사항을 충족해야 합니다. 효율성도 중요하지만 최우선 순위는 아닙니다.
서비스 메시의 이점
마이크로서비스 기반 애플리케이션 표준화. 분산 애플리케이션의 동작은 지원하는 네트워크에 따라 다릅니다. 다양한 동작으로 인해 구성 관리 시스템에 문제가 발생할 수 있습니다. 서비스 메시는 조정자에 대한 고유한 데이터 센터의 번거로움을 줄여줍니다.
분산 애플리케이션의 동작 모니터링 및 개선. 우수한 서비스 메시는 요청이 많은 구성 요소를 가장 쉽게 액세스할 수 있는 애플리케이션 제어 평면의 위치에 배치하도록 설계되었습니다. 즉, 구성 요소는 원활하고 효율적으로 작동해야 합니다. 서비스 메시를 사용하면 데이터가 공유되므로 개발자는 다음 반복 단계에서 개선해야 할 사항을 확인할 수 있습니다.
복잡한 상호 작용에 대한 투명성이 향상되었습니다. 클라우드 네이티브 환경에서는 정보의 흐름을 따라가기가 어려운 경우가 많습니다. 서비스 메시는 중요한 애플리케이션 서비스가 제공되는 방식에 투명성을 제공하여 해당 서비스의 동작을 추적할 수 있도록 합니다.
암호화. 서비스 메시는 키, 인증서 및 TLS 구성을 관리하여 사용자가 실패하지 않는 지속적인 암호화를 보장합니다. 사용자는 더 이상 암호화를 구현하거나 인증서를 관리할 필요가 없습니다. 대신 이러한 책임은 앱 개발자에서 프레임워크 계층으로 넘어갑니다.
Service Mesh (서비스 메시) 고민
Service Mesh (서비스 메시) 고민
개요
서비스 메쉬란, 각 서비스 간에 데이터를 공유하는 방식을 제어하는 방법이다. 앱 내부 하나의 인프라 레이어로 직접 구축된다.(built-in)
제어가 왜 필요할까?
분산 환경이므로 서비스 경로 제공(routing, registry, discovery)
한 서비스에 몰리는 것 방지(lb)
서비스 간 최적화된 커뮤니케이션 방식 고려(gRPC 등 파드 간 통신 프로토콜 제어)
배경
MSA에서는 하나의 비즈니스 로직을 수행하기 위해서 여러 서비스의 작동이 필요하다.
따라서 다른 서비스와 비교할 때 특정 서비스에 부하가 많이 걸리는 경우가 발생할 수 있는데, 이러한 부하를 적절하게 분배하고, 작동 방식을 최적화하는 것이 서비스 메쉬이다.
물론, 서비스 메시가 없더라도 서비스에서 직접 다른 서비스를 호출할 수도 있을 것이나, 아키텍처가 복잡해질 수록 부하 예측과 상태 체크가 어려워질 것이다.
대량의 개별 서비스를 정상 애플리케이션으로 구성하기 위해서 서비스메시는 필수적이다.
방법
서비스 메시는 네트워크 프록시의 배열로서 구축되어 런타임 환경에 새로운 기능을 도입해야하는 방식보다는, 인프라 계층에 추상화되는 것이 특징이다. (Redhat 기준)
서비스 메시에서는 요청이 자체 인프라 계층의 프록시를 통하므로, 개별 프록시는 서비스 내부가 아니라, 서비스와 함께 실행되는 것이 특징이다. 이를 Sidecar 프록시라 한다. Sidecar 프록시들이 모여서 메쉬 네트워크를 형성한다.
(사이드카가 없다면, 각 서비스 간 커뮤니케이션 통제 로직을 직접 코딩해야 하므로 시간이 걸리고, 장애 진단이 더 어려워진다)
장점
서비스 연결 자동화
비즈니스 로직의 문제 진단 용이
애플리케이션 복구 능력 향상(다운 시 재라우팅 가능)
시스템 모니터링 가능
사이드카 패턴
의문점
SideCar에 대한 설명을 보니 (네트워크 레이어, 같이 실행이 아닌 함께 실행, 비즈니스 로직과 분리 등) 이건 Eureka만으로는 충족할 수 없는 조건들 아닌가? 하는 의문이 들었다.
왜냐하면 Eureka는 (1) 코드 내 Annotation으로 추가되고 (2) eureka 관련 로직은 빌드 과정에서 코드 빌드 결과물과 동일한 jar 파일에 포함되며 (3) 그 결과 특정 서비스가 죽으면 sidecar도 동작하지 않기때문이다.
검색해본 결과, netflix-sidecar라는 모듈이 존재했다. polyglot 환경에서도, 즉 파이썬, javascript 등의 서로 다른 언어로 구성된 이종(Hetero) 서비스 간에도 헬스 체크를 가능하게 한다.
또는 js같은경우 eureka client로써 jar 기반 eureka server에서 discovery할 수 있도록 기능하는 모듈을 import&packaging 할 수도 있다. (검색 결과 Spring Cloud는 엄밀한 의미의 사이드카 프록시를 제공하는 것은 아니었음. Service mesh 관련 기술도 Mesh(Network)와 tightly coupled인지 independent인지에 따라서 분류가 됨)
솔루션 분류
service mesh 솔루션은 서비스 코드의 연관도에 따라서 분류된다.
Mesh-Native, Mesh-Aware, Mesh-Agnostic 세 가지로 분류되는데, 각각 서비스 코드 개발 과정에서 Mesh에 대하여 얼만큼 고려해야 하는지를 기준으로 분류된다고 볼 수 있다.
Mesh-Native Code는 서비스 코드에 “Mesh 자체”를 구현하는 코드를 추가하는 형태를 말한다.
Mesh-Aware Code는 서비스 코드 작성 시 Mesh를 이해하고서 부분적으로 수정을 가해야하는 수준을 말한다. ( ex. Spring Cloud Eureka, )
Mesh-Agnostic Code는 비즈니스 로직에는 Mesh에 관한 코드가 일절 불필요한 형태를 말한다. 서비스와 완전히 별개로 동작하므로 Sidecar Proxy가 실현된 사례라고 볼 수 있다.
Service Discovery
서비스 클라이언트가 동적으로 변경되는 서비스 위치를 Follow-up하는 기능
발생 배경은 클라우드, 컨테이너 기반 환경으로 넘어오면서 오토 스케일링, 컨테이너 자동 배포 등의 동적인 기능이 많이 구현되어 활용됨. 이로 인해서 런타임 중에 변경되는 서비스 정보도 catch-up할 수 있는 구성 요소가 필요해졌음.
– Service Registry
각 서비스들이 자신의 위치 정보를 등록해놓는 대상 서비스이다. 레지스트리에 등록된 후에는 다른 서비스들은 모든 서비스에 접근할 필요 없이, 레지스트리에 등록된 접근정보를 이용하여 타 서비스로 접근하게 된다.
– Client-side vs Server-side discovery
클라이언트가 직접 서비스 등록 정보를 알아내면 Client-side이고 로드밸런서 또는 프록시 서버가 대신 정보를 알아내면 Server-side이다. 아마 Client-side가 더 빠르고, Server-side는 관리(부하 조절 등)가 용이할 것으로 보인다.
VMware 용어집
서비스 메시의 이점
상호 운용성 향상 : 서비스 메시는 웹, 모바일, SaaS 애플리케이션 코드를 지원하는 통합 마이크로 서비스 환경의 SDN 라우팅 기능을 확장합니다.
: 서비스 메시는 웹, 모바일, SaaS 애플리케이션 코드를 지원하는 통합 마이크로 서비스 환경의 SDN 라우팅 기능을 확장합니다. 마이크로 서비스 검색 기능 강화 : 서비스 메시는 더 우수한 마이크로 서비스 검색을 통해 네트워크 구성 및 관리를 개선합니다.
: 서비스 메시는 더 우수한 마이크로 서비스 검색을 통해 네트워크 구성 및 관리를 개선합니다. 네트워크 활동에 대한 세부적인 실시간 모니터링 및 분석 : 서비스 메시는 백엔드 프로세스와 웹 서버 하드웨어에 액세스할 수 있어 네트워크 활동을 더욱 상세하게 실시간으로 모니터링하고 분석합니다.
: 서비스 메시는 백엔드 프로세스와 웹 서버 하드웨어에 액세스할 수 있어 네트워크 활동을 더욱 상세하게 실시간으로 모니터링하고 분석합니다. 웹 및 모바일 스크립트 자동화 향상: 개발자는 YAML 파일과 Vagrant, Jenkins, Puppet, Chef 등의 유틸리티를 통해 서비스 메시 기능의 스크립트를 작성하여 웹 및 모바일 스크립트의 강력한 자동화를 대규모로 구축할 수 있습니다. 기업의 운영 환경에서 복잡한 SaaS 애플리케이션을 지원하려면 이러한 유형의 아키텍처가 필요합니다. 서비스 메시는 클라우드에서 동시에 실행되는 수천 또는 수백만 개의 컨테이너를 조정합니다.
서비스 메시 작동 방식
서비스 메시는 실행 중인 마이크로 서비스를 IP 주소별로 등록하기 위해 탄력적인 웹 서버 네트워크의 모든 가상 머신 인스턴스 또는 노드에 설치되는 검색 및 라우팅 애플리케이션을 통해 작동합니다. 네트워크에서 동시에 실행 중인 모든 마이크로 서비스를 구성, 관리, 운영하기 위해 중앙 레지스트리가 사용됩니다. 서비스 메시는 웹 서버, 데이터 센터, 애플리케이션의 다양한 계층에서 동시에 실행되는 애플리케이션에서 참조되어 데이터 분석 및 네트워크 모니터링을 통해 상호 운용 가능한 기능을 확장합니다. 그 결과 IP 라우팅, SDN 정의, 방화벽 설정, 필터, 규칙, 클라우드 로드 밸런싱 수준에서 데이터 센터 자동화가 향상됩니다.
API 연결은 데이터 전송 또는 필요한 처리 활동을 위해 실행 중인 애플리케이션과 마이크로 서비스 기능을 어디에서 검색해야 하는지를 정의하기 위해 서비스 메시를 참조할 수 있습니다. Kubernetes를 통해 자동으로 확장되는 탄력적인 웹 서버 플랫폼은 마이크로 서비스 검색을 위한 중앙 레지스트리와 구성 관리 유틸리티로 Istio를 사용합니다. AWS EC2와 Kubernetes 등 탄력적인 웹 서버 플랫폼은 서비스 메시를 활용하여 동일한 런타임에 여러 클라우드 애플리케이션 사본을 관리함과 동시에 마스터 데이터베이스와 스토리지 정보에 대한 변경 사항을 동기화합니다. 서비스 메시를 통해 애플리케이션 계층은 마이크로 서비스나 코드 베이스의 요구 사항에 따라 API를 통해 웹 서버, 인터넷, 데이터 센터 네트워크 리소스와 통신하거나 그 반대로 통신할 수 있습니다.
서비스 메시 아키텍처
서비스 메시는 클라우드 데이터 센터의 가상 머신이나 컨테이너 전반에 설치된 추상화 계층에 기반합니다. 코드는 데이터 센터 조정을 실행하는 중앙 관리 소프트웨어 인스턴스와 통신하는 모든 가상 머신 또는 노드에 설치됩니다. VMware NSX, Istio 등의 서비스 메시 솔루션은 Envoy를 사용하여 노드 수준에서 데이터 플레인을 생성합니다. Envoy는 실행 중인 마이크로 서비스, 라이센스를 받은 IP 주소, HTTPS 암호화, 활성화된 데이터베이스 형식 등에 관련된 정보를 가상 머신 또는 노드별로 관리합니다. NSX의 경우 여기에는 하이퍼바이저 수준에서의 분산된 방화벽 통합이 포함됩니다. 탄력적인 클라우드 네트워크에서 각 가상 머신 또는 노드의 데이터 플레인 정보는 로드 밸런싱에 사용됩니다. API 연결은 서비스 메시 아키텍처를 통해 애플리케이션간 라우팅 요구 사항을 충족합니다. 서비스 메시 레벨 7에서의 원격 측정으로는 DNS, HTTP/S, SMTP, POP3, FTP 등이 있습니다.
서비스 메시 구현
서비스 메시 구현에는 웹/모바일 애플리케이션의 SDN, IP 주소, 마이크로 서비스, API 리소스 전반에 걸친 로드 밸런싱과 서비스 검색이 포함됩니다. 서비스 메시는 탄력적인 웹 서버 아키텍처 내 하드웨어 전반의 웹 서버 백엔드 내 연결을 위한 통신, 동기화, 암호화를 관리합니다. 클라우드 애플리케이션에서는 스크립트, 데이터베이스, 정적 웹 파일이 서로 다른 하드웨어에서 분리되었다가 웹 브라우저의 최종 페이지에서 합쳐지는 경우가 많습니다. 하드웨어, 스크립트, 데이터베이스, 파일 간 SDN 라우팅은 코드에 타사 API가 포함되면서 더욱 복잡해집니다. 페이지를 로드할 때마다 리소스 전반에서 이 모두를 합쳐야 하는 경우, 서비스 메시가 탄력적인 웹 서버 프레임워크에서 여러 가상 머신에 걸쳐 운영을 통합, 동기화, 표준화합니다. 서비스 메시는 데이터 센터에서 다른 소프트웨어가 제공하지 않는 수요를 충족하기 위해 개발되었습니다. 여기에는 웹 트래픽 연결에서 비롯된 데이터 분석과 사용자 측정지표도 포함됩니다.
오픈 소스 서비스 메시
Istio는 현재 가장 발전된 형태의 오픈 소스 서비스 메시 프로젝트로서, 노드 간 데이터 플레인 관리에 관련된 중심 기능에 Envoy를 사용합니다. Istio는 원래 CNCF(Cloud Native Computing Foundation)의 일부로 개발되었으며 VMware NSX Service Mesh와 Enterprise PKS 플랫폼에서 사용됩니다. VMware는 PKS를 통해 Kubernetes를 배포하며, PKS는 컨테이너를 통해 클라우드 웹 서버를 조정합니다. PKS는 퍼블릭 및 프라이빗 클라우드 요구 사항을 충족하기 위한 자체 호스팅 패키지로, 또는 완벽하게 관리되는 CaaS(Containers-as-a-Service) 제품으로 제공됩니다. Istio는 기업 데이터 센터에서 규모에 맞게 탄력적으로 웹 서버를 조정하기 위한 복잡한 IP 주소 라우팅 기능과 암호화를 제공하여 Kubernetes에서의 마이크로 서비스 통신에 사용됩니다. 서비스 메시 프레임워크의 구성 요소로 개발되고 있는 다른 대표적인 오픈 소스 프로젝트로는 Linkerd, Conduit, Aspen, Consul이 있습니다.
탄력적 서비스 메시
AWS EC2나 Kubernetes 등의 클라우드 호스팅 프레임워크에서 데이터베이스와 웹사이트 파일을 동기화하는 데는 탄력적 서비스 메시가 필요합니다. 서비스 메시는 소프트웨어 애플리케이션 지원에 있어 API 및 SDN 요구 사항을 충족하기 위해 웹 서버 백엔드의 가상 머신 간 라우팅을 제어합니다. 탄력적인 웹 서버 네트워크에서 검색 및 로드 밸런싱에도 서비스 메시를 사용하는 경우, 시스템 관리자는 데이터 센터 리소스 할당을 자동화하여 운영 환경의 사용자 트래픽 요구 사항을 충족할 수 있습니다. 웹 서버를 자동으로 가동하거나 더 이상 필요하지 않을 때에는 자동으로 종료하도록 구성하여 클라우드 하드웨어 리소스를 더욱 효율적으로 사용할 수 있습니다. 실시간 모니터링 및 분석 기능을 가상 머신이나 노드 수준의 서비스 메시에 내장하는 기능을 통해 소프트웨어 개발자, 프로그래머, 웹 퍼블리셔가 마이크로 서비스를 사용하여 애플리케이션을 위한 새로운 기능을 구축할 수 있습니다.
마이크로 서비스 아키텍처에 서비스 메시가 필요한 이유
퍼블릭 클라우드에서는 각기 다른 런타임을 통해 여러 애플리케이션과 데이터베이스를 동시에 지원하는 컨테이너 또는 가상 머신에 걸쳐 수백만 개의 마이크로 서비스가 동시에 실행될 수 있습니다. 가상화에 기반한 멀티 테넌트 환경에서는 마이크로 서비스를 더 효과적으로 검색하고 등록하는 방식을 통해 각 마이크로 서비스의 고유한 기능을 애플리케이션에 통합하거나 API를 사용하여 다른 기기에 공유할 수 있어야 합니다. 마이크로 서비스 형식은 탄력적 웹 서버 플랫폼을 위해 특별히 설계되지 않은 경우가 많기 때문에 서비스 메시를 사용하여 컨테이너 내 운영을 관리해야 합니다. 서비스 메시는 SDN을 통해 세부적인 라우팅 및 암호화 기능을 제공하여 서로 다른 API가 웹 서버, Endpoint, 다른 기기에서 실행되는 코드 프로세스 간에 통신할 수 있도록 해 줍니다.
MSA와 분산아키텍처 수용을 위한 방법: 서비스 메쉬와 이스티오
클라우드
이형석
1 들어가며
최근 많은 기업이 기존 모놀리식 아키텍처(Monolithic Architecture)의 한계를 극복하고 클라우드 환경에서 시스템 운영 이점을 극대화하기 위해 마이크로서비스 아키텍처(Microservices Architecture, 이하 MSA)를 채택하고 있습니다.
현재 뜨거운 관심을 받고 있는 MSA는 새로운 개념으로 봐야 할까요? 그렇지 않습니다. 15년 전에 지금의 MSA와 유사한 SOA(Service Oriented Architecture)라는 개념이 소개되었기 때문입니다. SOA는 애플리케이션을 비즈니스적인 의미를 가지는 기능 단위로 묶어서 표준화된 호출 인터페이스를 통해 서비스라는 소프트웨어 컴포넌트로 재조합하여 업무를 구현하는 아키텍처로 당시에는 획기적인 사상이었습니다.
SOA는 실패했을까? 그럼 MSA는?
SOA는 비즈니스 로직에 집중하고 도메인을 중심으로 서비스를 분리하는 등 MSA와 여러모로 유사합니다. 반면 SOA는 분산처리 환경에서 발생하는 문제를 해결하기 위해 ESB(Enterprise Service Bus)를 사용했다는 점이 MSA와 다릅니다. 당시에는 장밋빛 미래가 보장될 것만 같았던 SOA는 결국 실패한 것으로 평가받았습니다. 그 이유는 다양하게 거론되지만 여기서는 두 가지만 언급하도록 하겠습니다.
첫째, 조직 변화 수용의 실패
“모든 시스템은 그 조직의 의사소통 구조와 동일하게 만들어진다”는 콘웨이의 법칙(Conway’s law)은 1968년 미국의 컴퓨터 과학자인 멜빈 콘웨이가 주장한 것으로 팀을 구성하는 방법이 업무 수행 방식에 영향을 미친다는 이론입니다. SOA는 조직에 엄청난 변화를 가져오기에 제대로 적용하기 위해서는 미지의 두려움에 대한 도전이 필요했습니다. SOA 자체가 복잡한 데다 기능을 전문화하기 위해서는 무엇보다 조직 간 협업이 필수적이었습니다. 하지만 조직의 인식이 이런 개념을 수용하지 못했고 조직이 변화해야 한다는 사실도 인지하지 못하였습니다.
최근 클라우드 컴퓨팅이 부상하면서 대두된 데브옵스(DevOps)와 SRE(Site Reliability Engineering)는 조직의 변화가 수반되어야 함을 강조합니다. MSA도 마찬가지입니다. MSA를 성공적으로 적용하기 위해서는 조직의 구조 역시 이를 수용할 수 있는 형태로 바뀌어야 합니다.
둘째, ESB의 부하 중앙 집중 문제
분산 처리 환경의 문제를 애플리케이션 외부에서 해결하려고 한 것이 ESB와 여기서 소개하려는 서비스 메쉬(Service Mesh)의 유사점이라고 할 수 있습니다. 하지만 ESB는 중앙집중형으로 공통 기능의 비대화에 따른 문제를 제대로 해소하지 못하였습니다. SOA라는 개념은 상당히 복잡해서 그 이상에 비해 당시의 기술력이 부족했던 점도 실패 원인 중 하나로 들 수 있습니다.
SOA가 시들해진 지 수 년이 지났고 다시 MSA라는 개념이 화두가 되고 있습니다. 그럼 현재의 MSA는 과거의 SOA와 무슨 차이점이 있는 것일까요?
MSA와 SOA는 무엇이 다를까?
SOA의 ESB는 중앙에 위치하여 서비스 간 통신을 담당합니다.
[그림 1] SOA 구조와 ESB MSA 개념에서 보면 [그림 2]와 같이 하나의 ESB를 다수의 마이크로서비스 컴포넌트로 분리하여 처리하는 것과 다르지 않습니다.SOA 와 비교한 MSA의 구조로 첫 번째 Micro Service 에 Service1과 Service4, 두 번째 Micro Service 에 Service2과 Service5, 세 번째 Micro Service 에 Service3과 Service6로 구성된 그림이다. [그림 2] SOA와 비교한 MSA의 구조 ESB를 활용하는 SOA와 달리 마이크로서비스 아키텍처는 서비스 간 통신 기능을 구현하는데 많은 시간과 노력을 들여야 한다는 것을 짐작할 수 있을 것입니다. 사실 MSA에서 가장 어려운 부분은 서비스 자체를 구축하는 것이 아니라, 서비스 간의 통신을 처리하는 것입니다. 통신 흐름을 제어하는 것이 대단히 복잡하기 때문입니다. 그래서 필요한 것이 바로 서비스 메쉬입니다.
본 아티클에서는 서비스 메쉬의 등장 배경과 이를 구현한 오픈소스 솔루션인 이스티오(Istio)에 대해 알아보도록 하겠습니다.
2 서비스 메쉬(Service Mesh)
서비스 메쉬와 넷플릭스 OSS
하나의 애플리케이션에서 동작하는 모놀리식 아키텍처와 달리 MSA는 나누어진 서비스와 인스턴스 수만큼 관리 대상이 급격히 증가합니다. 또한 서비스 간 복잡한 연결 구조 때문에 장애 추적이 어렵고, 장애가 발생한 서비스로 인해 타 서비스를 호출하는 로직이 수행되지 않으면서 다른 서비스까지 동작하지 않는 장애 전파 현상이 나타납니다. 서비스 메쉬 아키텍처는 MSA의 트래픽 문제를 보완하는 마이크로서비스 간 커뮤니케이션 인프라입니다. 서비스 메쉬를 사용하면 마이크로서비스 간에는 직접 통신을 하지 않게 됩니다. 대신 모든 통신은 애플리케이션 네트워크 기능을 제공하는 서비스 메쉬를 통해 이루어집니다.
클라우드에 적극적이었던 넷플릭스(Netflix)는 이런 탄력적인 서비스의 필요성을 가장 먼저 깨닫고 서킷 브레이커 패턴의 Hystrix, 서비스 디스커버리 패턴의 Eureka, 모니터링 서비스인 Turbine 등의 컴포넌트를 개발하여 넷플릭스 OSS(Open Source Software)로 공개하였습니다. 아울러 오픈소스 애플리케이션 개발 프레임워크인 스프링 프레임워크(Spring Framework)에 넷플릭스 OSS를 통합한 Spring Cloud Netflix를 제공하여 손쉽게 마이크로서비스를 구현할 수 있도록 하였습니다. 하지만 넷플릭스 OSS는 Java로 개발된 관계로 이를 사용하기 위해서는 라이브러리를 포함하고 코드에 관련된 컴포넌트를 추가해야 하는 등의 제약이 있습니다. 또한, 당시에는 가상머신이 클라우드에서 애플리케이션을 실행하는 유일한 방법이었고 넷플릭스 OSS도 이에 최적화되어 있다 보니 최신의 운영 환경을 모두 수용하지 못하는 단점이 있습니다.
클라우드 네이티브(Cloud Native)와 쿠버네티스(Kubernetes)의 등장
현재 많은 기업이 기존의 레거시 시스템을 클라우드 환경으로 이전하고 있습니다. 이와 같이 클라우드 컴퓨팅의 이점을 활용하는 애플리케이션 구축 및 실행 컨셉을 클라우드 네이티브(Cloud Native)라고 하며, 이는 클라우드를 기반으로 개발 생산성과 IT 속도를 극대화하기 위해 탄생하였습니다.
퍼블릭 클라우드 벤더(AWS, Microsoft, Google 등)의 성장과 함께 컨테이너 기술 개발도 활발해졌는데 가장 빠르게 발전한 것이 오픈소스 컨테이너 오케스트레이션 플랫폼인 쿠버네티스(Kubernetes)입니다. 현재 쿠버네티스와 컨테이너는 마이크로서비스 애플리케이션을 실행하는데 사실상 표준이 되었습니다. 다수의 컨테이너에 애플리케이션 서비스를 올리게 되면서 수많은 애플리케이션을 운영하는 환경으로 변화되었습니다. 컨테이너 관리와 더불어 마이크로서비스로 불리는 서비스 간의 통신 역시 증가할 수밖에 없게 되었고, 이로 인해 네트워크와 밀접한 애플리케이션 기능인 서비스 메쉬에 대한 관심도 높아지는 형국입니다.
서비스 메쉬의 핵심, 사이드카(Sidecar) 패턴
사이드카(Sidecar) 패턴은 모든 응용 프로그램 컨테이너에 사이드카 컨테이너를 추가하여 배포합니다. 사이드카는 서비스에 들어오거나 나가는 모든 네트워크 트래픽을 처리합니다. 가장 큰 특징은 비즈니스 로직이 포함된 실제 서비스와 사이드카가 병렬로 배치되기 때문에 서비스가 타 서비스를 직접 호출하는 것이 아니라 프록시(proxy)를 통해서 호출한다는 점입니다. 따라서 대규모의 마이크로서비스 환경이더라도 별도 작업 없이 서비스 연결뿐만 아니라 로깅, 모니터링, 보안, 트래픽 제어가 가능하다는 장점이 있습니다.
[그림 3] 사이드카 패턴3 이스티오(Istio)
쿠버네티스 기반의 서비스 메쉬, 이스티오
서비스 메쉬의 기본 아키텍처는 서비스 간 직접 호출 대신 앞에서 언급한 경량화된 사이드카 패턴의 프록시를 배치하여 통신합니다. 이런 서비스 메쉬 기술의 대표적인 구현체가 이스티오입니다. Google, IBM, Lyft 등이 참여하는 오픈소스 프로젝트로 2018년 일반에 공개된 이스티오는 Spring Cloud Netflix와 많은 유사점이 있습니다. 하지만 Java에 국한된 Spring Cloud Netflix와 달리 플랫폼 영역에서 동작하기 때문에 개발 언어와 무관하게 사용할 수 있습니다.
무엇보다 쿠버네티스와 클라우드 기반에 적합하여 이미 Red Hat OpenShift, VMware Tanzu 등 PaaS 플랫폼의 서비스 메쉬로 선택되기도 하였습니다. 컨테이너 환경에서 MSA 상의 분산 아키텍처를 수용하기 위한 노력이 더해지면서 이스티오에 대한 세간의 관심이 높아지는 추세입니다.
이스티오 구조로 Istio Control Plane안에 Pilot(Proxy config data), Mixer(Policy and telemetry hub), Citadel(Proxy TLS Authentication)이 있고 Data Plane 안에 POD가 연결되는 그림[그림 4] 이스티오 구조 부하분산과 트래픽 관리
이스티오는 파일럿과 사이드카 프록시인 Envoy를 통해 트래픽을 제어하고 관리합니다.
[그림 5] 이스티오의 트래픽 관리 믹서는 파일럿을 이용하여 서비스 버전별 트래픽 양을 분산하거나 요청 콘텐츠에 따라 특정 버전별로 트래픽을 분할하여 전송할 수 있습니다. 또한, 파일럿을 통해 서비스를 디스커버리하고 로드밸런싱합니다. 서비스 상태를 주기적으로 체크하여 비정상적인 인스턴스는 자동으로 제거합니다. 서비스 간 호출 안전성을 위해 호출 재시도 횟수를 통제하거나 응답 시간에 따른 에러 처리 등 통신 상태도 관리할 수 있습니다.보안
이스티오는 모든 서비스의 트래픽이 Envoy를 통해 이뤄지며 TLS(Transport Layer Security)를 이용하여 서비스 간 통신이 암호화됩니다. TLS 통신을 위한 인증서와 키는 시타델에서 관리합니다. 이스티오는 여러 가지 인증 방식을 제공하고 있습니다. 서비스 간 인증, 서비스와 엔드 유저(클라이언트) 간 인증이 가능하고 역할 기반 접근 제어(RBAC, Role Based Authentication Control) 기능으로 서비스 접근 권한을 통제합니다. 인증된 서비스나 엔드 유저에게는 특정 역할을 부여하고 이에 기반하여 서비스 접근이 가능하도록 합니다.
[그림 6] 이스티오의 보안 구조 모니터링이스티오는 믹서를 통해 서비스 간 호출 관계, 서비스 응답시간, 처리량 등의 네트워크 트래픽 지표를 수집하고 모니터링합니다. 모든 서비스는 호출될 때 앞단의 Envoy를 거치기 때문에 각 서비스의 호출 시 또는 주기적으로 믹서에 정보를 전달하고 이를 로깅할 수 있습니다. 믹서는 손쉽게 플러그인(Plugin)이 가능한 어댑터(Adapter) 구조로 여러 모니터링 시스템에 연결됩니다. 예를 들면 쿠버네티스에서 많이 사용하는 Heapster, Prometheus, StackDriver, Datadog 등의 모니터링 도구들과 연계하여 시각화할 수 있으며 Grafana를 통해 각 서비스의 응답시간, 처리량 등을 확인할 수 있습니다. 또한 Jaeger를 이용하면 분산 트랜잭션 구간별로 응답 시간을 모니터링할 수도 있습니다.
서비스 메쉬 적용 시 고려사항
앞서 언급했듯이 MSA의 가장 큰 화두는 마이크로서비스 간의 통신 흐름으로 볼 수 있습니다. 이 관점에서 서비스 메쉬도 적용 시 고민해야 할 부분이 존재합니다.
• 복잡성: 서비스 메쉬를 사용하면 런타임 인스턴스 수가 증가합니다.
• 사이드카 컨테이너 수 증가: 각 서비스는 서비스 메쉬의 사이드카 프록시를 통해 호출되므로 개별 프록시 수가 증가하게 됩니다. 이에 따른 부하로 서비스 운영에 문제가 발생할 가능성이 있는지에 대해 아키텍처 구조 측면에서 사전에 검토해야 합니다.
• 기술력의 미성숙: 이스티오는 빠르게 발전하고 있으나 아직은 새롭고 미성숙한 기술에 속합니다. 또한 많은 기업이 서비스 메쉬에 대한 경험이 없는 실정입니다.
4 마치며
마이크로서비스 아키텍처의 서비스 메시
이 문서에서는 서비스 메시와 작동 방식을 대략적으로 소개합니다. 여기서는 서비스 메시를 정의하고 역할 및 아키텍처에 대해 설명하며 분산 엔터프라이즈 애플리케이션 시스템에서의 중요성에 대해 기술합니다. 또한 일부 서비스 메시 속성에 대해서도 다룹니다. 이 가이드는 아키텍처에서 서비스 메시 사용을 검토, 평가, 계획하는 시스템 설계자 및 플랫폼 개발자를 대상으로 합니다.
마이크로서비스 아키텍처의 새로운 문제는 무엇인가요?
마이크로서비스, 컨테이너, Kubernetes를 채택하는 기업이 점점 증가하고 있습니다. 현대화의 필요성과 개발자 생산성, 애플리케이션 민첩성 및 확장성을 높여야 하는 필요성이 이러한 채택 증가를 주도합니다. 또한 많은 조직에서는 새로운 애플리케이션 및 서비스와 기존 애플리케이션 및 서비스를 위해 클라우드 컴퓨팅을 활용하고 분산형 마이크로서비스 아키텍처를 채택하고 있습니다. 모놀리식 애플리케이션(여러 함수를 제공하는 단일 애플리케이션)은 빌드하기가 복잡하고 출시 속도가 느립니다. 마이크로서비스의 아키텍처는 개별 서비스 생성을 간소화하는 데 도움이 되지만 다음 섹션에서와 같이 복잡성이 추가되거나 증가됩니다.
보안
모놀리식 애플리케이션에서 모든 함수-함수 호출은 모놀리식 내부에서 안전합니다. 마이크로서비스의 인증, 승인, 암호화, 통신 방법을 고려합니다. 또한 서비스 간 통신을 trace하는 데 필요한 추가 감사 도구도 고려합니다.
네트워크 복원력
분산 아키텍처에서 여러 서비스가 응답을 생성하기 위해 통신할 때 지연 시간 및 전반적인 응답 시간이 미치는 영향을 고려합니다. 또한 내결함성도 고려합니다. 분산 아키텍처는 한 다운스트림 서비스의 서비스가 다른 서비스에서 계단식 장애를 일으키지 않도록 보장하기 위해 어떻게 하나요?
커뮤니케이션 정책
분산 아키텍처에서 일부 서비스는 다른 서비스의 병목 현상 또는 종속 항목이 될 수 있습니다. 모든 서비스의 할당량 및 비율 제한을 관리하는 네트워크 정책은 너무 많은 호출을 하는 악성 서비스가 호출되는 서비스에 과부하가 걸리지 않도록 보장할 수 있습니다. 서비스를 효과적으로 제어하려면 호출할 수 있는 서비스와 호출할 수 없는 서비스를 지정하는 정책을 만듭니다.
관측 가능성
모놀리식 애플리케이션과 비교해 관측 가능성은 마이크로서비스 기반 아키텍처에 더 중요합니다. 모놀리식 애플리케이션에서는 로그 파일을 통해 문제의 원인을 파악할 수 있습니다. 마이크로서비스 아키텍처에서 여러 서비스가 단일 요청에 분산될 수 있습니다. 지연 시간, 오류, 장애가 아키텍처 내의 모든 서비스에서 발생할 수 있습니다. 개발자는 문제를 조사하고 위치를 파악하기 위해 로깅, 네트워크 측정항목, 분산 추적 및 토폴로지가 필요합니다.
기업에서 이러한 문제가 더욱 강조되는 이유는 무엇인가요?
단일 또는 여러 애플리케이션이 마이크로서비스로 분할되면 보안, 네트워크 복원력, 정책, 관측 가능성을 보다 쉽게 해결할 수 있습니다. 그러나 기업에는 수십, 수백 또는 수천 개의 마이크로서비스가 있을 수 있습니다. 따라서 모든 솔루션을 확장해야 합니다. 제대로 되지 않으면 애플리케이션의 복잡성과 마이크로서비스의 양이 두 서비스 간에 더 큰 차이를 만듭니다.
서비스 메시란 무엇인가요?
서비스 메시는 개별 서비스 간에 관리형의 관측 가능한 보안 통신을 가능하게 해주는 인프라 레이어 위에 있는 플랫폼 레이어입니다. 이 플랫폼 레이어를 통해 기업 또는 개인은 선택한 인프라에서 여러 마이크로서비스로 구성된 강력한 엔터프라이즈 애플리케이션을 만들 수 있습니다. 서비스 메시는 모니터링, 네트워킹, 보안 등 서비스 실행과 관련된 일반적인 우려 사항을 모두 해결하기 위해 일관된 도구를 사용합니다. 즉, 서비스 개발자와 운영자는 서비스와 관련된 모든 문제를 해결하기 위한 조치를 구현하는 대신 사용자를 위해 애플리케이션을 만들고 관리하는 데 집중할 수 있습니다.
서비스 메시는 애플리케이션에 투명합니다. 서비스 메시는 프록시를 통해 모든 트래픽을 모니터링합니다. 프록시는 사이드카 패턴에 의해 마이크로서비스에 배포됩니다. 이 패턴은 애플리케이션 또는 비즈니스 로직을 네트워크 기능에서 분리하므로 개발자는 비즈니스에 필요한 기능에 집중할 수 있습니다. 또한 서비스 메시를 사용하면 운영팀과 개발팀이 작업을 서로 분리할 수 있습니다.
기능
서비스 메시는 서비스 간의 통신 관계를 관리하고 제어할 수 있는 특정 기능을 제공합니다. 이 기능 중 일부는 다음 하위 섹션에서 설명합니다.
멀티테넌시
멀티테넌시 배포 패턴은 테넌트가 이러한 그룹을 독점적으로 사용할 때 마이크로서비스 그룹을 서로 격리합니다. 멀티테넌시의 일반적인 사용 사례는 조직 내의 서로 다른 두 부서 간에 서비스를 격리하거나 전체 조직을 완전히 격리하는 것입니다. 각 테넌트에 자체 전용 서비스가 있어야 합니다. 이러한 서비스는 다른 테넌트의 서비스에 전혀 액세스할 수 없거나 승인될 때만 다른 테넌트의 서비스에 액세스할 수 있습니다.
가장 간단한 형태의 멀티테넌시는 단일 테넌트 전용 인프라를 사용하는 것입니다. 각 테넌트에는 인프라를 공유하지 않고도 자체 네트워크, 컴퓨팅, 스토리지, 추가 구성요소(예: Kubernetes 및 마이크로서비스)가 있습니다. 이러한 형태의 멀티테넌시를 사용할 수 있지만 많은 상황에서 인프라 사용은 비효율적입니다. 테넌트 간에 인프라를 공유하고 서비스 메시 구성 및 정책을 사용하여 격리하는 것이 더 효율적입니다.
서비스 메시 멀티테넌시는 네임스페이스 테넌시와 클러스터 테넌시라는 두 가지 테넌트 형태 중 하나를 기반으로 합니다.
네임스페이스 테넌시
네임스페이스 테넌시 형태는 각 테넌트에 클러스터 내의 전용 네임스페이스를 제공합니다. 각 클러스터는 여러 테넌트를 지원할 수 있으므로 네임스페이스 테넌시는 인프라 공유를 최대화합니다.
서로 다른 테넌트의 서비스 간에 통신을 제한하려면 네임스페이스 외부에서 서비스의 하위 집합만 노출시키고(사이드카 구성 사용) 서비스 메시 승인 정책을 사용하여 노출된 서비스를 제어합니다. 사용 가능한 서비스 집합에 대해 각 네임스페이스를 개별적으로 구성합니다. 각 서비스에 대한 액세스가 승인되므로 허용된 테넌트만 서로의 서비스에 액세스할 수 있습니다. 멀티 메시 페더레이션은 이 사용 사례를 지원하지만 멀티 메시 페더레이션을 만들 필요는 없습니다.
네임스페이스는 하나 이상의 클러스터에 분산될 수 있습니다. 테넌시는 네임스페이스로만 정의되며 네임스페이스를 지원하는 클러스터와 별개입니다. 실제로 두 개의 서로 다른 서비스 메시에는 동일한 네임스페이스가 있을 수 있습니다. 이 개념의 예시로는 스테이징 테넌트를 나타내는 서비스 메시와 프로덕션 테넌트를 나타내는 서비스 메시가 있습니다. 둘 다 customer 네임스페이스를 가질 수 있습니다. 이 명명 스키마는 혼동을 주므로 이상적인 방법이 아닙니다.
클러스터 테넌시
클러스터 테넌시 형태는 모든 네임스페이스를 포함하여 전체 클러스터를 테넌트 전용으로 지정합니다. 테넌트에는 클러스터가 두 개 이상 있을 수 있습니다. 각 클러스터에는 자체 메시가 있습니다.
클러스터 테넌시는 클러스터 수준에서의 분리를 의미입니다. 따라서 테넌트 간의 리소스 공유 측면에서 보면 진정한 멀티 테넌트가 아닙니다. 하지만 Istio 테넌시 모델 문서에 언급되었으므로 여기에 포함되어 있습니다.
보안
보안은 아키텍처 유형에 상관없이 중요합니다. 마이크로서비스에는 다른 아키텍처에 비해 추가적인 보안 요구사항이 있습니다. 예를 들어 마이크로서비스 간 인증, 승인, 트래픽 흐름 제어가 있습니다. 서비스 메시 내의 보안 기능으로 이러한 요구사항을 해결할 수 있습니다.
기존 네트워크 보안은 무단 액세스를 방지하기 위해 강력한 경계를 기반으로 합니다. 사용자가 네트워크 경계 내에 있으면 신뢰할 수 있는 사용자로 간주되며 ID를 확인하지 않고 통신할 수 있습니다.
2010년 Forrester에서는 제로 트러스트의 개념을 대중화했습니다. 제로 트러스트 환경에서는 더 이상 특정 보안 경계 내에 있는 모든 것이 신뢰할 수 있다고 가정하지 않습니다. 대신 네트워크가 손상되어 인식할 수 없다고 가정합니다. 모든 것이 확인되었습니다. 이 경우 신뢰할 수 있는 유일한 경계는 서비스 자체 내에 있습니다. 이 외에는 동일한 네트워크 내에 있더라고 암시적으로 신뢰할 수 없습니다.
서비스 메시 이전에는 제로 트러스트를 달성하기가 어려웠습니다. 서비스 인증 및 승인은 물론 서비스 및 워크로드의 인증서를 관리할 수 있는 도구가 필요했습니다. 서비스 메시를 구현한 후에는 제로 트러스트를 달성하기가 덜 복잡합니다. 서비스 메시는 각 서비스에 대한 인증서를 제공하는 중앙 인증 기관을 통해 이러한 인증 및 승인 ID를 제공합니다.
서비스 메시는 이 ID를 사용하여 메시 내부와 외부에서 서비스를 인증 및 승인합니다. 인증 기관과 인증서 가용성을 통해 개발자는 서로 통신할 수 있는 서비스를 세밀하게 제어하는 승인 정책을 구현할 수 있습니다. 또한 특정 서비스에 허용되는 경로 및 HTTP 동사를 세부적으로 지정할 수도 있습니다.
서비스 메시는 플랫폼 개발자에게 상호 TLS와 같은 정책을 시행하여 서비스 간에 암호화된 트래픽을 보장하고 중간자 공격을 방지할 수 있는 기능을 제공합니다. 서비스 메시가 배포된 후에는 모든 요청과 응답의 암호화 및 복호화를 담당합니다.
관측 가능성 및 분석
관측 가능성은 시스템에서 여러 신호를 측정하고 수집 및 분석하는 일련의 활동입니다. 마이크로서비스 아키텍처 이전에는 시스템 관찰이 덜 복잡했습니다. 단일 서비스에 요청이 수신되고 데이터가 수집되었습니다.
분산 마이크로서비스 아키텍처에서는 전체 응답을 수신하려면 여러 서비스에서 응답 데이터를 수집해야 합니다. 앞에서 설명한 것처럼 메시의 서비스와 주고받는 모든 트래픽은 프록시를 통해 전달됩니다. 이 프록시를 통해 운영자는 서비스 상호작용을 보다 효과적으로 파악할 수 있습니다. 각 프록시는 요청의 해당 부분을 보고하여 모놀리식 애플리케이션에 있는 것과 동일한 포괄적인 뷰를 생성합니다. 일반적으로 메시는 관측 가능성을 제공하기 위해 측정항목, 분산 추적, 액세스 로그와 같은 유형의 원격 분석을 생성합니다.
측정항목
메시는 메시로 들어오거나 메시 내에 있거나 메시를 나가는 모든 트래픽에 대한 측정항목을 생성합니다. 이러한 측정항목의 예시로는 오류율, 초당 요청 수, 요청 응답 시간이 있습니다. 이러한 측정항목을 통해 개발자는 서비스 동작을 종합적으로 파악할 수 있습니다.
메시는 Istio 문서의 설명에 따라 다음 측정항목을 생성할 수 있습니다.
프록시 수준 측정항목 : 사이드카 프록시는 모든 인바운드 및 아웃바운드 프록시 트래픽에 대한 대규모 측정항목 집합을 생성합니다. 이러한 측정항목에는 구성 정보 및 상태 정보와 같은 프록시의 관리 기능에 대한 자세한 통계가 포함됩니다.
: 사이드카 프록시는 모든 인바운드 및 아웃바운드 프록시 트래픽에 대한 대규모 측정항목 집합을 생성합니다. 이러한 측정항목에는 구성 정보 및 상태 정보와 같은 프록시의 관리 기능에 대한 자세한 통계가 포함됩니다. 서비스 수준 측정항목 : 서비스 수준 측정항목은 지연 시간, 트래픽, 오류, 포화도라는 4가지 골든 신호를 포함합니다.
: 서비스 수준 측정항목은 지연 시간, 트래픽, 오류, 포화도라는 4가지 골든 신호를 포함합니다. 제어 영역 측정항목: 제어 영역 측정항목은 메시 내 서비스가 아닌 서비스 메시 제어 영역을 모니터링합니다.
분산 추적
서비스 메시는 각 서비스에 분산 trace 범위를 생성할 수 있습니다. 이러한 추적을 사용하여 여러 서비스와 프록시에서 메시를 통해 단일 요청을 따릅니다.
액세스 로그
서비스 메시는 서비스 수준에서 감사할 수 있는 호출 소스 및 대상을 포함하여 모든 서비스 호출이 포함된 전체 액세스 로그를 생성할 수 있습니다.
규정 준수
규정 준수란 시스템을 제어하는 데 사용되는 정책 및 규칙을 시행하는 것을 의미합니다. 이러한 정책 및 규칙은 자체적으로 적용되거나 업계 또는 정부 규정에 의해 적용됩니다.
한 가지 시행 방법은 워크로드를 모니터링하고 감사하여 규정 준수를 손상시키는 정책 또는 규칙 위반이 있는지 확인하는 것입니다. 또 다른 시행 방법은 정책 및 규칙을 공식적으로 구현하여 적용되도록 보장하는 것입니다. 실제로 두 방법 모두 실시간 모니터링 및 감사 외에도 정책 및 규칙을 공식적으로 구현합니다.
다음 목록은 일반적인 규정 준수 개요를 제공합니다. 업계 또는 워크로드에 따라 추가 정책 및 규칙이 적용될 수 있습니다.
모니터링 및 감사 : 모니터링 및 감사 워크로드는 시스템 내에서 정책이나 규칙 위반이 있는지 확인하는 데 도움이 됩니다.
: 모니터링 및 감사 워크로드는 시스템 내에서 정책이나 규칙 위반이 있는지 확인하는 데 도움이 됩니다. 보안 : 마이크로서비스 아키텍처 내의 모든 시스템은 안전하고 인증되어야 하며 모든 엔드포인트에 대한 승인 액세스를 제공할 수 있어야 합니다.
: 마이크로서비스 아키텍처 내의 모든 시스템은 안전하고 인증되어야 하며 모든 엔드포인트에 대한 승인 액세스를 제공할 수 있어야 합니다. 중복성 : 단일 장애점을 방지하려면 두 곳 이상의 위치에 각 마이크로서비스를 배포해야 합니다. Istio를 사용하면 마이크로서비스가 두 번 이상 배포되었는지 여부를 확인할 수 있습니다. 중복성은 마이크로서비스를 두 번 이상 배포해야 하며 동일한 영역에 있을 수 있습니다. 아키텍처가 동일한 영역에 배포되면 고가용성을 제공하지 않습니다.
: 단일 장애점을 방지하려면 두 곳 이상의 위치에 각 마이크로서비스를 배포해야 합니다. Istio를 사용하면 마이크로서비스가 두 번 이상 배포되었는지 여부를 확인할 수 있습니다. 중복성은 마이크로서비스를 두 번 이상 배포해야 하며 동일한 영역에 있을 수 있습니다. 아키텍처가 동일한 영역에 배포되면 고가용성을 제공하지 않습니다. 고가용성 : 고가용성 배포는 영역 중단 중에도 계속 작동합니다. 즉, 영역은 단일 장애점이 되지 않습니다. 연속성을 보장하려면 각 서비스와 각 구성요소를 최소한 두 개 이상의 영역에 배포해야 합니다. 영역 중단에 대응할 수 있는 마이크로서비스 기능 외에도 서비스 메시 구성을 사용하여 최소 둘 이상의 영역에서 완전한 중복성을 자동으로 분석할 수 있습니다.
: 고가용성 배포는 영역 중단 중에도 계속 작동합니다. 즉, 영역은 단일 장애점이 되지 않습니다. 연속성을 보장하려면 각 서비스와 각 구성요소를 최소한 두 개 이상의 영역에 배포해야 합니다. 영역 중단에 대응할 수 있는 마이크로서비스 기능 외에도 서비스 메시 구성을 사용하여 최소 둘 이상의 영역에서 완전한 중복성을 자동으로 분석할 수 있습니다. 재해 복구 : 재해 복구는 고가용성과 유사합니다. 차이점이라만 재해 복구를 위해 배포된 시스템은 단일 리전 중단 중에도 계속 작동한다는 점입니다. 가용성이 높은 시스템과 마찬가지로 서비스 메시 구성을 자동으로 분석하여 적절하게 배포할 수 있습니다.
: 재해 복구는 고가용성과 유사합니다. 차이점이라만 재해 복구를 위해 배포된 시스템은 단일 리전 중단 중에도 계속 작동한다는 점입니다. 가용성이 높은 시스템과 마찬가지로 서비스 메시 구성을 자동으로 분석하여 적절하게 배포할 수 있습니다. 파티션 나누기(멀티테넌시) : 마이크로서비스를 사용하여 여러 테넌트를 동시에 지원하는 멀티 테넌트 시스템을 구현할 수 있습니다. 네임스페이스 파티션 나누기 및 클러스터 파티션 나누기에 대한 자세한 내용은 이 문서에서 멀티테넌시를 참조하세요. 서비스 메시 구성을 분석하면 파티션이 올바르게 나뉘어졌는지 확인할 수 있습니다.
: 마이크로서비스를 사용하여 여러 테넌트를 동시에 지원하는 멀티 테넌트 시스템을 구현할 수 있습니다. 네임스페이스 파티션 나누기 및 클러스터 파티션 나누기에 대한 자세한 내용은 이 문서에서 멀티테넌시를 참조하세요. 서비스 메시 구성을 분석하면 파티션이 올바르게 나뉘어졌는지 확인할 수 있습니다. 런타임 속성: 정책 및 규칙은 정적 배포 또는 구성에 중점을 두거나 런타임 정책일 수 있습니다. 예를 들어 런타임 정책은 지연 시간 상한을 적용할 수 있습니다. 이 경우 시스템은 정의된 지연 시간보다 오래 걸리는 호출을 중단합니다. 정의된 정책과 관계없이 런타임 시 시행되어야 합니다. 자세한 내용은 이 문서의 뒷부분에 나오는 복원력 섹션을 참조하세요.
위 목록은 애플리케이션 또는 기업에서 준수하고 시행해야 하는 규정 준수 정책 및 규칙의 하위 집합입니다.
서비스 메시로 시행할 수 없는 몇 가지 정책 및 규칙이 있습니다. 예를 들어 데이터 상주 요구사항은 서비스 메시의 범위를 벗어납니다. 사용자 데이터가 사용자가 지정한 집 위치와 같은 국가에 있어야 하는 경우 서비스 메시는 이 요구사항을 구성하거나 적용하기에 충분하지 않습니다. 또 다른 예시는 특정 연도의 모든 데이터와 기록을 저장하는 것입니다. 서비스 메시는 해당 정책을 구현하고 감독할 수 없습니다.
트래픽 제어
서비스 메시는 서비스 간 트래픽, 메시 내부로의 트래픽, 외부 서비스로의 트래픽의 흐름을 제어합니다. 커스텀 리소스를 통해 사용자는 이 트래픽을 관리할 수 있습니다. 이러한 리소스는 선택한 서비스 메시에 따라 다릅니다. 이를 통해 사용자는 카나리아 출시를 만들고, 블루/그린 출시를 만들고, 서비스 관련 특정 경로를 세부적으로 제어할 수 있습니다.
서비스 메시는 메시 내 모든 서비스의 서비스 레지스트리를 이름 및 해당 엔드포인트별로 유지합니다. 이는 트래픽 흐름을 관리하기 위해 레지스트리를 유지합니다(예: Kubernetes Pod IP 주소). 이 서비스 레지스트리를 사용하고 프록시를 서비스와 나란히 실행하면 메시는 트래픽을 적절한 엔드포인트로 전송할 수 있습니다.
부하 분산
대부분의 마이크로서비스 아키텍처에는 실행 중인 각 서비스의 인스턴스가 여러 개 있습니다(예: Kubernetes의 Pod). 트래픽은 인스턴스 간에 부하 분산됩니다. 서비스 메시는 이러한 서비스의 부하 분산 동작을 제어할 수 있습니다. 일반적으로 기본 동작은 서비스의 인스턴스 전반에서 라운드 로빈입니다. 그러나 특정 트래픽 비율에 따라 무작위로 가중치가 부여되거나 트래픽이 가장 적은 서비스로 전송될 수 있습니다.
소스(발신자) 제한사항
일반적으로 클라이언트에서 호출을 수신하는 마이크로서비스에 중점을 둡니다. 부하 분산, 가상 서비스로의 추상화, 재시도 호출을 예시로 들 수 있습니다. 통신하는 마이크로서비스에만 호출이 필요하도록 마이크로서비스의 발신자를 제한합니다. 마이크로서비스는 실수로 인한 통신이나 잘못된 통신을 피해야 합니다. 가능하지 않는 경우 식별해야 합니다.
예를 들어 은행 애플리케이션에는 당좌 예금 계좌에 입금하거나 인출하는 debitCredit 서비스가 있습니다. 해당 서비스는 송금 분야의 서비스에만 제공됩니다. 목표는 송금 이외의 서비스에 의한 debitCredit 호출을 방지하는 것입니다.
올바른 서비스 메시 통신을 사용 설정하는 몇 가지 방법이 있습니다. 한 가지 방법은 식별 서비스 이름으로 발신자를 식별하고 개별적으로 나열하여 서비스에 허용된 발신자를 지정하는 것입니다. 또 다른 방법은 서비스 이름 대신 라벨을 식별자로 사용하는 것입니다. 앞의 은행 예시에서는 송금 서비스 그룹에 속하는 모든 서비스에 fundsTransfer 라벨을 지정할 수 있습니다. 서비스 메시는 라벨을 사용하여 서비스를 호출할 수 있는 발신자를 지정합니다.
복원력
서비스 메시는 Kubernetes에 배포된 마이크로서비스의 호출 복원력을 높일 수 있습니다. 복원력 측정에는 다음과 같은 두 가지 등급이 있습니다.
마이크로서비스 호출의 신뢰성 향상
의도적으로 호출 장애 생성
마이크로서비스 호출의 신뢰성 향상
발신자로부터 장애가 추상화되면 마이크로서비스 호출의 신뢰성이 증가합니다. 장애가 발생하면 서비스 메시는 발신자에게 장애를 반환하지 않고 다음 전략을 사용하여 문제를 투명하게 해결할 수 있습니다.
의도적으로 호출 장애 생성
서비스 메시는 제한 시간 또는 재시도를 지정하여 복원력을 제공합니다. 애플리케이션은 복원력도 구현할 수 있습니다. 예를 들어 애플리케이션이 입력을 처리하고 결과를 얻기 위해 세 개의 마이크로서비스를 순차적으로 호출해야 할 수 있습니다. 이러한 호출 중 하나가 실패하면 애플리케이션은 시퀀스를 다시 시도하여 호출이 두 번째 시도에서 작동하는지 확인할 수 있습니다.
애플리케이션이 제대로 작동하는지 테스트하려면 런타임 시 서비스 메시를 통해 의도적인 호출 결함을 삽입할 수 있습니다. 결함의 한 가지 유형은 지연입니다. 호출은 의도적으로 지연되며 지연은 애플리케이션이 지연 시간 변동을 처리하는 기능을 테스트합니다. 또 다른 유형의 결함은 중단입니다. 중단은 호출을 방해합니다. 애플리케이션은 호출 장애를 관찰한 후 장애를 처리할 방법을 결정합니다.
이러한 조치는 런타임 시 프로덕션 시스템의 실제 호출에 적용됩니다.
아키텍처
기본 수준에서 서비스 메시는 서비스의 사이드카로 실행되는 서비스와 프록시로 구성됩니다. 여기에는 데이터 영역 및 제어 영역을 포함하여 적절한 분산 시스템으로 프록시와 서비스를 결합하도록 이러한 프록시를 구성하는 권한도 포함됩니다. 서비스와 주고 받는 모든 요청은 메시 내 두 개의 프록시, 즉 호출 서비스용 프록시와 수신 서비스용 프록시로 전달됩니다.
이 아키텍처는 서비스 및 서비스 개발자로부터 비즈니스 로직과 관련이 없는 모든 기능을 추상화합니다. 데이터 영역은 프록시와 서비스를 관리합니다. 제어 영역은 데이터 영역에 정책 및 구성을 제공하는 권한입니다.
서비스 메시 제어 영역을 사용하면 프록시에서 다음 기능을 수행할 수 있습니다.
서비스 검색
서비스 라우팅
부하 분산
인증 및 승인
관측 가능성
제어 영역은 다음을 담당합니다.
서비스 레지스트리 : 제어 영역에는 프록시에 제공할 수 있는 서비스와 엔드포인트 목록이 있어야 합니다. 제어 영역은 Kubernetes와 같은 기본 인프라 예약 시스템을 쿼리하여 사용 가능한 모든 서비스 목록을 가져와서 이 레지스트리를 컴파일합니다.
: 제어 영역에는 프록시에 제공할 수 있는 서비스와 엔드포인트 목록이 있어야 합니다. 제어 영역은 Kubernetes와 같은 기본 인프라 예약 시스템을 쿼리하여 사용 가능한 모든 서비스 목록을 가져와서 이 레지스트리를 컴파일합니다. 사이드카 프록시 구성: 사이드카 프록시 구성에는 프록시가 기능을 제대로 수행하기 위해 알아야 하는 정책 및 메시 전체 구성이 포함됩니다.
제어 영역과 상호작용하는 서비스의 다이어그램은 사이드카로 실행되는 프록시를 참조하세요.
설계 고려사항
서비스 메시가 마이크로서비스 시스템 설계 및 시스템 구현의 여러 측면에 대한 완벽한 솔루션처럼 보일 수도 있지만 주의해야 할 점이 있습니다. 다음 섹션에서 이러한 주의사항에 대해 설명합니다.
처리 오버헤드
한 마이크로서비스에서 다른 마이크로서비스로의 호출은 프록시를 통해 라우팅되고 로드 밸런서를 통해서도 라우팅 가능합니다. 또한 호출은 암호화를 통해 추적되고 수정도 가능합니다. 암호화는 개별 수준에서 상당한 오버헤드를 유발하지 않지만 총체적으로 지연 시간과 리소스 요구사항을 추가합니다. 지정된 사용 사례의 오버헤드가 상당한지 확인하려면 성능 및 확장성 측정으로 분석합니다.
구성 설계 복잡성
서비스 메시 구성을 만드는 것은 요구사항을 올바르게 구현하도록 하기 위한 설계 활동입니다. 일반적으로 서비스 메시의 구성 기능에 대한 지식이 필요합니다. 특정 애플리케이션에 올바른 구성을 만드는 방법에 대해서도 알아야 합니다. 서비스 메시가 구성되면 해당 구성에는 시스템 요구사항이 반영되어야 합니다.
테스트 구성 유효성
서비스 메시 구성이 배치된 후 Istioctl Analyze와 같은 도구를 사용하여 구성을 확인합니다. 애플리케이션 구현이 진행됨에 따라 구성이 변경될 수 있으므로 CI/CD 프로세스의 일부로 반복적으로 확인해야 합니다. 구성을 확인한 후에는 서비스 메시 구성을 테스트하여 구성에 표현된 동작의 인텐트가 예상되는 마이크로서비스 호출 동작과 일치하는지 확인합니다. 자세한 내용은 테스트 섹션을 참조하세요.
서비스 메시 구성 확인
서비스 메시 제어 영역이 존재한다고 해서 시스템 보안 및 신뢰성이 자동으로 보장되는 것은 아닙니다. 서비스 메시를 구성한 후 해당 구성을 올바르게 테스트하고 확인해야 합니다. 이렇게 하면 감지되지 않은 안전하지 않은 호출과 같은 문제를 방지할 수 있습니다.
마이크로서비스에 대한 변경사항(예: 추가 또는 업데이트)은 메시의 통신 동작을 변경할 수 있지만 구성에서 변경으로 간주할 정도는 아닙니다. 서비스 메시 구성의 모든 변경사항이 제대로 적용되도록 하려면 모든 변경사항에 대해 서비스 메시 구성 검토를 수행합니다.
서비스 메시는 기업 환경에서 구현이 필요한 모든 보안 측면을 다루지 않습니다. 서비스 메시는 서비스 통신과 관련된 모든 측면을 처리합니다. 방화벽 및 네트워크 보안과 같은 인프라 보안 요구사항은 별도로 처리해야 합니다.
서비스 메시는 시간이 지남에 따라 변경될 수 있는 시스템으로 구현됩니다. 예를 들어 성능 개선, 확장성 개선, 추가 기능, 버그 수정을 해결하기 위해 변경사항을 구현할 수 있습니다. 서비스 메시의 제어 영역을 업데이트할 때는 업데이트된 시스템에 대해 기존 구성을 회귀 테스트하는 것이 중요합니다. 회귀 테스트는 서비스 메시의 새 시스템 버전이 서비스 메시 동작을 부정적으로 변경하지 않는지 확인해야 합니다.
테스트
테스트를 통해 서비스 메시의 적절한 설정과 작동을 보장합니다. 포괄적인 테스트를 수행하려면 다음 검사를 포함하세요.
일반 서비스 메시 구성 확인
마이크로서비스 요구사항에 대한 서비스 메시 구성 확인
서비스 메시 제어 계획 배포 버전 확인
일반 서비스 메시 구성 확인
Istioctl Analyze 도구를 사용하여 일반 서비스 메시 구성 검사를 수행합니다. 구성 매개변수를 사용하여 동작을 미세 조정합니다. 개발자는 Istio GitHub 저장소에서 현재 분석가 집합을 찾을 수 있습니다. Istioctl Analyzer가 문제를 감지하면 IST0114: PolicySpecifiesPortNameThatDoesntExist 와 같은 오류 메시지를 반환합니다.
마이크로서비스 요구사항에 대한 서비스 메시 구성 확인
서비스 메시는 마이크로서비스 통신을 관리하고 제어합니다. 테스트는 공식적인 서비스 메시 구성이 마이크로서비스의 요구 사항을 구현하는지 확인하는 데 도움이 됩니다. 다음은 서비스 메시 기능의 몇 가지 예시입니다.
통신: 통신할 수 있는 마이크로서비스와 통신할 수 없는 마이크로서비스는 무엇인가요?
보안: 통신이 예상대로 구성되어 있나요? 예를 들어 HTTP 또는 HTTPS가 사용되나요?
동적 동작: 하나 이상의 마이크로서비스가 혼잡해지지 않도록 서비스 메시가 통신을 제한하나요?
서비스 메시는 선언적 구성 파일을 통해 구성됩니다. 이러한 파일은 코드 저장소의 일부입니다. 마이크로서비스의 구현 및 로직에 고유한 특정 마이크로서비스 사용 사례 요구사항을 해결하는 사양이 포함되어 있습니다. 예를 들어 사양에는 통신할 수 있는 마이크로서비스와 통신할 수 없는 마이크로서비스가 명시되어 있습니다. 사양에는 가능한 처리량과 제한해야 하는 시기도 나와 있습니다.
소프트웨어 엔지니어링 관점에서 서비스 메시를 일반 마이크로서비스 구현 코드와 같이 처리합니다. 이에 대해 양성 테스트와 음성 테스트를 모두 수행합니다. 양성 테스트에서는 기능 또는 동작이 존재한다고 주장합니다. 음성 테스트에서는 특정 기능이 없다고 주장합니다. 서비스 메시 구성의 컨텍스트에서 두 테스트 모두 가능합니다. 두 테스트 모두 서비스 메시 구성이 마이크로서비스 요구사항에 해당하는지 여부를 확인할 수 있습니다. 테스트는 특정 사용 사례에 따라 단위 테스트 및 통합 테스트일 수 있습니다.
통신을 테스트하려면 양성 테스트 사례와 음성 테스트 사례를 모두 사용합니다. 예를 들어 마이크로서비스 MS1은 마이크로서비스 MS2를 호출하지만 그 반대로는 호출하지 않습니다. MS1이 MS2를 호출할 수 있음을 확인하는 테스트를 설정하고 MS2가 MS1에 도달할 수 없음을 확인하는 다른 테스트를 설정합니다. 테스트를 빌드하는 한 가지 방법은 두 개의 가상 마이크로서비스를 구현하는 것입니다. 둘 다 서로 호출할 수 있도록 MS1과 MS2에 대해 각각 하나씩 만듭니다. 선택적으로 MS1과 MS2가 서비스 메시 없이 서로 호출할 수 있는 테스트를 설정합니다. 서비스 메시가 있는 경우 MS1에서 MS2로의 호출은 작동해야 하며 MS2에서 MS1로의 호출은 실패해야 합니다.
복원력을 고려하는 추가 테스트를 정의하는 것이 좋습니다. 예를 들어 결함 삽입으로 인해 호출이 지연되는 경우 클라이언트가 지연된 호출을 처리할 수 있는지 확인해야 합니다.
마이크로서비스의 여러 측면은 보안, 신뢰성, 확장성과 같은 서비스 메시로 처리됩니다. 전체 시스템은 적절한 구성을 사용하므로 전체 범위가 높은 테스트 사례를 구축하는 것이 중요합니다. 보안 등의 일부 영역에서는 테스트 범위가 100%에 도달할 수 있습니다.
제어 영역 배포 버전 확인
두 가지 버전의 서비스 메시 제어 영역을 동시에 설치하고 실행할 수 있습니다. 테스트를 통해 현재 버전의 제어 영역과 최신 버전의 제어 영역이 동일한 방식으로 동작하는지 확인해야 합니다. 또는 테스트를 통해 최신 버전의 동작이 개선되는지 확인해야 합니다. 제어 흐름 영역 동작을 확인하는 자동 테스트를 정의하면 수동 테스트가 필요하지 않습니다. 예를 들어 모니터링 도구와 로그 파일 검사를 통해 동작을 관찰합니다. 제어 흐름 영역 동작을 수동으로 관찰한다는 것은 한 명 이상의 사용자가 관찰 가능한 항목을 비교한다는 것을 의미합니다. 그런 다음 현재 버전과 새 버전의 동작이 동일한지 평가합니다.
전체 서비스 메시 동작을 관찰하는 것 외에도 특정 단위 테스트 및 통합 테스트는 동일한 방식으로 동작해야 합니다. 그렇지 않으면 평가할 서비스 성능 저하가 있는 것입니다. 이 평가는 일반 CI/CD 및 테스트 관행의 일부입니다. 하지만 이 프로세스는 애플리케이션 구성 변경사항 및 플랫폼 변경사항에 중요합니다.
새 제어 영역 버전이 모든 클러스터에 배포된 경우에만 테스트합니다. 단위 테스트 및 통합 테스트는 CI/CD 파이프라인의 일부로 지속적으로 실행하는 것이 좋습니다.
사용 사례
서비스 메시에 제공하는 특정 사용 사례 및 아키텍처가 있습니다. 다음 순서도는 서비스 메시 배포가 실행 가능한 솔루션인지 여부를 결정하는 결정 트리를 나타냅니다.
앞의 결정 트리에 표시된 것처럼 여러 클라우드 제공업체든 온프레미스 데이터 센터든 여러 클라우드에서 서비스가 실행 중인 경우 서비스 메시를 사용하는 것이 좋습니다. 서비스가 단일 클라우드에서 실행 중인 경우 서비스 메시의 사용 여부를 결정할 때 다음과 같은 일부 요소를 고려하세요.
여러 클러스터에서 실행 : 서비스 메시를 사용하면 애플리케이션 개발자가 서비스의 모든 통신 오버헤드를 추상화하고 메시로 오프로드할 수 있습니다. 서비스가 여러 클러스터에서 실행 중인 경우 서비스 메시를 고려합니다.
: 서비스 메시를 사용하면 애플리케이션 개발자가 서비스의 모든 통신 오버헤드를 추상화하고 메시로 오프로드할 수 있습니다. 서비스가 여러 클러스터에서 실행 중인 경우 서비스 메시를 고려합니다. 서비스 환경 및 요구사항 : 서비스 메시를 보장하는 최소 서비스 수에 대한 마법수가 없습니다. 네트워크 기능을 위한 조직 요구사항을 고려합니다. 관측 가능성, 서비스 수준 정책 관리, 트래픽 제어를 예시로 들 수 있습니다. 또한 팀에서 이러한 요구사항을 충족하기 위해 손쉽게 라이브러리를 계측하고 서비스에 추가할 수 있는지도 고려합니다. 계측하기 어려운 서비스가 5개 있다면 서비스 메시를 고려해야 할 이유가 있습니다. 반대로 조직 요구사항에 맞게 이미 계측된 서비스가 100개 있는 경우 서비스 메시를 구현하지 않는 이유가 됩니다.
: 서비스 메시를 보장하는 최소 서비스 수에 대한 마법수가 없습니다. 네트워크 기능을 위한 조직 요구사항을 고려합니다. 관측 가능성, 서비스 수준 정책 관리, 트래픽 제어를 예시로 들 수 있습니다. 또한 팀에서 이러한 요구사항을 충족하기 위해 손쉽게 라이브러리를 계측하고 서비스에 추가할 수 있는지도 고려합니다. 계측하기 어려운 서비스가 5개 있다면 서비스 메시를 고려해야 할 이유가 있습니다. 반대로 조직 요구사항에 맞게 이미 계측된 서비스가 100개 있는 경우 서비스 메시를 구현하지 않는 이유가 됩니다. 정책 및 제한사항 : 서비스 메시는 전체 메시 또는 세분화된 서비스에 정책을 적용할 수 있는 기능을 개선합니다. 따라서 정책이 많거나 최소한의 추가 작업으로 세분화된 제어가 필요한 경우 서비스 메시를 고려합니다.
: 서비스 메시는 전체 메시 또는 세분화된 서비스에 정책을 적용할 수 있는 기능을 개선합니다. 따라서 정책이 많거나 최소한의 추가 작업으로 세분화된 제어가 필요한 경우 서비스 메시를 고려합니다. 강력한 출시 전략: 서비스 메시는 블루/그린 및 카나리아와 같은 강력한 출시 전략 구현을 개선할 수 있습니다. 강력한 출시 전략이 필요한 경우 서비스 메시를 고려합니다.
서비스 메시 예시: Istio
Istio는 서비스 메시 구현입니다. Istio의 아키텍처에는 데이터 영역 및 제어 영역이 포함됩니다. 데이터 영역은 마이크로서비스 간의 통신을 제어하고 측정항목을 수집하는 Envoy 프록시로 구성됩니다. 수신 트래픽(인그레스), 발신 트래픽(이그레스), 서비스 간 트래픽(메시 트래픽)가 있습니다. 각 마이크로서비스 인스턴스(컨테이너 또는 VM)에는 전용 Envoy 프록시가 있습니다.
제어 영역은 Envoy 프록시의 관리 레이어입니다. 올바른 호출 라우팅이 발생하도록 프록시를 관리합니다. istiod 바이너리는 제어 영역의 핵심이며 서비스 검색, 구성, 인증서 관리를 제공합니다.
다양한 제어 영역 구성요소에 대한 자세한 내용은 Istio의 아키텍처 페이지를 참조하세요.
Istio는 다음 배포 모델을 지원합니다.
단일 또는 여러 Kubernetes 클러스터
단일 또는 여러 네트워크
단일 또는 여러 제어 영역
단일 또는 여러 메시
위의 배포 옵션은 다양한 사용 사례를 지원합니다. Istio 사용자는 시나리오에 가장 적합한 옵션을 선택할 수 있습니다.
Istio가 상업적으로 사용 가능한 유일한 서비스 메시는 아닙니다. Linkerd도 사용할 수 있습니다. Anthos Service Mesh는 Google Cloud의 완전 관리형 서비스 메시입니다. 개발자는 Anthos가 테스트하고 지원하는 Istio 배포판을 사용하여 Google의 전적인 지원을 통해 Google Cloud 또는 VMware용 Anthos 클러스터에서 서비스 메시를 만들고 배포할 수 있습니다.
다음 단계
키워드에 대한 정보 서비스 메시
다음은 Bing에서 서비스 메시 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 Keynote – Microservice Architecture의 복잡성 해결을 위한 Service Mesh 플랫폼 소개 – 임종진
- 쿠버네티스
- cncng
- kubernetes
Keynote #- #Microservice #Architecture의 #복잡성 #해결을 #위한 #Service #Mesh #플랫폼 #소개 #- #임종진
YouTube에서 서비스 메시 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 Keynote – Microservice Architecture의 복잡성 해결을 위한 Service Mesh 플랫폼 소개 – 임종진 | 서비스 메시, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.