전통문화대전망 - 전통 미덕 - 마이크로서비스란 무엇입니까?

마이크로서비스란 무엇입니까?

마이크로 서비스 아키텍처는 단일 응용 프로그램이 독립적으로 배포 될 수있는 느슨하게 결합 된 많은 소규모 서비스로 구성된 방법입니다.

마이크로서비스 (또는 마이크로서비스 아키텍처) 는 클라우드 기본 아키텍처 접근 방식으로, 단일 애플리케이션은 독립적으로 배포할 수 있는 느슨하게 결합된 여러 개의 작은 구성 요소 또는 서비스로 구성됩니다.

이러한 서비스는 일반적으로

마이크로서비스에 대한 대부분의 논의는 아키텍처 정의와 특징을 중심으로 이루어지지만, 그 가치는 상당히 간단한 비즈니스 및 조직적 이점을 통해 더 널리 이해될 수 있습니다.

마이크로서비스도 아무것도 아닌 것으로 이해할 수 있다.

마이크로서비스 아키텍처와 가장 일반적인 두 가지 비교는 전체 아키텍처와 서비스 지향 아키텍처 (SOA) 입니다.

마이크로 서비스와 모 놀리 식 아키텍처의 차이점은 마이크로 서비스는 크고 밀접하게 결합 된 응용 프로그램이 아닌 많은 작고 느슨한 결합 된 서비스로 구성된 단일 칩 접근 방식이라는 것입니다.

마이크로서비스와 SOA 의 차이는 분명하지 않을 수 있습니다.

마이크로서비스와 SOA 를 기술적으로 비교할 수 있지만, 특히 엔터프라이즈 서비스 버스 (ESB) 의 역할을 중심으로 할 수는 있지만 그 차이를 범위 중 하나로 생각하는 것이 더 쉽습니다.

SOA 는 조직의 모든 웹 서비스가 서로 통신하고 통합되는 방식을 표준화하기 위한 전사적 노력이며, 마이크로서비스 아키텍처는 애플리케이션별로 다릅니다.

마이크로서비스는 적어도 개발자만큼 임원과 프로젝트 책임자에게 인기가 있을 수 있다.

이는 마이크로서비스의 특이한 특징 중 하나입니다. 아키텍처 열정은 일반적으로 소프트웨어 개발 팀에 맡기기 때문입니다.

그 이유는 마이크로서비스가 많은 비즈니스 리더가 팀 및 개발 프로세스를 구축하고 운영하려는 방식을 더 잘 반영하기 때문입니다.

즉, 마이크로서비스는 필요한 운영 모델을 더 잘 홍보할 수 있는 아키텍처 모델입니다.

IBM 이 최근 65,438+0,200 명 이상의 개발자와 IT 임원을 대상으로 실시한 설문 조사에서 87% 의 마이크로서비스 사용자가 마이크로서비스 채택에 동의한 것은 가치 있는 일이었습니다.

마이크로서비스의 가장 중요한 특징은 서비스가 더 작고 독립적으로 배치할 수 있기 때문에 국회의 법안이 더 이상 코드 한 줄을 변경하거나 응용 프로그램에 새로운 기능을 추가할 필요가 없다는 것입니다.

마이크로서비스는 조직에 해독제 한 제를 약속하여 많은 시간을 소비하는 작은 변화와 관련된 내면의 좌절을 완화시킬 수 있다.

박사 학위는 필요 없습니다.

컴퓨터 과학에서 속도와 유연성을 높이는 더 좋은 방법의 가치를 보거나 이해하다.

그러나 속도가 이런 방식으로 서비스를 설계하는 유일한 가치는 아니다.

흔히 볼 수 있는 신흥 조직 모델은 비즈니스 문제, 서비스 또는 제품을 중심으로 교차 기능 팀을 모으는 것입니다.

마이크로 서비스 모델은 조직이 서비스 또는 서비스 그룹을 중심으로 작은 교차 기능 팀을 만들고 민첩한 방식으로 실행할 수 있도록 하기 때문에 이러한 추세를 완벽하게 충족합니다.

마이크로서비스의 느슨한 결합도 어플리케이션에 어느 정도의 장애 격리와 유연성을 제공합니다.

소규모 서비스, 명확한 경계 및 커뮤니케이션 모델을 통해 새로운 팀 구성원은 코드 라이브러리를 더 쉽게 이해하고 신속하게 기여할 수 있습니다. 이는 속도와 직원 사기에 큰 도움이 됩니다.

기존의 n 계층 아키텍처 모델에서는 애플리케이션이 일반적으로 하나의 공통 스택을 공유하는데, 그 중 하나의 대형 관계형 데이터베이스가 전체 애플리케이션을 지원합니다.

이 방법에는 몇 가지 분명한 단점이 있습니다. 가장 중요한 것은 응용 프로그램의 각 구성 요소가 공통 스택, 데이터 모델 및 데이터베이스를 공유해야 한다는 것입니다. 특정 요소의 작업을 수행하기 위한 명확하고 더 나은 도구가 있더라도 마찬가지입니다.

이로 인해 구조가 나빠지고 이러한 구성 요소를 더 효과적이고 효율적으로 구축할 수 있다는 것을 항상 깨달은 개발자들이 좌절하게 됩니다.

반면 마이크로서비스 모델에서는 구성 요소가 독립적으로 배포되고 REST, 이벤트 흐름 및 메시지 에이전트의 조합을 통해 통신하므로 각 개별 서비스의 스택을 해당 서비스에 맞게 최적화할 수 있습니다.

기술은 계속 변화하고 있으며, 더 이상적인 기술이 발전함에 따라 여러 개의 더 작은 서비스로 구성된 응용 프로그램이 더 쉽고 저렴해졌습니다.

마이크로서비스를 사용하면 개별 서비스를 개별적으로 배포할 수 있지만 개별적으로 확장할 수도 있습니다. 이점은 분명합니다. 제대로 하면 마이크로서비스가 단일 디스크 어플리케이션보다 인프라가 적게 필요합니다. 이는 단일 디스크 어플리케이션으로 전체 어플리케이션을 확장하는 것이 아니라 필요한 구성 요소의 정확한 확장만 지원하기 때문입니다. (윌리엄 셰익스피어, 마이크로서비스, 마이크로서비스, 마이크로서비스, 마이크로서비스, 마이크로서비스, 마이크로서비스, 마이크로서비스, 마이크로서비스, 마이크로서비스)

마이크로서비스의 두드러진 장점은 큰 도전을 동반한다.

단일 아키텍처에서 마이크로서비스에 이르기까지 관리 복잡성 증가-더 많은 서비스, 더 많은 팀이 만들어 더 많은 곳에 배포.

한 서비스의 문제는 다른 서비스의 문제 또는 다른 서비스의 문제로 인해 발생할 수 있습니다.

로그 데이터 (문제 모니터링 및 해결을 위한 데이터) 는 훨씬 더 크며 서비스 간에 불일치가 발생할 수 있습니다.

새 버전으로 인해 이전 버전과의 호환성 문제가 발생할 수 있습니다.

애플리케이션은 더 많은 네트워크 접속을 포함하므로 지연 및 접속 문제가 발생할 가능성이 더 큽니다.

DevOps 접근 방식은 이러한 많은 문제를 해결할 수 있지만 DevOps 를 채택하는 데는 자체 과제가 있습니다.

하지만 이러한 도전들은 비채택자들이 마이크로서비스를 채택하는 것을 막지 못했거나, 채용자들이 마이크로서비스 약속을 심화시키는 것을 막지 못했습니다.

새로운 IBM 설문 조사에 따르면 현재 비 사용자 중 56% 는 향후 2 년 내에 마이크로서비스를 사용할 가능성이 있거나 없을 수 있으며, 현재 마이크로서비스 사용자의 78% 는 마이크로서비스에 대한 시간, 비용 및 노력을 증가시킬 수 있습니다.

마이크로서비스 아키텍처는 일반적으로 DevOps 및 지속적인 통합/지속적인 제공 (CI/CD) 에 최적화된 것으로 설명됩니다. 자주 배포할 수 있는 소규모 서비스의 경우 그 이유를 쉽게 이해할 수 있습니다.

그러나 마이크로서비스와 DevOps 의 관계를 보는 또 다른 방법은 마이크로서비스 아키텍처가 실제로 DevOps 가 필요하다는 것입니다.

단일 응용 프로그램에는 이 문서의 앞부분에서 설명한 단점이 있지만, 여러 개의 활성 부품과 별도의 기술 스택이 없는 복잡한 분산 시스템이 아니라는 장점이 있습니다.

반면, 마이크로서비스로 인한 복잡성과 모바일 부품 및 의존성의 급격한 증가로 인해 배포, 모니터링 및 수명 주기 자동화에 대한 투자 없이 마이크로서비스를 사용하는 것은 현명하지 않습니다.

거의 모든 현대 도구나 언어를 마이크로서비스 아키텍처에서 사용할 수 있지만 일부 핵심 도구는 마이크로서비스의 기본 경계 정의가 되었습니다.

마이크로서비스의 핵심 요소 중 하나는 보통 매우 작다는 것입니다.

(아무리 많은 코드도 한 가지가 마이크로서비스인지 아닌지를 결정할 수는 없지만, 이름 속의' 마이크로' 는 있다. ) 을 참조하십시오

Docker 는 20 13 이 현대컨테이너 시대를 맞이할 때 마이크로서비스와 가장 밀접한 관계를 맺고 있는 컴퓨팅 모델도 선보였다.

단일 컨테이너에는 자체 운영 체제 오버헤드가 없으므로 기존 가상 시스템보다 작고 가벼우며 시작 및 종료 속도가 빨라 마이크로서비스 아키텍처에서 더 작고 가벼운 서비스에 적합합니다.

서비스와 컨테이너가 급증함에 따라 대량의 컨테이너를 배치하고 관리하는 것이 빠르게 주요 과제 중 하나가 되었습니다.

Kubernetes 는 오픈 소스 컨테이너 편성 플랫폼입니다. 아주 좋기 때문에 가장 인기 있는 편성 솔루션 중 하나가 되었습니다.

마이크로서비스는 일반적으로 API 를 통해 통신하는데, 특히 상태가 처음 설정된 경우에는 더욱 그렇습니다.

클라이언트와 서비스는 서로 직접 통신할 수 있지만 API 게이트웨이는 일반적으로 유용한 중간 계층입니다. 특히 애플리케이션의 서비스 수가 시간이 지남에 따라 증가하는 경우 더욱 그렇습니다.

API 게이트웨이는 클라이언트의 역방향 프록시 역할을 하며, 요청을 라우팅하고, 여러 서비스에 요청을 분산시키고, 추가적인 보안 및 인증을 제공합니다.

API 게이트웨이를 구현하는 데 사용할 수 있는 기술로는 API 관리 플랫폼을 포함한 많은 기술이 있지만, container 와 Kubernetes 를 사용하여 마이크로서비스 아키텍처를 구현하는 경우 일반적으로 Ingress 또는 가장 가까운 Istio 를 사용하여 게이트웨이를 구현합니다.

모범 사례는 무상태형 서비스를 설계하는 것일 수 있지만 상태는 여전히 존재하며 서비스는 이를 이해해야 합니다.

API 호출은 일반적으로 주어진 서비스의 초기 상태를 설정하는 효과적인 방법이지만 상태를 최신 상태로 유지하는 데 특히 효과적인 방법은 아닙니다.

끊임없이 투표합니다. "우리가 도착했습니까? 클릭합니다 서비스를 최신 상태로 유지하는 방법은 비현실적이다.

대신 API 호출을 메시지 전달 또는 이벤트 흐름과 결합하여 상태 변경을 브로드캐스트할 수 있도록 상태를 설정해야 합니다. 다른 당사자가 이러한 변경을 수신하고 그에 따라 조정할 수 있습니다.

이 작업은 일반 메시지 에이전트에 가장 적합할 수 있지만 경우에 따라 Apache Kafka 와 같은 이벤트 흐름 플랫폼이 더 적합할 수 있습니다.

개발자는 마이크로서비스와 이벤트 중심 아키텍처를 결합하여 대량의 이벤트나 정보를 실시간으로 소비하고 처리할 수 있는 분산, 확장성, 내결함성, 확장 가능한 시스템을 구축할 수 있습니다.

서버 없는 아키텍처는 일부 핵심 클라우드 및 마이크로서비스 모델에서 논리적 결론을 도출합니다.

서버가 없을 경우 실행 단위는 단순한 서비스가 아니라 함수이며 일반적으로 몇 줄의 코드일 수 있습니다.

서버 없는 기능과 마이크로서비스 사이의 경계선은 모호하지만, 일반적으로 기능이 마이크로서비스보다 작다고 생각한다.

마이크로서비스와 유사한 서버 없는 아키텍처 및 FaaS 플랫폼은 더 작은 배포 단위를 만들고 필요에 따라 정확하게 확장하는 데 관심이 있습니다.

마이크로서비스가 클라우드 컴퓨팅과 완전히 관련이 있는 것은 아니지만, 마이크로서비스가 새로운 어플리케이션으로 유행하는 아키텍처 스타일의 원인과 클라우드가 새로운 어플리케이션에서 유행하는 관리 대상이 되는 이유 등 몇 가지 중요한 이유가 있습니다. (윌리엄 셰익스피어, 마이크로서비스, 클라우드, 클라우드, 클라우드, 클라우드, 클라우드, 클라우드, 클라우드, 클라우드, 클라우드)

마이크로서비스 아키텍처의 주요 이점 중 하나는 개별 구성 요소 배포 및 확장과 관련된 활용도 및 비용 이점입니다.

이러한 장점은 어느 정도 로컬 인프라에 존재하지만, 소형이고 독립적이며 확장 가능한 구성 요소와 주문형 및 이용당 기반 인프라를 결합하면 진정한 비용 최적화를 찾을 수 있습니다.

둘째, 더 중요한 것은 마이크로 서비스의 또 다른 주요 이점은 각 개별 구성 요소가 특정 작업에 가장 적합한 스택을 사용할 수 있다는 것입니다.

자체 관리 스택이 급증하면 심각한 복잡성과 오버헤드가 발생할 수 있지만 지원 스택을 클라우드 서비스로 사용하면 관리 문제를 크게 줄일 수 있습니다.

즉, 자신의 마이크로서비스 인프라를 내놓는 것도 불가능하지는 않지만, 특히 처음 시작할 때는 바람직하지 않다.

마이크로 서비스 아키텍처에는 다음과 같은 보다 일반적인 과제와 기회를 해결하는 데 도움이 되는 일반적이고 유용한 설계, 통신 및 통합 모델이 많이 있습니다.

예를 들어 데스크톱에서 사용되는 어플리케이션은 모바일 장치와 화면 크기, 표시 및 성능 제한이 다릅니다.

BFF 모드를 사용하면 개발자가 모든 인터페이스에 적용되지만 프런트엔드 성능에 부정적인 영향을 줄 수 있는 공용 백엔드를 지원하려고 하는 대신 각 사용자 인터페이스에 대한 백엔드 유형을 만들고 지원하는 데 가장 적합한 인터페이스 옵션을 사용할 수 있습니다.

예를 들어, 전자 상거래 웹 사이트에서 제품 이름, 유형 및 가격으로 제품 객체를 구분할 수 있습니다.

합산은 하나의 단위로 간주해야 하는 관련 엔티티 모음입니다.

따라서 전자 상거래 웹 사이트의 경우 주문은 구매자가 주문한 제품 (개체) 의 모음입니다.

이러한 패턴은 의미 있는 방식으로 데이터를 분류하는 데 사용됩니다.

마이크로서비스 아키텍처에서 서비스 인스턴스는 확장, 업그레이드, 서비스 실패 및 서비스 종료에 따라 동적으로 변경됩니다.

이 패턴들은 이러한 일시성을 처리하기 위한 발견 메커니즘을 제공한다.

로드 밸런싱은 서비스 검색 모드를 사용하여 상태 점검 및 서비스 오류를 트리거로 사용하여 트래픽 균형을 재조정할 수 있습니다.

어댑터 모드의 목적은 호환되지 않는 클래스나 객체 간의 관계를 번역하는 데 도움이 됩니다.

타사 API 에 의존하는 응용 프로그램은 응용 프로그램과 API 가 통신할 수 있도록 어댑터 모드를 사용해야 할 수 있습니다.

이 알록달록한 이름은 덩굴 (마이크로서비스) 이 시간이 지날수록 나무 (단일 앱) 를 천천히 뛰어넘어 죽이는 방법을 가리킨다.

마이크로서비스를 잘 완성할 수 있는 모델이 많지만, 같은 수의 모델이 있으면 모든 개발팀을 곤경에 빠뜨릴 수 있습니다.

그 중 일부는 다음과 같이 마이크로서비스로 다시 쓰겠습니다.

애플리케이션이 너무 커져서 업데이트 및 유지 관리가 어려워지면 마이크로서비스가 복잡성을 관리하는 한 가지 방법입니다.

단일 아키텍처의 고통과 복잡성이 확산되기 시작한다는 것을 느낄 때만 애플리케이션을 더 작은 서비스로 재구성하는 방법을 고려할 가치가 있습니다.

당신이 그 고통을 느끼기 전에, 당신은 정말로 재건해야 할 단량체를 가지고 있지 않다. (윌리엄 셰익스피어, 햄릿, 고통명언)

A) 자동화 또는 b) 대규모 이기종 인프라를 지원하기 위해 클라우드 서비스를 적절히 배포 및 모니터링하지 않고 마이크로서비스를 수행하려고 하면 불필요한 문제가 많이 발생합니다.

자신을 위해 일을 덜어라, 그러면 너는 시간을 걱정에 쓸 수 있다. (조지 버나드 쇼, 시간명언)

더 큰 서비스를 선호한 다음 마이크로서비스 솔루션의 특징을 개발하기 시작할 때만 분리하는 것이 좋습니다. 즉, 배포가 더 어렵고 느려지거나 공용 데이터 모델이 너무 복잡해지거나 서비스의 여러 부분에 서로 다른 로드/규모 요구 사항이 있습니다.

Microservices 와 SOA 의 차이점은 Microservices 프로젝트는 일반적으로 관리 용이성을 높이기 위해 응용 프로그램을 재구성하는 것을 포함하는 반면 SOA 는 기업 내에서 IT 서비스가 작동하는 방식을 변경하는 데 초점을 맞추고 있다는 것입니다.

SOA 프로젝트로 진화한 마이크로서비스 프로젝트는 자신의 중압으로 붕괴될 수 있다.

너는 네가 처리할 수 있는 속도로 시작하고, 복잡성을 피하고, 가능한 한 많은 기성 도구를 사용하는 것이 좋겠다.