In this blog post, I will explain how you can leverage the power of GraphQL’s extensible API model to better understand the architecture and state of your event mesh. An event mesh is an interconnected network of event brokers that distributes events among decoupled applications, cloud services and devices, anywhere in the world and running in any cloud, edge or on-premises environment.
Here’s the high-level architecture of an event mesh:
In this diagram, you have a network of Solace PubSub+ Event Brokers deployed on-prem, in public clouds, and even in a private cloud. They link together via a protocol called dynamic message routing (DMR). The key thing to understand about DMR is that events will only get routed to where they need to go without the need to pre-define the path or the routing rules.
For example, if you have an Apache Beam\Google Cloud Dataflow microservice producing an event in Google Cloud Platform and you want it to be routed to a microservice in AWS, all the microservice in AWS has to do is express interest in the Beam\Dataflow event via a ‘Topic Subscription’.
A core component of the event mesh is the event broker. Solace’s PubSub+ Event Broker is a multi-protocol event broker that comes in multiple form factors – hardware appliances, software, and as a service. The event broker handles client connectivity to the event mesh and also routes data to the neighboring nodes in the event mesh.
Every PubSub+ Event Broker exposes a REST-ful management interface – called the Solace Element Management Protocol (SEMP) – that gives you access to various internal statistics and administrative functions for the event broker.
For example, by running a SEMP query against a broker, you can figure out which IP-Addresses/users are connected to the broker. Another query will give you an understanding of which Topic Subscriptions are active on a broker.
Solace has monitoring solutions, such as Solace PubSub+ Monitor and PubSub+ Insights built on top of the SEMP API and along with gathering logs, but we will be using GraphQL to extend the SEMP API.
By taking advantage of the SEMP API, you can periodically poll all the nodes of your event mesh to store statistics in a database. You can then use a GraphQL server to front the results of the database and can build out an expressive API that will allow you to answer questions such as :
I’ve written a basic Node application that queries nodes of the event mesh and store it in a database using Prisma – a powerful JavaScript ORM library. I also wrote a GraphQL server that exposes the tables in Prisma via GraphQL. The utility currently stores and exposes client and topic subscriptions but can easily be extended to cover more use cases.
You can find the GitHub repo/setup instructions here.
Here are some sample queries and the results that you can get with this application stack:
query{ findClientsForSubscription(topicString: "my/topic") { subscription clients { nodeName } } }
Result:
{"data": { "findClientsForSubscription": [ { "subscription": "my/topic", "clients": [ { "nodeName": "Cloud Broker" }, { "nodeName": "Local Broker" } ] } ] } }
Query{ findClientsForSubscription(topicString: "my/topic"){ subscription clients { nodeName userName } } }
Response:
{"data": { "findClientsForSubscription": [ { "subscription": "my/topic", "clients": [ { "nodeName": "Cloud Broker", "userName": "local-user" }, { "nodeName": "Local Broker", "userName": "default" } ] } ] } }
An event mesh is a powerful platform that dynamically routes events to their intended destination and nowhere else. GraphQL is a very powerful query language that is able to help you find answers to specific questions about your event mesh.