GraphQL을 사용하여 Event Mesh의 상태 쿼리



이 블로그 게시물에서는 GraphQL의 확장 가능한 API 모델의 기능을 활용하여 이벤트 메시의 아키텍처와 상태를 더 잘 이해할 수 있는 방법을 설명합니다. Anevent mesh은 전 세계 어디에서나 모든 클라우드, 에지 또는 온프레미스 환경에서 실행되는 분리된 애플리케이션, 클라우드 서비스 및 장치 간에 이벤트를 배포하는 이벤트 브로커의 상호 연결된 네트워크입니다.

이벤트 메시의 상위 수준 아키텍처는 다음과 같습니다.


이 다이어그램에는 온프레미스, 퍼블릭 클라우드, 심지어 프라이빗 클라우드에도 배포된 Solace PubSub+ Event Brokers의 네트워크가 있습니다. 동적 메시지 라우팅이라는 프로토콜을 통해 함께 연결됩니다( DMR ). DMR에 대해 이해해야 할 핵심 사항은 이벤트가 경로 또는 라우팅 규칙을 미리 정의할 필요 없이 이동해야 하는 위치로만 라우팅된다는 것입니다.

예를 들어 Apache Beam [Google Cloud Dataflow]( https://cloud.google.com/dataflow ) 마이크로 서비스가 Google Cloud Platform에서 이벤트를 생성하고 이를 AWS의 마이크로 서비스로 라우팅하려는 경우 AWS의 모든 마이크로 서비스는 다음을 수행해야 합니다. 'Topic Subscription'을 통해 Beam\Dataflow 이벤트에 대한 관심을 표현합니다.

PubSub+ Event Broker를 관리/모니터링하기 위한 RESTful API



이벤트 메시의 핵심 구성 요소는 이벤트 브로커입니다. Solace의 PubSub+ 이벤트 브로커는 multi-protocol , hardware appliancessoftware 등 여러 폼 팩터로 제공되는 as a service 이벤트 브로커입니다. 이벤트 브로커는 이벤트 메시에 대한 클라이언트 연결을 처리하고 데이터를 이벤트 메시의 인접 노드로 라우팅합니다.

모든 PubSub+ 이벤트 브로커는 이벤트 브로커에 대한 다양한 내부 통계 및 관리 기능에 대한 액세스를 제공하는 Solace 요소 관리 프로토콜(SEMP )이라는 REST-ful 관리 인터페이스를 노출합니다.

예를 들어 브로커에 대해 SEMP 쿼리를 실행하면 브로커에 연결된 IP 주소/사용자를 파악할 수 있습니다. 또 다른 쿼리는 브로커에서 어떤 주제 구독이 활성 상태인지 이해하는 데 도움이 됩니다.

Event Mesh의 추상화 레이어로서의 GraphQL



Solace에는 로그 수집과 함께 SEMP API 위에 구축된 Solace PubSub+ Monitor 및 PubSub+ Insights와 같은 모니터링 솔루션이 있지만 우리는 GraphQL을 사용하여 SEMP API를 확장할 것입니다.

SEMP API를 활용하면 이벤트 메시의 모든 노드를 주기적으로 폴링하여 통계를 데이터베이스에 저장할 수 있습니다. 그런 다음 GraphQL 서버를 사용하여 데이터베이스 결과를 표시하고 다음과 같은 질문에 답할 수 있는 표현 API를 구축할 수 있습니다.
  • 지정된 주제에 대한 구독이 활성화된 노드는 무엇입니까?
  • 어떤 사용자가 특정 주제를 구독하고 있습니까?
  • 트래픽이 가장 많이 발생하는 이벤트 메시의 링크는 무엇입니까?
  • 이벤트 메시에서 가장 많이 구독되는 주제는 무엇입니까?

  • 샘플 구현



    이벤트 메시의 노드를 쿼리하고 강력한 JavaScript ORM 라이브러리인 Prisma을 사용하여 데이터베이스에 저장하는 기본 노드 애플리케이션을 작성했습니다. 또한 GraphQL을 통해 Prisma의 테이블을 노출하는 GraphQL 서버를 작성했습니다. 이 유틸리티는 현재 클라이언트 및 주제 구독을 저장하고 노출하지만 더 많은 사용 사례를 포함하도록 쉽게 확장할 수 있습니다.



    GitHub 저장소/설정 지침here을 찾을 수 있습니다.

    다음은 이 애플리케이션 스택으로 얻을 수 있는 몇 가지 샘플 쿼리 및 결과입니다.

    내 주제는 어느 노드에서 구독하나요?



    
    query{
    findClientsForSubscription(topicString: "my/topic")
    {
       subscription
       clients {
         nodeName
       }
    }
    }
    
    

    결과:

    
    {"data": {
      "findClientsForSubscription": [
      {
        "subscription": "my/topic",
        "clients": [
         {
           "nodeName": "Cloud Broker"
         },
         {
           "nodeName": "Local Broker"
         }
        ]
       }
      ]
     }
    }
    
    


    내 주제를 구독하는 사용자 및 노드는 무엇입니까?




    
    Query{
    findClientsForSubscription(topicString: "my/topic"){
      subscription
      clients {
        nodeName
        userName
      }
    }
    }
    
    


    응답:

    
    {"data": {
      "findClientsForSubscription": [
        {
          "subscription": "my/topic",
          "clients": [
            {
              "nodeName": "Cloud Broker",
              "userName": "local-user"
            },
            {
              "nodeName": "Local Broker",
              "userName": "default"
            }
          ]
        }
      ]
    }
    }
    
    


    결론



    이벤트 메시는 이벤트를 의도한 목적지로 동적으로 라우팅하는 강력한 플랫폼입니다. GraphQL은 이벤트 메시에 대한 특정 질문에 대한 답변을 찾는 데 도움이 되는 매우 강력한 쿼리 언어입니다.

    게시물 Using GraphQL to Query the State of Your Event MeshSolace에 처음 나타났습니다.

    좋은 웹페이지 즐겨찾기