이벤트 기반 마이크로서비스 소개

in hive-137029 •  3 years ago 



이벤트 기반 마이크로서비스로 기존 모놀리스를 교체할 수 있습니다. 보다 유연하고 확장 가능한 시스템을 쉽게 만들 수 있습니다. 이 문서에서는 이벤트 기반 기술을 사용하여 마이크로서비스를 만드는 방법에 대해 설명합니다.

모놀리식 아키텍처의 문제 정의

레거시 아키텍처는 오늘날의 끊임없이 변화하는 IT 세계의 요구 사항을 충족할 수 없습니다. 최신 애플리케이션은 내구성이 있고 확장 가능하며 클라우드 네이티브여야 하며 가능한 한 거의 100%에 가까운 가동 시간으로 연중무휴 작동할 수 있어야 합니다. 전통적인 아키텍처는 이러한 요구와 장애물을 충족할 수 없습니다. 이러한 기대에 부응하기 위해 IoT, Event Hubs, Cloud, Machine Learning 및 Microservices와 같은 새로운 기술이 등장했습니다. 이벤트 중심 방식으로 배포된 마이크로서비스는 오래된 모노리스를 보다 유연하고 확장 가능하며 관리하기 쉬운 시스템으로 교체하는 데 도움이 될 수 있습니다.

마이크로서비스 체크리스트

이벤트 기반 아키텍처란 무엇입니까?

이벤트 기반 프로그래밍은 새로운 개념이 아닙니다. 사실, 그것은 소프트웨어 자체보다 앞선다. 마이크로서비스 및 서버리스 아키텍처 에서 이벤트 기반 아키텍처를 활용할 수 있습니다 . 이벤트 기반 아키텍처는 신뢰할 수 있고 느슨하게 연결되며 확장 가능한 시스템을 개발하는 데 도움이 됩니다.

이러한 종류의 디자인은 확장 및 관리가 가능합니다. 이벤트 기반 아키텍처는 가용성이 향상된 시스템 개발을 지원합니다. 이벤트 기반 아키텍처 모델의 구성 요소 중 하나가 실패하면 다른 구성 요소가 계속 정상적으로 작동할 수 있습니다. 대조적으로, 일반적인 모놀리식 애플리케이션에서는 한 구성 요소의 오류가 다른 구성 요소의 오류를 유발할 수 있습니다.

읽기: 서버리스 함수와 마이크로서비스 비교

이벤트 기반 마이크로서비스란 무엇입니까?

마이크로서비스와 이벤트 기반 컴퓨팅이 최근 인기를 얻었습니다. 최신 마이크로서비스 설계는 반응적이며 이벤트 중심입니다. 결과적으로 느슨하게 연결되고 업데이트 및 유지 관리가 간단합니다. 이벤트 기반 마이크로서비스를 사용하여 시간이 지남에 따라 보다 적응력이 높고 유지 관리가 더 간단한 애플리케이션을 만들 수 있습니다.

다음 시나리오를 고려하십시오. 서로 비동기적으로 상호 작용해야 하는 수많은 마이크로 서비스가 있습니다. 서비스를 확장할 수 있고, 서로 연결이 끊기고, 독립적으로 유지 관리되기를 원할 수 있습니다. 다른 서비스에서 사용할 수 있는 이벤트를 마이크로서비스에서 생성하도록 할 수도 있습니다. 여기서 이벤트 기반 마이크로서비스가 작동합니다. 이벤트 기반 마이크로 서비스 아키텍처의 마이크로 서비스는 중요한 작업이 수행되거나 주목할만한 일이 발생할 때 이벤트를 브로드캐스트합니다.

예를 들어 주문 상태가 변경되면 서비스에서 데이터를 변경합니다. 이러한 이벤트는 다른 마이크로 서비스에 의해 구독됩니다. LinkedIn과 Netflix는 모두 이벤트 기반 비동기 통신 아키텍처를 사용합니다. 이벤트 기반 마이크로서비스는 많은 서비스에 걸쳐 있는 비즈니스 트랜잭션을 실행하는 데 사용할 수 있습니다. 예를 들어 설명하겠습니다.

Notification 과 User 의 두 가지 서비스를 고려하십시오 . 알림 서비스에는 알림 테이블에 대한 소유권이 있고 사용자 서비스에는 사용자 테이블에 대한 소유권이 있다고 가정합니다. 알림 서비스가 알림 상태가 "신규"인 알림을 생성하고 "알림 생성됨" 이벤트를 게시했다고 가정합니다. 이 이벤트는 이메일 서비스에서 사용되며 알림 상태가 "처리 중"으로 변경되고 "알림 보내기" 이벤트가 게시됩니다. 그런 다음 알림 서비스는 "알림 보내기" 이벤트를 사용하고 알림 상태를 "처리됨"으로 변경합니다. 이것은 이벤트 기반 서비스가 비동기적으로 작동하는 방법의 간단한 예입니다.

이벤트 기반 마이크로서비스는 반응형 애플리케이션 개발에도 도움이 됩니다. 예를 들어 이것을 이해합시다. 방금 이야기한 알림 서비스를 고려하십시오. 알림 서비스가 새 알림이 생성되어 대기열에 저장될 때 사용자에게 알려야 한다고 가정합니다. 여러 명의 동시 사용자가 애플리케이션에 액세스를 시도하고 처리된 알림을 알고 있다고 가정합니다.

이벤트 기반 모델에서 모든 경고는 적절한 사용자에게 전달되기 전에 대기열에 있습니다. 이 상황에서 사용자는 알림(이메일, 문자 메시지 등)이 처리되는 동안 기다릴 필요가 없습니다. 알림이 비동기적으로 처리되는 동안 사용자는 애플리케이션을 계속 사용할 수 있습니다. 이것이 애플리케이션을 응답성 및 느슨하게 결합되도록 만드는 방법입니다.

읽기: 마이크로서비스를 중심으로 팀을 조정하는 방법

이벤트 기반 마이크로서비스의 과제

기존 애플리케이션은 다양한 사용 사례에 유용하지만 가용성, 확장성 및 안정성 문제에 직면해 있습니다. 일반적으로 모놀리식 애플리케이션에는 단일 데이터베이스가 있습니다. 따라서 다국어 지속성을 지원하는 것이 어려웠습니다.

반면에 마이크로서비스 기반 애플리케이션에서 데이터에 액세스하는 것은 다릅니다. 각 마이크로 서비스는 일반적으로 자체 데이터를 소유하므로 마이크로 서비스에서 제어하는 ​​데이터가 마이크로 서비스에 독점적임을 의미합니다. 한 서비스가 다른 서비스가 보유한 데이터에 액세스하려면 해당 서비스에서 액세스할 수 있는 API를 사용하여 액세스해야 합니다.

이러한 방식으로 데이터를 캡슐화하면 필요에 따라 별도로 관리, 유지 및 변경할 수 있는 느슨하게 결합된 마이크로서비스를 생성할 수 있습니다.

수많은 서비스가 동일한 데이터에 액세스하면 상황이 복잡해집니다. 문제를 더욱 복잡하게 만드는 것은 이기종 데이터베이스, 즉 여러 유형의 데이터베이스를 활용하는 마이크로서비스가 있을 수 있다는 것입니다. 다중 언어 지속성이라고 하는 SQL 및 NoSQL 데이터베이스 조합을 사용하는 마이크로서비스가 있을 수 있습니다 .

다중 언어 지속성은 느슨하게 연결된 서비스, 향상된 효율성 및 확장성과 같은 여러 이점을 제공하지만 심각한 분산 데이터 관리 문제도 가져옵니다.

그러한 문제 중 하나는 데이터 무결성을 유지하면서 여러 시스템에 걸쳐 비즈니스 트랜잭션을 수행하는 방법을 파악하는 것입니다. 일반적인 모놀리식 애플리케이션에서 일관성을 보장하기 위해 ACID 트랜잭션을 사용할 수 있습니다. 그러나 이를 마이크로서비스 애플리케이션에 적용하는 것은 쉬운 일이 아닙니다.

읽기: 마이크로서비스 아키텍처를 위한 보안 과제 및 솔루션

이벤트 기반 마이크로서비스 아키텍처의 패턴

이벤트 기반 방식으로 마이크로 서비스를 개발하는 데 사용되는 패턴은 Event Stream , Event Sourcing , Polyglot Persistence 및 CQRS(Command Query Responsibility Separation) 입니다.

Event Streaming 아키텍처는 Apache Kafka 및 Confluent와 같은 메시징 기술을 사용하여 이벤트 스트림을 브로커에 게시합니다. 이벤트 스트리밍 플랫폼의 소비자는 각 스트림의 이벤트에 액세스하고 사용할 수 있습니다.

기존 처리와 달리 이벤트 스트림 처리는 비동기식으로 이벤트의 실시간 처리를 수반합니다. 결과적으로 이벤트 스트림 처리를 통해 소프트웨어 구성 요소가 분리되고 확장 가능한 방식으로 실시간으로 협업할 수 있습니다.

이벤트 소싱은 모놀리스에서 마이크로서비스로 전환하는 동안 활용되는 인기 있는 아키텍처 기술입니다. 애플리케이션 상태는 이벤트 소싱 패턴의 일련의 이벤트에 의해 결정됩니다. 대기열과 마찬가지로 이벤트는 수신된 순서대로 표시됩니다.

Polyglot Persistence는 이기종 데이터베이스에 데이터를 저장하는 데 사용되는 전략입니다. 예를 들어 설명하겠습니다. 데이터는 마이크로서비스 아키텍처를 사용하여 별개의 서비스로 저장될 수 있습니다. 다양한 형식으로 데이터를 저장할 수도 있습니다.

예를 들어, 온라인 전자 상거래 응용 프로그램을 개발하는 경우 전체 텍스트 검색 기능이 필요할 수 있습니다. 이 검색 엔진에서 사용하는 데이터베이스는 전자 상거래 응용 프로그램에서 사용하는 관계형 데이터베이스(예: MongoDB 또는 빠른 검색을 지원하는 기타 문서 데이터베이스) 와 다를 수 있습니다 . 검색 엔진과 해당 데이터베이스는 원활하게 작동해야 합니다. 여러 저장소 형식이 공존하는 것을 Polyglot 지속성이라고 합니다.

명령 및 쿼리 책임 분리(CQRS) 패턴은 읽기 및 쓰기 모델을 분리하는 또 다른 패러다임입니다. 이 아키텍처 패턴은 애플리케이션에서 읽기 및 쓰기 작업을 분리합니다. 더 구체적으로 말하면 삽입 또는 업데이트 작업은 일반적으로 다른 서비스에서 처리됩니다. 데이터 쿼리의 경우 별도의 서비스가 추가로 필요합니다. CQRS 패턴은 애플리케이션의 성능, 확장성 및 보안을 향상시키는 데 도움이 됩니다.

이벤트 기반 마이크로서비스 요약

이 기사에서는 이벤트 기반 마이크로서비스와 이벤트 기반 접근 방식을 사용하여 마이크로서비스를 구축하는 방법에 대해 논의했습니다. 이벤트 기반 아키텍처에서 게시자는 이벤트를 게시하고 소비자는 이벤트를 구독합니다. 이러한 이벤트는 서비스가 분리된 방식으로 통신하는 데 도움이 됩니다.



https://www.developer.com/design/event-driven-microservices/

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.