본문 바로가기

Architecture

(23)
마이크로 서비스에 대해서 생각해보기 마이크로 서비스는 지난 몇년 동안 매우 인기 있는 주제였다. 마이크로 서비스는 왜 그렇게 인기가 있을까? 아래는 가상 비디오 공유 플랫폼이 Monolithic 형태로 구현 된 후에 마이크로 서비스 형태로 구현되는 방식이다. 위의 시스템의 차이점은 하나의 큰 덩어리와 작은 단위라는 점이다. 독립 개발: 작고 독립적인 구성 요소는 그에 맞춰진 작고 독립적인 팀으로 구성할 수 있다. 독립 배포: 각 구성 요소는 독립적으로 확장 할 수 있다. 새로운 서비스가 출시 되면 모든 구성 요소를 배포하지 않고 해당 구성 요소만 배포가 가능하다. 재사용성: 구성 요소들은 작고 특정한 기능을 수행한다. 다른 서비스 또는 제품에 쉽게 적용할 가능성이 높다. 대단한 것 같은데, 왜 이전에는 사용하지 않았나? 컨테이너 기술의 인..
Microservice의 ROI를 측정을 위한 매개변수 마이크로서비스 개발을 위한 ROI를 알고자 하는 CIO/CTO가 상당히 많습니다. 그들 중 일부는 수익대비 비용으로 측정하려고 노력하고 있습니다. 이런 사항들은 CIO/CTO가 고민해야 할 관심사이고 비즈니스에 미치는 영향이 중요하고 변경된 개발 사항이 매출 증가로 이어져야 하기 때문입니다. 그러나 개발은 다른 고려 사항을 염두하고 시작해야 합니다. 고객 및 이해 관계자를 행복하게 만드는 것은 중요한 행동이며 더 좋은 비즈니스 결과로 이어지게 됩니다. MSA(Microservice Architecture)는 즉각적인 영향을 줍니다. 마이크로서비스 구현시 ROI를 측정하는 가장 좋은 방법은 아래의 매개 변수를 고려해야 합니다. 다국어 기술 환경 수용 신속한 애자일 환경 제공 — 최단 시간내에 가장 빨리 기..
GraphQL 채택 후 Netflix가 배운 것들 Netflix에서는 콘텐츠 인기도 파악과 같은 다양한 데이터 및 집계 데이터를 활용하여 관련성이 높은 광고를 제공한다. Netflix의 목표는 모든 외부 채널에 대해 광고가 사용자와 잘 어우러지게 만드는 것이다. Netflix는 보다 효율적으로 하기 위해 끊임없는 실험을 하고 있다. Monet의 React UI는 Apache Tomcat에 의해 구동되고 REST API에 Access를 했다. 시간이 지나고 어플리케이션이 발전함에 따라서 사용 사례가 복잡해지기 시작했다. Simple page는 다양한 소스의 데이터를 가져와야 한다. 이 데이터를 클라이언트에서 효과적으로 로드하기 위해서 Backend 데이터를 비정규화 하는 노력을 시도했다. 그 이유는 모든 페이지가 모든 데이터를 필요로 하지 않기 때문에 유..
Istio / Envoy에서 OpenTracing 사용 하기 Sidecar Proxy는 코드 삽입없이 모니터링 데이터를 얻는 매우 간단한 방법을 제공한다. Tracing은 대규모 분산 시스템에서 가장 어려운 부분이기 때문에 Sidecar Pattern은 큰 이점으로 작용한다. Sidecar Proxy에서 Tracing을 하기 위해서는 Inbound에서 Outbound 요청으로 일부 Header를 전달해야 한다. Application단에서는 매우 간단하지만 전달받은 Header를 넘기는 로직을 처리하면 불편 할 수 있다. 비즈니스 레이어에서 Header를 전달하는 것을 조정한다고 상상해보면 Sidecar Pattern을 사용하는 이점이 없을 수 도 있다. Tracing은 Envoy만 사용 Header 전달이 기존 Application 코드에서는 아래처럼 작성된다. ..
Servie Mesh 알아 보기 지난 몇년간 Micro Service Architecture는 많이 발전되어 왔습니다. 그리고 현 시점에 몇 가지 새로운 개념과 패턴이 등장하고 있습니다. 이 중 “Service Mesh” 개념은 많은 인기를 얻고 있습니다. 본 글에서는 Service Mesh와 관련된 주요 개념에 대해서 설명합니다. Service Mesh의 등장 배경 현재까지 대부분의 사람들은 마이크로 서비스가 SOA/ESB와 같은 이전 아키텍처에서 가진 문제점들의 해답이라고 생각합니다. 그러나 실제 마이크로 서비스를 구현할 때, ESB가 지원하는 대부분의 기능들이 마이크로 서비스 수준에서 구현 가능하다는 것을 알 수 있습니다. 예를 들어서 여러 가지 다운 스트림 서비스를 호출하고 이 기능을 다른 서비스로 노출해야 하는 시나리오가 있습..
GraphQL로 BFF 대체하기 위의 그림에서 BFF의 목적은 Orchestration, Business Logic을 공유하고 Backend 서비스가 제공하는 것보다 UI에 친화적인 모델을 제공하는 것입니다. 그래서 각 클라이언트별로 BFF가 존재하게 됩니다. Netflix는 Client Adapter라는 이름으로 SoundCloud는 BFF라는 이름으로 UI에 친화적인 Backend 서비스를 제공하고 있는데, 이런 BFF에도 문제점이 존재합니다. 업무 조직간 교차 관리가 어렵습니다. Traffic에 대한 용량 사이징을 예측하기 어렵습니다. 단일 실패 지점이 될 가능성이 존재합니다. 추가적인 아키텍처 복잡성이 발생합니다. 다른 접근 방법은 클라이언트가 서비스를 제공하거나 Backend와 직접 상호 작용을 하는 것입니다. 위의 그림처럼 ..
Netflix Vizceral Vizceral은 Netflix Control Plain으로 유입되는 트래픽 상태에 대한 정보를 이해하는 방식을 변화 시켰다고 합니다. Netflix의 경우 전체 시스템의 상태에 기반한 의사결정을 내리기를 원했고 이를 위해서 전체 시스템의 상태에 대해 직관적으로 이해할 수 있는 도구가 필요했습니다. Netflix의 경우 데이터 구문 분석에 의존하는 대신 직관적인 방법을 적용하기로 했습니다. 장애로 인해 수백만명이 영향을 받는 시간을 최소화 하는 방안을 고려했고 이를 Intuition Engineering이라고 부르며 Vizceral이 그 대표적인 예입니다. 아래의 영상은 지역 간 트래픽 이동시 전체적인 모습을 시뮬레이션한 모습입니다. Netflix의 트래픽 팀에서는 Intuition Engineering..
마이크로 서비스 아키텍처에서 단일 데이터베이스를 분리해야 하는 이유 기존 Monolithic 서비스를 분해하여 Micro Service 아키텍처를 사용할 경우 데이터베이스에 중점을 두는 것이 중요합니다. 어플리케이션과 연계된 데이터베이스를 여러개의 작은 데이터베이스로 분할하는 확실한 전략이 필요합니다. 즉, 기존에 사용하던 Monolithic의 통합 데이터베이스를 분리해야 합니다. 마이크로 서비스 아키텍처는 각 마이크로 서비스가 자체 도메인 데이터가 있는 별도의 데이터베이스를 가지도록 설계해야 합니다. 이렇게 해야 마이크로 서비스를 독립적으로 배포하거나 확장 할 수 있기 때문입니다. 기존 Monolithic 서비스에는 단일 데이터베이스가 있고 데이터는 다른 컴포넌트간에 공유됩니다. 데이터가 단일 저장소에 관리되기 때문에 개발이 더 간단하다는 장점이 있지만, 데이터베이스 ..