2017-12-10 20 views
0

다음 프로젝트에 가장 적합한 아키텍처를 설계하고 싶습니다. 사용자가 데이터를 공유하는 다른 사용자와 알림을 게시하거나 수신 할 수있는 모든 장치 (데스크톱, 모바일 ...)에서 실행되는 응용 프로그램이 있습니다.스트리밍 데이터 아키텍처

기본적으로 사용자는 응용 프로그램에서 수행중인 작업을 다른 사용자와 공유 할 수 있으며 다른 사용자는 변경 사항을 실시간으로 통보받으며 그 반대의 경우도 마찬가지입니다. 사용자는 다른 사용자가 허용 한 알림 만받을 수 있습니다.

예를 들어, 사용자가 화면에서 위젯을 움직이면 응용 프로그램은 새로운 위젯 위치를 저장하고 화면에서 변경을 수행하기 위해이 새 위치를 실시간으로 다른 사용자에게 알려야합니다. 이 필요를 위해 게시 - 구독 패턴을 사용하는 이벤트 중심 아키텍처가 표시됩니다. 그러나 응용 프로그램이 예를 들어 위젯을 공유 할 사용자 목록을 검색해야 할 때 동기화 요청 - 응답 패턴을 처리해야 할 필요가 있다고 생각합니다.

스트리밍 데이터 아키텍처가 설명되어있는 Streaming Data book by Manning을 간략히 살펴 보았지만 이런 종류의 아키텍처가 내 필요에 맞는지는 알 수 없습니다. 구현 부분의 한 가지 차이점은 이벤트 소스 제작자가 내 애플리케이션의 이벤트 소비자가 될 수도 있다는 것입니다 (이 책에서 이벤트 소스 제작자는 별도의 공개 스트리밍 API이며 실제 애플리케이션은 유일한 소비자입니다)

필자가 생각하기에이 책은 데이터 수집 및 데이터 액세스를위한 WebSocket, 메시지 저장소와 같은 브로커와 같은 카프카 (Kafka), 카프카 (Kafka) 주제를 소비하고 DB에 데이터를 저장하는 별도의 분석 서비스로 구성됩니다. 데이터 수집과 데이터 액세스에 하나의 WebSocket 만 사용할 수 있다면 한 가지 질문이 있습니다.

이러한 요구 사항에 적합한 아키텍처 및 도구는 무엇입니까?

구현을 위해 클라이언트 부분에는 자바 스크립트를, 서버 부분에는 자바를 고려할 것입니다.

+0

여러 사용자가 Google 문서 도구와 같은 동일한 화면을 수정할 수 있습니까? 아니면 특정 화면에 대한 "작가"이며 다른 모든 사용자는 "독자"일뿐입니다. –

+0

@AdiLevin 모든 사용자가 수정할 수 있습니다. – rico

답변

1

이것은 Kafka (방송 및 저장 요소를 모두 활용)에 대한 일반적인 사용 사례입니다. 상황이 약간 다르지만 도움이 여기에 몇 가지 예제가있다 :이 예에서

https://github.com/confluentinc/kafka-streams-examples/tree/4.0.0-post/src/main/java/io/confluent/examples/streams/microservices

https://www.confluent.io/blog/building-a-microservices-ecosystem-with-kafka-streams-and-ksql/

가 CQRS 패턴을 사용, 변경 있도록 이벤트를 생성 할 화면 위치로 만들 kafka로 보내면 다른 응용 프로그램 인스턴스가 폴링 (변경) 할 수있는보기 서비스를 만들 수 있습니다.

또한 이것을 websocket으로 구현할 수도 있습니다. github에 대한 몇 가지 구현이 있지만 개인적으로 시도하지 않았습니다. 하나의 복잡성은 많은 노드로 확장하려는 경우 Kafka에서 메시지를 매핑하여 웹 소켓을 여는 반면 (REST 예제에서 카파 파티션으로 매핑 요청이 자동으로 처리됨) 단일 서버 구현을 시작하기 위해서는 이러한 복잡성이 필요하지 않습니다.