Loosely Coupled - Exploring Publish-Subscribe (EDA)
Karol:
Good morning, good afternoon, good evening, everybody.
Karol:
Hope you all have a time of day appropriate beverage.
Karol:
And I'm very sorry for today's delay.
Karol:
We were supposed to start at 7 p.m. Central European summertime.
Karol:
But, due to unforeseen consequences of various weather problems in North America where Aaron is currently residing, and, well, his flight from Chicago to Ottawa was cancelled, so he was, what, delayed, I think, over, definitely over 15 hours in his arrival to Ottawa, so we're a little bit late.
Karol:
Luckily, Aaron is with us today, and, today, we're diving into a very lovely topic being event-driven architecture, one of my favourites in terms of interoperability, and, with Aaron, we will be diving into publish, subscribe.
Karol:
For those who don't know, Aaron is a solutions engineer with Solace, a very, very, very good event broker, I think one of the best on the market at the moment.
Karol:
He used to be a developer advocate for Solace, so a lot of talking with a lot of people, and also, Aaron is running office hours, Solace office hours with, well, with Aaron, obviously, and if you haven't seen those, they're available on the Solace channel on YouTube, and, without further ado, hello!
Aaron:
Hey, everybody, hey, Carol, how's it going, man?
Aaron:
I was quite surprised that you wouldn't make it!
Aaron:
I, it was touch and go there for a while.
Aaron:
The last 24 hours has been, you know, planes, trains, and automobiles kind of excitement, so I'm glad I literally just landed at the airport about half an hour ago, and I just drove up home, and I jumped out of the car, I ran upstairs, and I booted up my laptop, and that's it, so I'm, I'm fresh off the plane.
Aaron:
Yeah, there was a bunch of, I was in Chicago for Monday and Tuesday for some training with one of our prospects, and then, yeah, a bunch of storms came through, so all these flights got cancelled and messed up Tuesday evening.
Aaron:
I'm sure that was probably quite a few places across the eastern part of the Canada and US.
Aaron:
Anyway, rebooked this morning via Montreal, so anyway, I'm warm and happy to be here, so yeah, thanks for having me.
Karol:
So, if you mind me asking, what's the weather like now in Ottawa, in North America in general?
Aaron:
The car said it was 31 degrees on the way home.
Aaron:
It's quite warm, quite humid out there.
Aaron:
That's typical summer, kind of August weather, usually anywhere from kind of like upper 20s to low 30s, and yeah, humid, humid is quite standard for this part of the world, so yeah, summer times.
Karol:
So, pretty much like right here in the Netherlands, humid and warm.
Karol:
I've been sweating all day.
Karol:
It's been just a sunny all day and horrendously hot, so with this humidity, it's, oof.
Aaron:
Yeah, yeah.
Aaron:
Do you have aircon in your house there?
Aaron:
Okay, yeah, yeah, yeah.
Aaron:
I'm on the top floor, and it doesn't really reach up here, so I got a fan I can put on if I need to.
Karol:
Yeah, I have a fan as well.
Karol:
I just put it in the window, and it's just venting air all the time, and it kind of works, but otherwise, oof.
Karol:
It's difficult to work at times because of the temperature, but global warming.
Karol:
We'll do what we can.
Karol:
That's all right.
Karol:
We do what we can.
Karol:
All right, so we have a lovely evening today with Event Driven Architecture, but first maybe, because some of the audience might not know you, so tell us something about what you do.
Karol:
I see you already have the appropriate t-shirt on.
Aaron:
I changed.
Aaron:
I changed.
Aaron:
I have to do a little bit of branding for this.
Aaron:
Obviously.
Aaron:
There we go.
Aaron:
Nicely done, yeah.
Aaron:
So, Carol's written this whole implementation agnostic course, and I guess I'm on the other end of that, right?
Aaron:
I'm very biassed about how we think implementations should go, within reason.
Aaron:
Yeah, so I'm Aaron.
Aaron:
Aaron Lee.
Aaron:
I work for a company called Solace.
Aaron:
We're based in Ottawa, Canada, headquartered here.
Aaron:
That's where I'm from, but yeah, for the last eight years, I've been living in Singapore.
Aaron:
I was doing a role of a developer advocate, where we kind of do a lot of developer events, workshops, tutorial samples, hackathons.
Aaron:
I make a lot of YouTube videos.
Aaron:
Perhaps if you've ever seen the Solace YouTube channel, I have a few on there.
Aaron:
I do a monthly office hours, most months, not every month.
Aaron:
And I have another, my one in two weeks is going to be all about our event portal and all the new features that we've been building on that.
Aaron:
So, we're overdue for an update on Solace event portal.
Aaron:
And yeah, so as of now, I'm a solutions engineer, pre-sales role, where as part of the sales team, I'm the technical person who might go in and do a proof of concept, kind of do the hardcore technical presentations that sales people don't want to do.
Aaron:
So, that's my current role.
Aaron:
And yeah, been at Solace 14 years.
Aaron:
Check us out, Solace.com.
Aaron:
We are a publish, subscribe, event-driven broker.
Aaron:
And that's why I guess why I'm here today, to talk a little bit about how we do things and maybe contrast it to some other viewpoints.
Aaron:
I mean, Carol, from our very first time we had a conversation, I think it was via the talk to your dev advocate kind of like feedback link there.
Aaron:
We've had like hour, hour and a half, two hour long conversations that were like, this could easily just be a podcast.
Aaron:
Like our conversations just turn into this anyway.
Aaron:
So, now we're making it official, I guess.
Karol:
Yeah, that's very true.
Karol:
That was the idea in one of our conversations.
Karol:
We've been chatting on and off, what, over a year now.
Karol:
Every once in a while, just popped on a call.
Karol:
You eating your late night dinner in the office in Singapore.
Karol:
And yeah, me just sitting midday or late afternoon, just having a conversation about event-driven architecture, different patterns, use cases for different architectural styles or well, ecosystem architectural styles to be precise.
Aaron:
Let's hope other people find it as interesting as we do talking about this stuff.
Karol:
I mean, there are nerdy people on LinkedIn and YouTube that enjoy these kinds of conversations.
Karol:
So, I hope they do.
Karol:
But speaking about architectural styles, one thing that I really find interesting in terms of, and that's not only marketing-wise, but positioning-wise in terms of Solace.
Karol:
Solace at this point, I think is the only event broker on the market that actually positions itself as a product.
Karol:
The company positions the product as a piece of technology that can solve ecosystem problems.
Karol:
Because if people think message broker, event broker, a lot of people think that it's in a context of a singular system.
Karol:
So, internal messaging within a system.
Karol:
Sometimes they think about it, maybe hooked up to a integration platform like Boomi, MuleSoft, Tibco BusinessWorks, something like that, to facilitate that asynchronous communication or a little bit of a fake load balancing through queues.
Karol:
Whereas those message brokers typically use with those, they do not have that kind of philosophy there that they're actually solving ecosystem-wide problems.
Karol:
Whereas time and time again, when I see any presentation from Solace, that's a large distinction there that anybody who I watch from Solace, especially from the CTO office or field CTO office, they always talk about ecosystem problems.
Karol:
They always talk about the scale that is way beyond the singular system, addressing different
Karol:
domains, addressing different business processes, addressing organisational issues to a certain
Karol:
extent, and addressing the way of thinking in terms of thinking about your business in
Karol:
a manner that it's not just request reply processes and we're just going to put that
Karol:
in a system, put that in an ERP, and we're going to be great.
Karol:
Or CRM, right?
Karol:
No, it's addressing that way of thinking about the business itself.
Karol:
And that's the differentiator there, for me, at least.
Aaron:
It's a paradigm shift.
Aaron:
Solace came from capital markets, trading platforms.
Aaron:
They've been dealing with this on-demand, publish-subscribe, event-driven style of data movement because you have to be as real-time as possible.
Aaron:
When a price changes, that tick needs to get sent right to my trading platform or my trader or my dashboard or whatever.
Aaron:
I want to see that real-time.
Aaron:
You're not pulling these things.
Aaron:
And so they've kind of come from that.
Aaron:
They've existed in this world for a long time.
Aaron:
And now, as all these other industries are kind of slowly becoming IT companies, like I mean car manufacturers and manufacturing, and everybody's an IT shop now.
Aaron:
And their kind of legacy way of integration, database at the centre of everything, kind of everything goes into a database, everything comes out, it has to modernise.
Aaron:
We need more real-time data access to our inventory.
Aaron:
Customers want more real-time access to their information.
Aaron:
And I guess, again, I'm a bit biassed, but Solace views itself as just an extension of your network.
Aaron:
So whenever you have to send anything over the network, you could make it better by going on Solace in some way or another.
Aaron:
Maybe not every single thing, but that's the way I do think about it.
Aaron:
We enhance your TCP communication with more stateful connections, broadcast, unicast.
Aaron:
You can do fan out.
Aaron:
I mean, anytime you want to send a file from one server to another, you could send it over a Solace event broker or a message broker event process.
Aaron:
It could go to other places, right?
Aaron:
It could be, if your downstream system is not there, we could persist it temporarily until that downstream system comes online.
Aaron:
It's unlocking a lot of patterns and interesting things that are fundamental to how a business operates.
Aaron:
And so it's not just one little piece of integration or one little message bus between apps.
Aaron:
It needs to be, I think, a shift in how you think about your business operating and the data that's flowing around, getting out of these silos, moving data everywhere with guardrails, of course, ACLs, things like that.
Aaron:
So people can't subscribe to anything.
Aaron:
Anyway, that's...
Karol:
Remind me, because I'm not sure if I remember this correctly.
Karol:
Did Solace actually originate from more of a hardware broker?
Aaron:
Yeah.
Aaron:
Yeah.
Aaron:
So a bit of history.
Aaron:
I mean, yeah.
Aaron:
So Solace was a hardware company for many, many years.
Aaron:
We built a purpose-built appliance, FPGAs, network processors.
Aaron:
There was a Linux OS on there, but only to run the control plane with our monitoring and watchdogs.
Aaron:
And the entire data path was all hardware.
Aaron:
So we got very high-performance numbers.
Aaron:
And this is, I think, why the investment banks like this so much, because we do microseconds of latency from your API, say, send a message to go through the network into the router, the Solace broker, get routed to who it's going to go to, and back into the subscriber to the API receive.
Aaron:
That we do in about 18 to 20 microseconds.
Aaron:
So that's fast, right?
Aaron:
Not everybody needs that level of performance.
Aaron:
Investment banks like it.
Aaron:
You know, the average person, a millisecond is probably real time, right?
Aaron:
So for them...
Karol:
I think that's the core aspect of that background, the trading markets, the financial world.
Aaron:
That's half of it.
Aaron:
That's half of it.
Aaron:
A lot of the founders of Solace came from IP networking backgrounds.
Aaron:
So they viewed this as a kind of a network-level-up solution rather than an application-to-application integration.
Aaron:
You know, they didn't view messaging or brokered communication as an application thing.
Aaron:
They viewed it as a networking thing.
Aaron:
So our DNA, a lot of our original founders and people that worked early on came from IP switching, quite a few patents around TCP and stuff like that.
Aaron:
So yeah, it's in the DNA of Solace, I guess.
Karol:
And now it clicks for me.
Karol:
Now I understand why certain aspects of the rhetoric and certain terms used in different presentations from Solace do not exactly match my understanding of interoperability from a perspective of application integration, because if you take that from a perspective of networking, yeah, that's completely different.
Karol:
But that's a very narrow aspect of what we do in IT.
Karol:
The network infrastructure, it's a very, very, very narrow element, whereas...
Aaron:
It is.
Karol:
But everybody uses it, right?
Karol:
Obviously, but it's the one thing that I always say when discussing that narrative.
Karol:
The misuse of the word decoupled.
Aaron:
I was thinking about this on the plane.
Aaron:
I was like, what are we going to talk about today?
Aaron:
And I hope we do.
Aaron:
I'm sure we're going to get around to talking about decoupling, because you and I have somewhat similar and somewhat different ideas on this word.
Aaron:
So yeah, I do want to jump into that in a little bit.
Karol:
Let's jump straight into that.
Karol:
So I had a lot of discussions about coupling and decoupling.
Aaron:
Can I just say that we're not a hardware company only, by the way.
Aaron:
Some people, some of our old customers don't actually know we have a software product.
Aaron:
So when cloud finally started to become a real thing, we virtualized our appliance into a software broker.
Aaron:
So it's a Docker container.
Aaron:
You can run it on prem.
Aaron:
You can run it on your laptop.
Aaron:
I got one right here.
Aaron:
You can run it in whatever cloud you want.
Aaron:
We have Kubernetes, Helm charts, and all sorts of stuff.
Aaron:
And we have a fully managed SaaS offering as well, where basically, rather than having to run our software broker yourself, you can just go into Solace Cloud and say deploy.
Aaron:
So we have three different kind of flavours, I guess, of running a Solace broker, right?
Aaron:
So we're not only hardware, just for the record.
Karol:
See, I wouldn't ever know about that hardware part, because I know Solace only from the actual application part, the software part.
Karol:
Hi, Stefan.
Karol:
Nice to see you again.
Karol:
Hello.
Karol:
Hello.
Karol:
So yeah, let's jump straight into that coupling, because when I was researching for the architecture course that I was designing back a year ago, a very important topic was how to cover coupling in such a complex environment as application integration and integration platforms.
Karol:
Because that's difficult.
Karol:
And the biggest struggle was how to actually define coupling properly.
Karol:
And at one hand, I had the narrative of something coupled-decoupled, which was very common, to which I didn't really subscribe.
Karol:
And I still don't like the word decoupled, if we're talking about two systems that are communicating.
Karol:
And on the other hand, I have read the book from Vlad.
Karol:
Now, I'm going to blank out and forget what was Vlad's last name.
Karol:
I'll look it up in a moment.
Karol:
Sure.
Karol:
He's known for DVD books and balancing coupling in software design, I believe.
Karol:
Kononov?
Karol:
Quick check.
Karol:
Yes, Kononov.
Karol:
So he wrote the book on coupling.
Karol:
That took him about five years to do research and write that book.
Karol:
All right.
Karol:
And I get it, because coupling is such a complex topic.
Karol:
Extremely complex.
Karol:
And on various levels, in a singular piece of software, on an ecosystem level, in communication, in terms of understanding network and beyond the network, etc.
Karol:
So it's very complex.
Karol:
But yet, there is this notion in a lot of architects that they say, well, we're decoupling things.
Karol:
Sure.
Karol:
And that's problematic for me.
Karol:
And I know that Solace uses this rhetoric extensively.
Karol:
And I talk to a lot of architects from Solace.
Karol:
And we agree and disagree at the same time.
Karol:
And here's the thing that I figured about coupling.
Karol:
It has a dual nature, just like light.
Karol:
OK.
Karol:
Did you ever hear me talk about this analogue there?
Karol:
This one specifically?
Karol:
I don't think so.
Aaron:
I don't think.
Karol:
OK.
Karol:
Yeah.
Karol:
So let's see if you agree.
Karol:
OK.
Karol:
My take on coupling, it can be binary.
Karol:
So something being either coupled or decoupled, which basically means two pieces of software either communicate or not.
Karol:
OK.
Karol:
And then it's on a spectrum, can be tightly coupled or loosely coupled if they communicate.
Karol:
OK.
Karol:
And if I look at an event broker, for me, it's a tool as an architect to provide a loosening of a coupling in communication.
Aaron:
OK.
Karol:
What's your take then?
Aaron:
So in general, I agree.
Aaron:
But I think you're going to like this.
Aaron:
I've kind of come to the realisation that the term coupling, it doesn't refer to just a singular variable or dimension.
Aaron:
It's multidimensional.
Aaron:
It's in terms of direct communication.
Aaron:
It's in terms of time.
Aaron:
It's in terms of data formats.
Aaron:
It's in terms of knock-on effects that maybe you actually uncouple something, which produces more coupling somewhere else.
Aaron:
So it's all about, if we're talking patterns, there's always balances and constraints and things that trade off.
Aaron:
So yeah, I have two slides I want to flash up real quick.
Aaron:
Can I do that?
Aaron:
Is that allowed?
Karol:
Absolutely.
Aaron:
If people are only listening, I just I'll have to talk to them.
Aaron:
But let me click share my screen here.
Aaron:
And hopefully this will come up there.
Aaron:
Let me know if you can.
Aaron:
Yes.
Aaron:
Because I'm going to talk briefly about the publish subscribe pattern.
Aaron:
But before I do, I just want to mention this one here, the observer pattern.
Aaron:
I learned this in second year university when I was doing a C++ course.
Aaron:
And I got some nice UML.
Aaron:
Who does UML anymore?
Aaron:
I don't know.
Aaron:
But that's, oh, really?
Aaron:
Sequence diagrams, maybe.
Karol:
Sequence diagrams all the way.
Karol:
I wouldn't be able to describe what I do without sequence diagrams.
Karol:
That's a must.
Aaron:
All right.
Aaron:
So the observer pattern is basically you have a subject and an observer, right?
Aaron:
The subject is the thing you want to watch.
Aaron:
Think of a button on a GUI, right?
Aaron:
Typical example.
Aaron:
And you want to know when that thing has changed state, right?
Aaron:
You want an event when it's changed state.
Aaron:
So you will register yourself as an observer to that subject.
Aaron:
So I go to the button.
Aaron:
I say add me as an event handler.
Aaron:
Run this method whenever you change state, right?
Aaron:
So that's what this register unregister is.
Aaron:
And then when the subject changes state, he looks through his collection of observers and notifies them that something has changed.
Aaron:
So, you know, your callback gets fired saying, hey, the button has been clicked.
Aaron:
Because imagine designing a GUI where you have to pull every single element in that GUI to find out if it's changed state.
Aaron:
Like in a huge loop, you have hundreds of elements.
Aaron:
That's an insane way to design a GUI, right?
Aaron:
So GUIs are by nature event driven in the sense that they notify you when you scroll it, when you move the window, when you click something, right?
Aaron:
That's all being event driven.
Karol:
Yeah.
Karol:
A lot of the functions are on something.
Karol:
On click, on hover, on...
Aaron:
Yeah.
Karol:
So that's your event, right?
Aaron:
So that the button has been clicked.
Aaron:
So publish subscribe is a kind of a decoupled version of this.
Aaron:
So if I just go forward two slides, like we...
Aaron:
So think of publish subscribe very similar to the observer pattern in the sense that I need to notify when something has changed, right?
Aaron:
So the observer is the subscriber of this data.
Aaron:
You're the consumer of the event.
Aaron:
The subject, the thing that's notifying people downstream is that it's going to be...
Aaron:
It's the producer.
Aaron:
It's the publisher of this data.
Aaron:
One, in terms of coupling, like if you look at the observer pattern, the subject has this collection of observers, right?
Aaron:
So it's the responsibility of the subject to have to go and tell all these observers.
Aaron:
It needs to keep a list of them.
Aaron:
It needs to maintain that.
Aaron:
It's the one that's doing the calling of this method, this update method.
Aaron:
So there's a coupling there, right?
Aaron:
Because the subject now has to keep track of these guys.
Karol:
So if I'm a pitch, that would be the equivalent of an application that needs to notify something without having it with some sort of an async communication.
Karol:
Basically, the subject would be doing a request reply to each one of them.
Karol:
Something like that.
Aaron:
Yeah.
Aaron:
It could be a UDP.
Aaron:
It doesn't have to be a request reply.
Aaron:
I mean, maybe if you don't get the update, it's not the end of the world, right?
Aaron:
But if you want to make sure that everybody got it, it would have to be some kind of acknowledgement coming back.
Aaron:
And so as this scales out, what if this is like a thousand things?
Aaron:
Now the subject has to do all this work every time it clicks its button to notify everybody.
Aaron:
So there is this coupling there in that sense of responsibility.
Aaron:
Whereas with the brokered, the published subscribe pattern, as implemented with a broker, an event broker like Solace, is that they are decoupled in the sense that they all connect into this broker and the broker is doing the responsibility of messaging, of notification to the different people, right?
Aaron:
And the individual producers don't have to know how many subscribers there are out there.
Aaron:
It just sends one message into the broker.
Aaron:
The broker is keeping track of all that.
Aaron:
And the consumers don't have to know where is this producer?
Aaron:
Where is this button that's being clicked?
Aaron:
As long as I get the event, that's all that I care about.
Aaron:
And so that's a decoupling, right?
Aaron:
That my consumers and producers don't have to know about each other.
Aaron:
They can be lots of them or very few of them and it doesn't really change anything.
Aaron:
So that's one.
Aaron:
And the second one that I have there you can see is temporally.
Aaron:
If your broker has persistent storage, obviously, if one of your consumers is offline, maybe it's a database and it's getting rebooted because you did an upgrade.
Aaron:
Your broker can store that stuff and the producer does not get impacted.
Aaron:
Like if I'm trying to write to this database and it goes away, now I'm stuck trying to write to this database.
Aaron:
But if you put it into an event broker in the middle and the database goes away, the broker is like, all right, I'll just buffer this temporarily.
Aaron:
Bless you.
Aaron:
And then it'll go out.
Aaron:
So in this specific way, not talking about data, not talking about schemas, event brokers can decouple quite architecturally and temporally.
Karol:
On the two characteristics of the spectrum, basically.
Karol:
Yeah, but there's more to that.
Karol:
So I took the learnings from Vlad Kononov that I found.
Karol:
By the way, if you would want to read the book, here's the QR for the book at O'Reilly right there.
Karol:
So check it out.
Karol:
That's a really, really good book on coupling.
Karol:
If you want to understand coupling, I think that's the easiest explanation ever in a context of software design and development.
Aaron:
Does it talk about decoupling as well, or is it only about coupling?
Karol:
It talks about loosening the coupling, not decoupling.
Aaron:
Okay, all right, all right, cool.
Aaron:
We can take a slide down there, Carol.
Aaron:
I just wanted to flash those two.
Karol:
All right, all right, all right.
Karol:
Oh, nope, not this one.
Karol:
Other way, other way.
Karol:
Nope, nope.
Karol:
See, this is my- Too many buttons, there we go.
Karol:
Too many buttons and not yet that familiar with the studio.
Karol:
But I just had to turn off your screen, and that's fine.
Karol:
So if we're considering coupling on the spectrum, and I absolutely agree that if we're looking at message brokers in general, or Solace as an event broker, message broker, yes.
Karol:
If we add to that guaranteed delivery and the temporary persistence of in JMS, this would be queues, or in topics, it would be the durable subscriber.
Karol:
Yeah, and then also the same kind of configuration for AMQP and other relevant.
Karol:
We're working here on the level of temporal coupling due to that persistence.
Karol:
And then that's a good question.
Karol:
I think that would be the interaction coupling in terms of who's interacting with who.
Karol:
Because now we enable, because we have that temporary persistence in middle and that mediator in terms of communication.
Karol:
Now we can have one-to-one, one-to-many, many-to-one, and many-to-many.
Karol:
And those systems on both sides, they have no idea who's talking to who.
Karol:
That's right.
Karol:
We're obfuscating that knowledge through that mediation over a message or event broker.
Karol:
That's right.
Karol:
But there are other types of coupling.
Karol:
And for the purpose of ecosystem architecture, we divided them into architectural or operational.
Karol:
So there's many.
Karol:
And some of them are solvable on the level of an event broker.
Karol:
Some of them are completely not solvable on the level of an event broker.
Karol:
So if we're talking, for example, a pure JMS broker, like let's say Tibco EMS, a very old-school message broker, it implemented only JMS. Right?
Karol:
So at this point, we already had this kind of a, not conversation coupling, but that was more of a technology coupling, protocol coupling, right?
Karol:
Because both systems communicating, let's say, only two are communicating through that broker at this time, both are forced to be protocol-specific.
Karol:
So they're already coupled by technology and by the protocol.
Karol:
Okay.
Karol:
In comparison, that's not a problem for the Solace event broker, because Solace implements multiple different protocols.
Karol:
So JMS, AMQP, you can access the topics via REST, etcétera.
Karol:
MQTT, yeah.
Karol:
Yeah, MQTT, that makes it another degree of coupling that's dismantled by the way the broker is implemented, right?
Karol:
This makes it easier.
Karol:
But we still have the problem, and this is a typical event-driven problem, that we have contract coupling in the terms of what is the scope of data.
Karol:
And we still have a data model and data format coupling, well, data type and data format coupling, because contract coupling covers model.
Karol:
Which is basically, if we take just an event broker, it's unsolvable by an event broker, because event broker would have to parse the payload to be able to resolve that coupling.
Aaron:
Yeah, it's outside of our scope.
Aaron:
It's above our layer.
Aaron:
So it might be.
Aaron:
Coming from this networking thing, right?
Aaron:
Like we don't want to be messing around with payloads.
Aaron:
The hot path, we're just the transport among applications.
Karol:
Absolutely.
Karol:
And then last of all, you always have semantic coupling, which is something we want.
Karol:
This is the type of coupling we need to have.
Karol:
If we don't have semantic coupling, that means we're doing something very wrong, because that means we don't understand what data we're moving from point A to point B.
Aaron:
Define what you mean by semantic coupling.
Karol:
The generalised understanding and meaning of transfer data, both business and metadata, on the level of users, business process, purpose of use, etc.
Karol:
That's the semantic understanding of the instantiated piece of a payload.
Aaron:
We all agree what this thing is about, right?
Karol:
Exactly.
Karol:
We want to understand what it's for and what it's about.
Karol:
Otherwise, we're doing something very wrong in our IT ecosystems, that we're moving data, but we're using it outside of the scope of what it means.
Karol:
This happens quite a lot, actually, and it's a horrendous thing to resolve, because that leads to a lot of problems, and not in IT, but in business in general.
Karol:
But this is the type of coupling we actually want to have, and the rest we need to either mitigate or handle.
Aaron:
Be aware of, at least, at the very least.
Aaron:
It's about choices.
Aaron:
And thinking about from the data perspective, I don't have as many strong opinions as you do.
Aaron:
I know some installers have considered this more.
Aaron:
As we've slowly started to move up the stack, we released our micro-integrations.
Aaron:
We do not want to be a full-blown integration platform.
Aaron:
We have partners, and there's really good products out there that we don't want to do that.
Aaron:
But for tiny, little, simple flows, maybe you don't need a whole-blown platform.
Aaron:
We have these micro-integrations just to do a little bit of...
Aaron:
It's like a connector that has some transform capabilities.
Aaron:
So people that have been working on that might have more things to say about data, data formats.
Aaron:
I just always thought it should be like Star Wars, where you can speak whatever...
Aaron:
As long as you can understand, you can speak your own language.
Aaron:
You don't have to all speak one common language.
Aaron:
So it's more about the...
Aaron:
Would that be Star Wars or more like Star Trek?
Aaron:
No, Star Wars, man.
Aaron:
So Han Solo is speaking English, and Greedo is speaking whatever language.
Aaron:
But they can each understand each other, right?
Aaron:
So everybody else is speaking...
Aaron:
Yeah, everybody speaks their own language.
Aaron:
And as long as you can understand, if everybody can understand every language, nobody needs to speak more than one.
Karol:
All right, but you mentioned a very interesting feature provided by Solus being the micro-integrations.
Karol:
Because we talked about micro-integrations quite a bit in our sessions and also where we met some time ago.
Karol:
I'll put them a little bit in the context because that's an interesting...
Karol:
In general, an interesting feature in solving some very important problems in terms of EDA problems, which are, well, not native to EDA.
Karol:
So if you ever consider publish-subscribe
Karol:
in a context of one-to-many,
Karol:
and this is something I, at first,
Karol:
I have had troubles absolutely understanding
Karol:
because me coming from service-orientated world,
Karol:
where you have three layers of abstractions,
Karol:
you have an integration platform,
Karol:
you have the message broker in there,
Karol:
and you have those abstraction layers
Karol:
that are responsible for things,
Karol:
and I did not realise that they actually mitigate
Karol:
the EDA problem of publish-subscribe,
Karol:
the problem being security.
Karol:
Okay.
Karol:
If we do broadcasts, publish-subscribe, one-to-many, the mechanism itself, it's secure because every message broker, Solus included, has ACLs, only those that are on the access list, only those can access the structures and actually read the messages from topics.
Karol:
Perfectly fine.
Karol:
Sure, yeah.
Karol:
The problem with using this pattern, publish-subscribe in general, the security problem doesn't come from the transport mechanism itself, it comes from what is the result of that.
Karol:
And the typical even driven architecture result of that is that every subscriber receives exactly the same payload.
Karol:
Sure, yeah.
Karol:
Now, imagine you're sending GDPR-restricted data or whatever is the equivalent in North America, I don't really know the names for those privacy laws.
Aaron:
Privacy stuff, yeah, I don't know.
Karol:
Privacy-restricted data.
Karol:
So let's say employee data, healthcare-related data, etcétera.
Karol:
Sure.
Karol:
And you're doing this via publish-subscribe.
Karol:
Yep.
Karol:
So that means that every subscriber gets exactly the same set of data.
Karol:
Yep.
Karol:
Where they actually probably, for their business purposes, they actually probably need a subset.
Karol:
So while they, let's say, persist and save in their databases that subset, well, that data still arrived there.
Karol:
Arrived, meaning that it was probably at least logged somewhere in the log.
Aaron:
It could have been looked at, yeah.
Aaron:
If you send something, it could have been looked at, right?
Aaron:
By any kind of, yeah.
Karol:
Exactly, and now imagine one of those systems is compromised by whatever means.
Karol:
For example, a disgruntled employee just copied all the logs from that system and that system never was sufficiently updated to anonymise logs.
Aaron:
Yep.
Karol:
And now we have a humongous leak of personal or healthcare-related data somewhere.
Karol:
And this is the problem that is a consequence of using publish-subscribe.
Karol:
Now, the interesting part to put the micro-integrations into context is that while all the message brokers will have that problem with publish-subscribe, Solace is actually actively solving that problem by introducing micro-integrations.
Karol:
Because if you have micro-integrations, you can trim down that scope to the exact need to know.
Karol:
Now, the absolutely funny thing, and analogous in my head from the perspective of service-orientated architecture, that is exactly the responsibility of the adapter layer in API-led architecture.
Karol:
This is what adapters do in front of systems when those adapters subscribe to topics and then translate that to those particular systems.
Karol:
So if you put micro-integrations in the context of an integration platform in API-led architecture, micro-integrations serve as the channel or adapter layer.
Karol:
In this architecture, right?
Karol:
Sure.
Karol:
So contextually, they take that responsibility and they resolve certain pain points of pure event-driven architecture.
Karol:
And that's the very interesting part which none of the event and message brokers address at all, because they never look at it from a perspective of an ecosystem and the ecosystem problems.
Karol:
They look at it from a perspective of communication and protocol or transport.
Aaron:
Yeah, well, that's what I was thinking.
Aaron:
Like, I've never thought of it as from a security perspective, but you're absolutely right, where if you are sending something, the full payload, maybe some of these consumers don't need that full payload.
Aaron:
The typical way to do that would have been like a kind of a double publish, right?
Aaron:
You kind of read that message coming in, you might format the payload.
Aaron:
But again, this is outside the scope of the broker itself, right?
Aaron:
You need to kind of go, yeah.
Aaron:
But I will say, unlike some other brokers that are out there that people use, we do have a very, I wouldn't say complex.
Aaron:
We have a very smart topic system design for doing routing and filtering in the broker itself, right?
Aaron:
Going back to your comment on ACLs, we have topics that are very granular.
Aaron:
They're multi-level, they're hierarchical, you know, with a slash between each level where you can specify on a level-by-level basis, certain identifiers, certain keywords to describe what's actually inside the payload of the message.
Aaron:
And so as a subscriber, you can be very specific or very coarse-grained or fine-grained.
Aaron:
You can use wildcards on a particular level.
Aaron:
I want all data from all regions or I only want UK data, right?
Aaron:
I'm subscribing to slash UK slash da-da-da-da-da or this particular company or this particular person.
Aaron:
I mean, depending on how you've built your topic structure using your ACLs and you're subscribing to your topics, you can be very selective about what data you want.
Aaron:
And the broker does that filtering for you.
Aaron:
It's not a big, fat, coarse-grained topic, which is like a log file of some other brokers that are out there where you actually have to read the whole topic in and throw away stuff that you don't want, right?
Aaron:
That's how they do filtering, is in client space.
Karol:
Now I see you're very, very, very careful about mentioning specific names.
Aaron:
No names, no names, of course, no.
Aaron:
But it's just a different way of doing things, right?
Aaron:
So for certain use cases, you want that full feed most of the time.
Aaron:
So that's probably great.
Karol:
And this is a very EDA way of doing it, very operational way of doing it.
Karol:
And most message brokers are operational message brokers.
Karol:
Yes, there are those log brokers, which shall not be named.
Karol:
But yeah, but see, this is a very good distinction there in terms of security.
Karol:
In JMS, you could also apply that kind of filtering.
Karol:
In AMQP as well, you can apply that kind of filtering.
Karol:
I'm not familiar with AMQP-1.
Karol:
AMQP doesn't, yeah.
Aaron:
Well, so Rabbit, Rabbit, AMQP-091, which is Rabbit.
Aaron:
Rabbit MQ.
Aaron:
Only, Rabbit only.
Aaron:
Yeah, yeah.
Aaron:
So you can use a key exchange and...
Aaron:
Routing key.
Aaron:
Routing key, that's it, yeah.
Karol:
Yeah, and in JMS, you could have used selectors on subscribing to a topic or on bridging, bridges between topics and topics, topics and queues, whatever that may be.
Karol:
EMS has hierarchical topics as well.
Aaron:
It's just people don't use it quite...
Aaron:
The way they've implemented it is a little bit different than Solace, but you can do similar.
Aaron:
Just the closest analogue, if people know MQTT, it's very similar to that, right?
Aaron:
In terms of the hierarchical topic structure, very dynamic topics.
Aaron:
You know, publishers specify on each message what that topic for that message is going to be.
Aaron:
It's metadata.
Aaron:
It's not a thing.
Aaron:
It's not an object that I've created on the broker.
Karol:
But the problem with that kind of URI approach is that, of course, we're tending a little bit to security because now the subscriber does not get the full funnel of all the data published into that format, whatever the variables may be in that format.
Karol:
It's securing the subscriber on a level of volume of that data, not on the level of payload.
Aaron:
Well, yeah, yeah.
Aaron:
I mean, the broker can't know payload, right?
Karol:
Exactly.
Aaron:
It would have to be governed some other way that like, yeah, you should not be publishing secure payloads on these topics over here or something like that.
Karol:
Yeah, and that's exactly why either we need an integration platform in place or we need the micro integrations.
Karol:
If somebody doesn't want to invest in an integration platform because that's not a sufficient use case, then micro integrations are the answer there.
Karol:
And this resembles the very old style.
Karol:
There is a transitional architectural style between broker architecture and API led architecture, where basically you had those brokers that were handling that orchestration and everything.
Karol:
But that was all centralised.
Karol:
And somebody figured at a certain point, okay, let's add adapters that are deployed with those systems to do that small translation from a unified data model within the broker integration platform to the data model of that specific system and abstract the logic of that system in terms of data access.
Karol:
And this very much resembles what now Solace is doing with micro integrations in that sense.
Karol:
So there are plenty of very old school analogues to that approach.
Karol:
And these are all well proven analogues so the approach here with micro integrations solving that problem is also a very well proven approach for that smaller kind of uses where that kind of huge deployment of all those interoperability tools is required.
Karol:
And another analogous way to do it, and Solace is a very good broker to do that due to the implementation of REST, but also possible with other message brokers is to, instead of doing micro integrations, use an API gateway.
Karol:
Some API gateways enable a protocol mediation.
Karol:
Protocol mediation being that the gateway is the subscriber to a topic, pulling the data and then turning that communication into a REST call to a system on the other side.
Karol:
And this is exactly the same pattern.
Karol:
And now we have a race between different product vendors.
Karol:
Who can deliver that better?
Karol:
So we have the API management vendors that, oh, we can do protocol mediation.
Karol:
You can use any message broker and that's going to be fine.
Karol:
We have Solace with micro integrations.
Karol:
Hey, we delivered the same thing.
Karol:
Go with us.
Karol:
We have integration platforms and they say, yeah, use any message broker you want.
Karol:
We're going to be great with that.
Karol:
It's all a matter of balancing what are the fine grained requirements for interoperability.
Aaron:
And that's what maybe someone like a solutions engineer like myself might work with a customer to help identify those requirements and kind of figure out the best path forward.
Aaron:
There are times when Solace is not the best fit, you know, and I try to be honest.
Aaron:
I know the sales guys always want to sell lots of things, but I'll try to be like, all right, you might not need this particular thing or feature.
Aaron:
I do want to say micro integrations, people are like, why do you call them that?
Aaron:
It came from like microservices, right?
Aaron:
Like kind of a couple, like little small pieces of functionality.
Aaron:
We wanted to build some kind of way and more than just a connector, a lot of people still call them connectors.
Aaron:
It's the fact that there are connectors plus a transform in there, like you can configure within there.
Aaron:
You don't have to, it could just be a straight through connector, but you know, you want to, you know, our brokers, if you stick enough of them together, we call, you know, we call it an event mesh where data can just kind of flow around between different brokers on-prem or different clouds.
Aaron:
And we want to move that integration to the edge.
Aaron:
And that's why we're at it.
Aaron:
So micro integrations, just a little, it's a connector plus a little bit more smarts.
Aaron:
And yeah, that's microservice, micro integration.
Aaron:
It kind of makes sense.
Aaron:
I don't know.
Aaron:
I tried to get our PLM to call them Mintz, like M-I-N-T-Z, Mintz.
Aaron:
And then we could have like Mentos as like, you know, as our swag at conferences and stuff, but he didn't go for it.
Aaron:
I thought it was a great name.
Aaron:
So we call them M-I, we call them M-I-N-T-Z internally.
Aaron:
But Andrew, Mintz, I think Mintz is a great name.
Aaron:
So micro integration.
Aaron:
Oh man.
Aaron:
We got some questions popping up there.
Karol:
Oh yeah, this is a good one.
Karol:
I think this is very relatable to micro integrations, but I think that's a very different aspect.
Aaron:
Micro gateway.
Aaron:
Yes, yes we do.
Aaron:
Except nobody uses that, I think.
Aaron:
We built it for a customer for a use case that went away.
Aaron:
And so Solace, yeah.
Aaron:
So Solace is a multi-protocol broker.
Aaron:
It has our native protocol, which is the fully featured SMF.
Aaron:
You know, that's what we had for many, many, many years.
Aaron:
As AMQP and MQTT, these standards.
Aaron:
MQTT coming from IoT is made by guys at IBM.
Aaron:
MQTT, AMQP as well.
Aaron:
These standards got made and we implemented them in our broker.
Aaron:
But we also have, our broker can talk REST. Now we typically, I don't wanna say bash REST, but REST is not the most performant of protocols, right?
Aaron:
It's asynchronous, quite, it's not very compact.
Aaron:
It's point to point, it's a blocking call on the network.
Aaron:
So it's easy.
Aaron:
It's easy and simple.
Aaron:
Everything understands REST. And sometimes you just wanna like post somewhere, post one thing.
Aaron:
You know, you're not streaming hundreds of thousands of messages.
Karol:
So we have this ability to- I'll only argue on one thing.
Karol:
What's that?
Karol:
It still can be very performant.
Karol:
It's not very responsive.
Aaron:
Responsiveness is the characteristic.
Karol:
And this is coming from hours of discussions with Mark Richards and listening also to his partner in crime, Neil Ford, rant about it on different trainings.
Karol:
There is a distinction between performance and responsiveness.
Karol:
The distinction is, again, exactly about blocking and non-blocking communication, which you mentioned then.
Karol:
The communication can be still very performant and very low latency with a blocking communication.
Karol:
Sure, yep.
Karol:
But it's gonna be a lot better.
Karol:
The system is gonna be a lot better responsive when the communication is not blocking, which means that if we use asynchronous, the communication is, let's say, 25 milliseconds and we're done.
Karol:
If we use sync, we're always dependent on the response time of the system or the API in the back, right?
Karol:
So that accounts to, well, getting the call out, waiting for the response, and then processing that response, which is the whole thing can amount to various times, right?
Karol:
Not just 25 milliseconds needed to send out that message, but also the wait time and then to process the response.
Karol:
So we're literally blocking a thread in our programme to wait for that response.
Karol:
So the programme, if we would consider that programme having a single thread, becomes unresponsive.
Aaron:
Yes.
Karol:
So we're now, if we're doing async, now we're boosting the responsiveness because we're freeing up the resources.
Karol:
So it's not performance-wise.
Karol:
It's very close to performance because obviously it will somewhat impact that performance, but it's the characteristic is responsiveness, which is a very fun distinction.
Karol:
Not a lot of people actually go about to look at.
Aaron:
That's an interesting way of phrasing it.
Aaron:
But this is why some of these kind of micro-architecture, the microservice architectures that are built on REST, when they get into scale, they have to scale out their web server because every single call is a blocking, it's a socket that's being held open, right?
Aaron:
And if you have a chain of these things bouncing around between different microservices, you have all these web servers basically sitting around holding all these sockets open while the communication is kind of chained through a bunch of systems.
Aaron:
So if you can, I mean, there's also blocking at a programming level, right?
Aaron:
Like in my thread, blocking programming is often easier because if there's an exception or an error, I can deal with it right there because my thread stops and it either succeeds or I throw an exception and there's an error.
Aaron:
Asynchronous programming is more complicated because your error response might come on a different thread over there later, and now you have to somehow correlate it, right?
Aaron:
To build good high performance, high throughput systems is probably much more complicated than just writing simple rest posts here and there, right?
Karol:
Let's not get into the error handling in EDA.
Karol:
That's a topic we can talk more than one evening about because that's a very, very complex problem with the correlation aspect, error handling aspect, handling metadata to get all that to work.
Aaron:
It is.
Aaron:
I'll just say that at least log if you get an exception anywhere in your code, please.
Aaron:
Because I've done a lot of developer workshops.
Aaron:
I've done code reviews and people just code the happy path and here's some error handlers that you have to implement so at least you know if the broker or the API complains and some people just don't have any commented out.
Aaron:
So if you're a developer out there, just please log exceptions even if you're not acting on them just so you can debug them later, please.
Karol:
And if you wanna go better in terms of what you're building in terms of communication, always use some sort of a metadata use a message ID, correlation ID for your messages whether or not they are rest or asynchronous or asynchronous, it doesn't matter.
Karol:
Use the metadata because that's gonna help you then later with traceability, root cause analysis, finding that error, understanding what the hell happened in my system or my ecosystem.
Karol:
That's a very important thing that a lot of people forget about.
Aaron:
Well, there's standards for this stuff now, right?
Aaron:
There's open telemetry.
Aaron:
You know, it's I think the second biggest CNCF project after Kubernetes.
Aaron:
Like they've standardised with Zipkin and a bunch of other kind of like ways to do tracing and obviously in a restful architecture.
Aaron:
The nice thing about having a broker like an event broker like Solace is that all your communication goes through there, right?
Aaron:
So it's easy to monitor it, to like log things, to like watch communication as it goes.
Aaron:
When you have a bunch of distributed non-brokered communication like a restful architecture where everybody's just doing individual calls to unless you have something like Istio like a service mesh that can kind of monitoring and managing that.
Aaron:
How do you track data flying around between your architect, like your apps?
Aaron:
There's, it's very difficult, right?
Aaron:
So open telemetry allows you to insert these trace IDs, these span IDs, so that you can watch the hops of messages going around.
Karol:
And this is a very interesting use case going back to the original question that's micro gateways.
Karol:
And I'm now trying to see if I have this book somewhere.
Karol:
Yeah, I actually have it somewhere in my bookshelf here.
Karol:
There we go.
Karol:
This is very, very old book called Enterprise Integration Patterns.
Aaron:
Oh, classic, yeah.
Karol:
Classic from what?
Karol:
2006 written by Gregor Hohpe.
Karol:
That's a classic.
Karol:
If you're an integrator, that's a must have just to understand even driven architecture well.
Aaron:
And I'm trying to find- All sorts of integration patterns, yeah.
Karol:
Yeah, all sorts of, well, most of them are related to even driven design on a- Messaging, yeah.
Karol:
Yeah, messaging and even driven design on a system level.
Karol:
Since the creation of this book, a lot of things have happened in the industry that changed interoperability drastically.
Karol:
So that book doesn't cover a lot of the topics, which is somewhat of a problem.
Karol:
It's 20 years old, so- 20 years old, yeah, exactly.
Karol:
So the aforementioned micro gateways relate to this lovely chapter, which nobody can see in the camera.
Karol:
So I'll just say it's a wiretap pattern.
Karol:
Yeah, wiretapping, all right.
Karol:
Wiretapping, this is a very lovely pattern from this book.
Karol:
I never heard of it before I read this book, to be honest, because again, my background service-orientated architecture integration platforms.
Karol:
So if we're doing integration platforms, we don't really care about wiretapping because we're already parsing the goddamn payload.
Karol:
But wiretapping in event-driven architecture is something absolutely brilliant for use cases other than just transferring that data somewhere.
Karol:
And micro gateways is equivalent of a wiretap on a synchronous communication to turn the request and the response into an event for whatever use you have.
Karol:
And I found that the micro gateway is absolutely brilliant if you want to have proper observability on your RESTful communication, on the medium of the communication, on the protocol level, not on the system level.
Aaron:
Yeah, if I could just explain it for 30 seconds so people actually know what we're talking about.
Aaron:
So Solace, as a multi-protocol broker, we have a REST API, an HTTP, it's not REST, it's an HTTP API where you can post into the broker as a publisher, and that message can then, you know, that becomes a message and you can listen to it with a JMS subscriber or a MQTT connection.
Aaron:
And the broker can also webhook out.
Aaron:
Like if you put a message on a queue, we can say, send this, post this message to somewhere else.
Aaron:
So that's our messaging mode.
Aaron:
Then our gateway mode, the broker acts as a proxy.
Aaron:
And it basically, you publish into the broker and then it just goes straight through the broker and out the other side to your designated endpoint.
Aaron:
And it sits in the middle.
Aaron:
And you might say, well, that sounds like extra hops and a waste of time, why would I want to do that?
Aaron:
And for this one, one of these is exactly the right use cases.
Aaron:
I want to wiretap.
Aaron:
Publish subscribe by default gives you a wiretapping ability.
Aaron:
It's like, if your communication is over publish subscribe and you want to listen, you want to tap into that flow of information, you just add another subscriber.
Aaron:
It's called subscribing to that topic or topics, right?
Aaron:
It's nothing much.
Aaron:
And so when that REST post or REST get or REST whatever it is comes into the broker, it gets translated into a message and then shot out the other end.
Aaron:
But while it's in the broker, it's a message and you can subscribe to it.
Aaron:
And you can listen to the response as it comes back through.
Aaron:
And you could use that to do triggers or logs or all sorts of other stuff.
Aaron:
I actually recently used the micro gateway mode.
Aaron:
I pointed it back to the broker's admin port.
Aaron:
And so I logged into the PubSubPlus manager GUI via the micro gateway port.
Aaron:
And then I could listen to all of the HTML and GUI and all the calls going back and forth via messages.
Aaron:
It's kind of nerdy, but yeah, I enjoyed it.
Aaron:
You can wiretap, point it to like amazon.com, point your Solace broker's backend to amazon.com.
Aaron:
And then when you point your browser to Solace, it will actually, all of the responses, all that webpage will fly through the broker as messages.
Aaron:
I don't know what that's useful for, but it's kind of neat.
Karol:
So yeah, but the reason why we make a distinction between a PubSub and wiretap is primarily that PubSub, if we think about integration patterns, we're thinking about moving the business data.
Karol:
While if we're thinking about wiretapping, we're not thinking about the business use case.
Karol:
We're thinking about more of a metadata operational use case.
Karol:
So if we're thinking, okay, we have some sort of a communication, let's say, Salesforce and NetSuite, they're related systems.
Karol:
They often cooperate and they need to communicate.
Karol:
So now we're trying to figure out in terms of temporary analytics, what's going on.
Karol:
So if we proxy all that communication through a micro gateway and wiretap it, we can source that even for, let's say, temporarily for the purposes of our analysis.
Karol:
Let's say we're trying to analyse anomalies in traffic.
Karol:
Anomalies being the traffic originating from somewhere else in the actual Salesforce system.
Karol:
Somebody is representing themselves as Salesforce, but they're actually a malicious party that's trying to do something in our network, trying to communicate with NetSuite to, let's say, source some information from NetSuite.
Karol:
And if we are wiretapping that, and that's a temporary situation, we could source a sample of data over, let's say, next two hours, the next day, and then analyse that in terms of the metadata of the communication.
Karol:
Because if we're wiretapping, all the HTTP headers will be available.
Karol:
All that metadata that we've put into that will be available.
Karol:
So we can see IPs.
Karol:
We can see how the headers are composed.
Karol:
If there are discrepancies in the build of the headers, we know that Salesforce is, for example, sending a very standardised set of HTTP headers because we define those headers and the calls that these have to pay.
Karol:
Okay.
Karol:
And if we see that there are discrepancies and there is communication towards NetSuite that doesn't have all the headers or has excessive headers or has headers with, let's say, correlation IDs formatted in a different way.
Karol:
Say we use, in Salesforce, we use UUID or GUID.
Karol:
And this one is, for example, sending just some sort of a string that, let's say, a millisecond timestamp.
Karol:
Now we can weed those out in analysis thanks to the micro gateway and figure out, oh, we have our anomaly.
Karol:
This is the source of our anomaly.
Karol:
This is the source of our discrepancies in data.
Karol:
Okay.
Karol:
Let's analyse further where that comes from.
Karol:
Let's track it down.
Karol:
And this kind of behaviour enables us to do so.
Aaron:
If all of your REST communication was going through an API gateway, like none of these things are making direct service calls to each other, then you could probably do it there as well, right?
Aaron:
It's essentially, you want to have a broker.
Aaron:
You want to have something in the middle that you can kind of observe the traffic going through it.
Aaron:
But yeah, like any kind of audit type of use case or any kind of analytics type of use case, you can easily just tune in, wiretap to that feed that you want.
Aaron:
And it's a great...
Aaron:
And it makes it a lot more...
Aaron:
The thing I try to impress upon people when I'm doing these workshops, you know, around Publish, Subscribe, is that it kind of future-proofs you to some degree.
Aaron:
It allows you to be flexible in the future with your architecture in a sense that you're not locked into a point-to-point style of communication where you might say, all right, now I want to send some of this data over there, or some other consumer is interested in the same data.
Aaron:
If I'm locked into a point-to-point architecture, now I have to do extra work to like double publish or put it somewhere else.
Aaron:
And so I had a...
Aaron:
Just as an analogy, I had a demo written where you could interact with it.
Aaron:
Cars were driving around and like, you know, you could break down and you could fix your tyre.
Aaron:
And we wanted to gamify it.
Aaron:
My boss at the time wanted to gamify it for user group.
Aaron:
And I couldn't find the source code.
Aaron:
I didn't know where it was, but all of the communication was going over Solace.
Aaron:
And I just thought, you know, I could just subscribe to these topics that people are like interacting with, like when you break down or when you fix your flat tyre.
Aaron:
And I just wrote a little subscriber that listened to people playing with the game.
Aaron:
And then I just built a dashboard off that data without having to like touch the original code.
Aaron:
The publishers, the producers, the game just kept working the way it was, but I could now subscribe to it and build additional value, my little, you know, leaderboard without actually touching it.
Aaron:
So it's great in the sense that, yeah, you can like wire tap that data for other use cases without having to touch your original producers and subscribers.
Aaron:
So yeah.
Aaron:
Well, we got to, let's see.
Aaron:
What does Stefan say?
Aaron:
Is there a person setting this up?
Aaron:
Hey, yeah, I guess so.
Karol:
Yes, yes, they can.
Karol:
Gotta be very careful about that.
Karol:
All software needs to be a subject to audit and reviews and checking the configs secured from a network perspective and all that.
Karol:
There's so many layers to that what needs to be checked to secure your IT ecosystem.
Karol:
Absolutely.
Karol:
But you can set this kind of wire tap anywhere and that's kind of backdoor.
Karol:
You're using an API management in your API management policies and security policies.
Karol:
You can create a wire tap.
Karol:
You can create a backdoor then there, right?
Karol:
A lot of the API gateways right now are SaaS solutions.
Karol:
So they're all still accessible.
Karol:
You can still figure out how to access them, right?
Karol:
If you're using micro integrations and you can still have network access to some of the systems that are not properly secured or somebody didn't deactivate your VPN access, there you go.
Aaron:
You have a backdoor.
Karol:
There's always a way.
Karol:
There's always this human error element that will be that problematic aspect where we're actually having problems because of that, right?
Karol:
Yeah, yeah, yeah.
Aaron:
You gotta watch out for those bad apples but you can hopefully detect them.
Karol:
So I mean, I still remember use cases from back in the day when I was working for T-Mobile and we had to secure the SMS gateway because SMSs have to be tested, right?
Karol:
All the notifications that we have around specific products and then integrations into the SMS gateway, it has to be tested in low level environments because that's part of the functionality that was introduced with certain releases of software.
Karol:
And people realised, testers realised and integration specialists realised, especially from our dev vendors, that it's actually the production SMS gateway hooked up to all the non-prod environments because otherwise people wouldn't get those test SMS on their phones to test them.
Karol:
Yeah, and those enabled to actually put something else than your number.
Karol:
So whatever string you wanted, so you could put whoever's number in and people started playing around that.
Karol:
It's just a matter of where you sit, where you are in the ecosystem to spot these kinds of opportunities either to enhance your security or to use the whole to your advantage, whatever that advantage may be.
Karol:
Maybe some harmless fun, maybe something a little bit more cringey or straight up illegal, right?
Karol:
Yep, yep.
Aaron:
Where there's always a whole.
Aaron:
So yeah, exactly.
Aaron:
Humans are fallible, right?
Aaron:
I mean, you just got to make sure we kind of watch out for these guys, girls, guys and girls.
Aaron:
Any gender can be duplicitous.
Aaron:
So I was just going to say that in Solace world, we do have a kind of a separation between the control plane and the data plane.
Aaron:
And that as an administrator of the broker, I can't actually connect to listen to the messages on the broker.
Aaron:
I can't look at the queues and see what's in there.
Aaron:
You actually have to have client credentials.
Aaron:
So there's a bit of separation of church and state in that.
Aaron:
Now, obviously as an admin, you can go and create yourself a client username to use for your nefarious purposes.
Aaron:
But obviously the logging would see you doing that.
Aaron:
So there's ways around it that basically on our side, yeah, we try to make sure that people administrating the brokers can actually look at the payload of the data so that, yeah, it's sensitive or secure.
Karol:
And we have a lovely comment from YouTube here from Shin, I guess.
Karol:
Yes, we could encrypt everything, but then we jump into the problem of trade-offs again.
Karol:
So the common contradicting pair in trade-offs is performance versus security.
Karol:
If we want something to be highly performant, security will definitely hinder that performance.
Karol:
If we want something to be highly secure, it's not going to be highly performant.
Karol:
These two don't go well together.
Karol:
So if we're dealing with...
Aaron:
Now we're having a lot of money.
Karol:
If we're dealing with somebody who's got a lot of money, like the trade markets or financial institutions, yes, we could try and do both, but it will still be contradicting each other to a certain way.
Karol:
So there's a matter of having that discussion.
Karol:
What is more important and to what degree?
Karol:
And that's always going to be the same problem, right?
Karol:
We either want it very fast or very secure.
Karol:
There is a middle ground, but it's neither going to be fast nor entirely secure.
Karol:
So you have to ship that security aspect somewhere else to mitigate that security risk in a different area of your ecosystem so that that transport layer is not impacted.
Aaron:
It's all trade-offs, man.
Aaron:
It's always all trade-offs.
Aaron:
It's either money or effort or time or security or loss.
Aaron:
This training that I was doing in Chicago there, we were talking about...
Aaron:
We talked about coupling for a little while and I invoked you in my head, actually.
Aaron:
It was kind of funny.
Aaron:
But we were talking about DR. And in Solace world, DR is when we go between data centres.
Aaron:
So not like HA, high availability within one data centre.
Aaron:
You have two data centres.
Aaron:
In case you lose a whole data centre, you can switch to a different one.
Aaron:
And we have...
Aaron:
You can do it either sync or async, right?
Aaron:
Sync means it's going to be in both data centres before the publisher is acknowledged his message is guaranteed.
Aaron:
But obviously throughput is going to be a problem because if the distance between data centres is quite far, now you have...
Aaron:
Your overall throughput is going to be less.
Aaron:
Versus asynchronous, we'll just enqueue it to be delivered to the other data centre before when the publisher gets an act, much more performant.
Aaron:
But if that data centre crashes right when that buffer hasn't gone out the door, then you might lose some data, right?
Aaron:
So everything is about...
Karol:
Trade-offs.
Aaron:
Well, trade-offs.
Aaron:
It's all...
Aaron:
And that's what patterns is all about, right?
Karol:
Yeah.
Karol:
And understanding the context in which we're doing those trade-offs because we're doing those trade-offs either way.
Karol:
But if we don't get that context right, we might misjudge the trade-offs.
Karol:
Yeah, yeah, yeah, yeah.
Karol:
And that's problematic.
Aaron:
Yeah.
Aaron:
What Stefan said there is pretty...
Aaron:
That's pretty accurate there.
Aaron:
IT and business.
Aaron:
Yeah.
Aaron:
Yeah.
Aaron:
Trade-offs.
Aaron:
Trade-offs.
Aaron:
Yeah.
Karol:
Fast or secure?
Karol:
Fast or secure?
Karol:
No way around it.
Karol:
That's always going to be a discussion.
Karol:
It's a very difficult topic.
Karol:
I find it that one of the best explanations I've seen so far how to work with trade-offs is doing the trade-off analysis at the way that Mark Richards and Neil Ford portray it with a discussion around which characteristic is actually the driving characteristic for the business.
Karol:
Okay.
Karol:
So you're putting priority on those characteristics.
Karol:
So we prioritise them in a way that, well, okay, if we're talking about that, what is the most important?
Karol:
What is now the thing that is mandatory?
Karol:
Because if we ask a business, do you want performance, security, availability?
Karol:
We want it all.
Karol:
Always.
Karol:
There's no way around it.
Karol:
They're always going to say, yes, we want everything.
Karol:
But it's impossible because as architects, we cannot ever design the best solution.
Karol:
We always design the least worst.
Aaron:
Ultimately, the technology should enable you to do what the business wants to do.
Aaron:
At the end of it, it's almost always a business decision to some degree.
Aaron:
And our synchronous replication, we built for a specific customer that they do horse racing.
Aaron:
And they were like, it has to be like, it's mandated that this, they can never lose a ticket, right?
Aaron:
Every time you purchase a ticket, we send it to both data centres and it's perfectly guaranteed.
Aaron:
It won't get lost.
Aaron:
And this was all fine and great until they had a network outage between their two data centres.
Aaron:
Everything was fine, but this one link that they used to communicate between them was down.
Aaron:
And basically that meant all of their ticket purchasing had to stop because they couldn't replicate it to both sides.
Aaron:
And it was like that for about half an hour.
Aaron:
And then the business came along and said, all right, you know what?
Aaron:
We're going to take the risk that we're not going to lose this data on the primary side.
Aaron:
We're going to allow it to these tickets to be purchased, even though we can't replicate it and have.
Aaron:
So sometimes you think, you know, all best intentions and everything.
Aaron:
And then when actually things hit the fan, you're like, I guess we don't know.
Aaron:
We don't need fully asynchronous in the worst case scenario.
Aaron:
So yeah, it's always, you never know how things are going to go sometimes.
Aaron:
And yeah, it's a business.
Karol:
All right.
Karol:
I see we have a question popping about Gen AI and the agents.
Karol:
We'll dive into that somewhere around the end of the stream.
Karol:
Let's dive back into publish, subscribe.
Karol:
So sadly, we're going to go off the hook on Gen AI and agents by the end.
Karol:
Hope you stick with us and we'll touch upon that later.
Karol:
But publish, subscribe.
Karol:
Adam, you have a game for us.
Aaron:
Oh, I was going to show the demo.
Aaron:
I can do it.
Aaron:
We can do the game.
Karol:
Okay.
Aaron:
Do the demo first and then we're going to do the game.
Aaron:
You ready with the demo?
Aaron:
No, no.
Aaron:
Give me a second here.
Aaron:
So this is, yeah, just let it load.
Aaron:
This is, I like to write demos.
Aaron:
I write a lot of demos.
Aaron:
I'm a Java programmer, but I dabble in JavaScript because why not?
Aaron:
All right.
Aaron:
Go ahead and share it there.
Aaron:
I hope this is big enough.
Aaron:
So there we go.
Aaron:
So this is actually, I mean, this is not real data, but this is representative of Solace's very first IoT use case.
Aaron:
This is Singapore.
Aaron:
This is the island of Singapore, pretty much a hundred miles north of the equator, right down at the Malaysian Peninsula at the tip.
Aaron:
And these are buses.
Aaron:
These are buses driving around.
Aaron:
If you zoom in here, you can actually see their buses.
Aaron:
If you keep zooming in, I got a nice satellite map.
Aaron:
These aren't, again, this is simulated data.
Aaron:
This is not real, but this is meant to kind of show and visualise what publish-subscribe is.
Aaron:
So this is a bit of a, just a kind of a learning kind of tool.
Aaron:
Down at the bottom, you can, so every time one of these buses moves, what we're looking at here is a Google Maps API, JavaScript, and the Solace JavaScript API.
Aaron:
So it's kind of a mashup.
Aaron:
And my browser here is a client connecting into Solace Broker that's running in Singapore and is subscribed to a bunch of bus topics, all right?
Aaron:
And so as these buses move, again, they're not real buses.
Aaron:
It's a Java publisher just simulating this data.
Aaron:
Every time a bus moves, it publishes a message to say, hey, my GPS position has been updated.
Aaron:
Here's my new position.
Aaron:
And my map here is subscribed to these bus topics.
Aaron:
So as these buses move, the map gets this message data and I just move the icon, right?
Aaron:
That's essentially all I'm doing here.
Aaron:
So this is exactly publish, subscribe visually.
Aaron:
So buses are updating.
Aaron:
My map is not polling for these locations, right?
Aaron:
I'm not querying some database saying, where are you now?
Aaron:
It's basically getting jammed into me through an event handler.
Aaron:
Like here's your message.
Aaron:
All right, what is the message?
Aaron:
Which bus is this?
Aaron:
Okay, what are the coordinates?
Aaron:
You can see at the very, very, very, very bottom, this is the subscription that I'm actually listening on right now.
Aaron:
So as I mentioned earlier, Solace has wildcards on different levels.
Aaron:
So you can be very coarse grained.
Aaron:
In this case, I'm subscribed to the whole feed.
Aaron:
Stars everywhere, right?
Aaron:
All stars.
Aaron:
But you can see the, what we call the topic hierarchy just on the top of it there.
Aaron:
Route number is level four.
Aaron:
Then a bus ID, level five.
Aaron:
Latitude and longitude I actually have is level six and seven.
Aaron:
A direction indicator of some sort.
Aaron:
And then a status is the last level.
Aaron:
So I've built this rather complex, fairly complex, I don't know, topic hierarchy, multi-level.
Aaron:
But what that allows me to do is I can now subscribe to parts of this feed, right?
Aaron:
As we talked earlier about the different kind of filtering and capabilities that are built in.
Aaron:
If I wanted to listen to say, just route number seven, I could go up here.
Aaron:
I could update my subscription.
Aaron:
You see my subscription here at the very bottom is now changed to 007 with a star because we support prefixes for our star.
Aaron:
So 07A, B, C, all the other buses go away because I'm not getting them anymore.
Aaron:
I'm not getting updates for these things anymore.
Aaron:
The broker is doing the filtering.
Aaron:
Notice the message rate here.
Aaron:
The rate that I'm receiving messages from my broker is dropped way, way down.
Aaron:
So the broker is filtering this stuff, right?
Aaron:
I'm not listening to the full thousand buses or 500 buses and throwing away all this stuff I don't want.
Aaron:
The broker is doing it.
Aaron:
So it saves me network bandwidth, CPU.
Aaron:
It's secure.
Aaron:
There's a lot of good reasons why you want to do filtering.
Karol:
Let me put a bit of a context because you showed the topic taxonomy.
Karol:
It's easy for people using REST to understand because that basically resembles a REST URI path, which is absolutely brilliant for people to learn because it makes life a lot easier for them.
Karol:
But basically if we're contextualised to that to other protocols, this data that we have as variables in the topic name, so route, bus ID, latitude, longitude, direction, and status, this would be the equivalent of, let's say, JMS headers in JMS as metadata.
Karol:
This would be the equivalent of routing keys in RabbitMQ implementation of AMQP, etcétera, etcétera.
Karol:
So this is your metadata.
Karol:
Of course, you can have also that, the same information in your payload.
Karol:
It would be.
Karol:
It would be in your payload because you want to read that payload.
Karol:
And well, if you zoom in a little because it's a little bit small.
Karol:
So you see that's already there somewhere.
Karol:
But basically when you're publishing that message from a perspective of the producer of the event, you duplicate that data.
Karol:
Part of it goes into all of this.
Karol:
It goes into the payload.
Karol:
And then some of it goes as, is treated as metadata and goes into the topic name, which creates that lovely taxonomy that we can filter by.
Karol:
The same would be with JMS. You would have to then publish that with the message as JMS headers properly describing that data.
Karol:
Then we could do the same level of filtering by JMS headers and select this.
Karol:
But it would be a lot more difficult to do because it's just tricky.
Karol:
Of course, JMS also enabled us to do dynamic queues, etcétera, which would also enable that kind of wildcard subscription.
Karol:
Again, a little bit harder to achieve than as it is implemented in Solace.
Karol:
But it's not the same capability there.
Karol:
It's just that people didn't use that that often.
Aaron:
Yep.
Aaron:
I mean, you can do that with, I mean, Solace is a full-blown JMS broker as well, right?
Aaron:
So, I mean, you can do that kind of stuff.
Aaron:
It's just our topic matching is infinitely faster than using selectors.
Aaron:
Selectors are because you have to go into the message.
Aaron:
I mean, it's part of the message.
Aaron:
It's not maybe it's metadata, but you don't have to look at the whole payload.
Aaron:
But yeah, you have to go and look at this key value pair and analyse it and stuff.
Aaron:
Whereas this is just if you can build...
Aaron:
Selectors also, you know, it supports SQL 92 type syntax.
Aaron:
So you can do more complicated.
Aaron:
You can do greater than, you can do less than, you know, you can do ranges.
Aaron:
You know, this is just basic string matching.
Aaron:
Topics are simple, fast, maybe not exactly what you, you know, maybe if you need something more complicated, like if you do XPath stuff, then no, that's not...
Aaron:
Topics aren't going to work, right?
Aaron:
But I do want to say, like people might look at this and say, why is the latitude longitude in the topic string?
Aaron:
That seems unnecessary, right?
Aaron:
I might want to search by route.
Aaron:
I might want to filter for a specific bus or maybe the buses that are broken down.
Aaron:
You know, some of them are, you can see they have little red Xs on them down here.
Aaron:
So like those are like, this guy has a fault.
Aaron:
Nope, not that one, this guy.
Aaron:
Yeah, anyway.
Aaron:
But yeah, I came up with this idea of like, can we use topics to do kind of geo filtering or numerical filtering?
Aaron:
And if I watch this, if I add a square here, add a polygon, you'll notice that the bottom, my subscriptions now change to like 1.3 star, 103.8 star.
Aaron:
All the buses that match that means that their latitude and longitude are in this area.
Aaron:
And so, I mean, obviously it'll match ABC as well, right?
Aaron:
I mean, you have to kind of make sure that you're publishing actual floats and they look nice like numbers, but I can now filter by location just with the topic.
Aaron:
I wrote this as a paper, I presented it at a conference and I don't think any of our customers ever use this.
Aaron:
I mean, it's just the topic, right?
Aaron:
It's a topic.
Aaron:
I was hoping UPS or someone would be like, hey, that's cool.
Aaron:
I can now filter based on area.
Aaron:
Every one of these little orange rectangles, squares is a topic in Solace.
Karol:
It's a separate subscription.
Aaron:
It's a separate subscription.
Aaron:
So yeah, so right now there you can see I have there's 300, I capped it at 300.
Aaron:
So to approximate this shape, I can use topics and subscriptions to approximately filter to this area.
Aaron:
So if you just want to know when a boat comes into a particular part of the harbour, you could do that with topics, right?
Aaron:
You don't have to use ArcGIS or something from Esri.
Karol:
Yeah, so basically this kind of level of filtering on an operational basis, real time basis, enables you to really build robust observability, really specific observability tools for whatever.
Karol:
It doesn't have to be observability in the sense of IT ecosystems and what's happening in your systems.
Karol:
But for example, for logistics, for traffic, yeah, it's amazing.
Karol:
If I look at the apps I ever used on my phone, this kind of filtering would be something that, let's say Uber or any other taxi app to just find taxis in my area.
Karol:
Tell them to call me.
Karol:
I'll give it to, I'll tell them how to do it.
Karol:
But also if you look at, for example, dating apps, a lot of them have, like in what range from your current location you're looking for potential dates, right?
Karol:
Yeah.
Karol:
Tinder had that definitely.
Karol:
I remember that kind of setting somewhere back in the day when I was using Tinder.
Karol:
There was that, in the range of 10 kilometres from me.
Karol:
So that's basically, that would basically be a subscription to that kind of a topic.
Aaron:
Kind of, but the one thing I'll make it just like this is streaming data, right?
Aaron:
These buses are continually moving.
Aaron:
So they're continually publishing their location.
Aaron:
And so I'm just doing it with this topic.
Aaron:
If you are not constantly publishing your location, you're going to need a database to store that so that we can come along and query for that area later, right?
Aaron:
So for this particular use case, it works fine because they're constantly publishing where they are.
Aaron:
But for something like Tinder, you're probably like, I'm in this area now and then tomorrow I might update it.
Aaron:
But you know, it's, you're going to want it.
Karol:
It's not that fast changing data.
Karol:
It's more of the use case that Stefan is commenting here on.
Karol:
So for example, live tracking of our phones, our service providers for mobile phones, they basically can track SIM and email because those are registered metadata in the network.
Aaron:
Or Bluetooth.
Aaron:
Or Bluetooth.
Karol:
Or your Wi-Fi, MAC address.
Karol:
I mean, that's, that's happening.
Karol:
Yes.
Karol:
But basically if we're looking at our phones, they have to register with a base transmission station, right?
Karol:
So old school wise, you had triangulation, which means that you had those triangulate your position versus the strength of the signal between three different transmission stations.
Karol:
While this would be like tracking real time because you subscribe to the data from the transmission stations and you can really triangulate that position of that phone in real time.
Karol:
So that's actually another really great use case for leveraging that data in telco and real time leveraging, which could be, for example, used by police.
Aaron:
So one of my colleagues, one of my colleagues in Italy actually just did a POC with the Rome airport and it was around trying to like track people how they move through the airport, like in case there's any bottlenecks and they were using their Wi-Fi, they're using their Wi-Fi as they went from base station to base station to get an idea.
Aaron:
Like it's not perfect, you know, it's like, but you know, plus or minus, you get an idea of where people are and like the flows and they observe how people flow through the airport in order to do efficiency stuff.
Aaron:
That could be useful for retail people, maybe, you know, like it could be there's, yeah, I've heard of retail stores that will like mine this location data to lay out their store in a particular way that causes people to spend the most money, right?
Aaron:
Like they set it up so that when you browse around, I don't know, I'm not a retail person, but there's all sorts of tracky.
Karol:
Yeah, but using that location data, Google Maps, the most basic use case of real-time location data.
Karol:
There was a, even a episode in Germany, I'm not going to find it right now because I don't even know the keywords for that, but there was a artist, like an event artist in Germany that just put on 10, 100 active phones in a basket and moved around the street with them on foot.
Karol:
Basically what happened, he was simulating traffic walking with 100 phones at a pace of a pedestrian.
Karol:
So the streets were...
Aaron:
So Google Maps is like showing this red block wherever he was.
Karol:
Yeah, so the streets around him were literally empty, devoid of traffic because he emulated the nav system that there's actually heavy traffic there and there's a traffic jam.
Karol:
So everybody routed around it.
Karol:
And that's basically real-time use case of such data and filtering of such data.
Karol:
But then again, if you provide proper anomaly detection to such data, you would then discover that this is not distinct data, but then it depends on the triangulation, the actual distinction of where that phone is.
Karol:
If we don't have that distinction in place, then obviously this kind of tricks like the one here I told you here is possible.
Karol:
But it's again, security of our data and the misuse of the software in essence.
Aaron:
Anyway, so that's my bus demo.
Aaron:
If people want to check it out, that's the URL at the top there.
Aaron:
It's running all the time.
Karol:
You can send it to me.
Karol:
I'll put it in a QR in a second.
Karol:
Just drop it in the private chat.
Karol:
I'll drop it in.
Aaron:
Do we want to talk about something else or should we do the interactive one now?
Karol:
Oh yeah, let's do the interactive one.
Karol:
So I'm putting the bus demo in a QR.
Karol:
So for those of you who want to look at the bus demo done by Adam just now, you can play around with it.
Karol:
It's available online.
Karol:
There you go.
Karol:
There's a QR for that.
Karol:
So scan it, play around, have fun.
Karol:
That's a very fun demo.
Karol:
I played around with it myself.
Karol:
It's a very interesting use case.
Aaron:
It's visual.
Aaron:
I mean, people like maps, right?
Aaron:
I mean, explaining a networking technology like Solace, like a backend thing is not the most easy.
Aaron:
Hey, look, it's a message and a payload going across the network.
Aaron:
How do you visualise that?
Aaron:
But people like maps.
Aaron:
And so I thought, yeah, let's make a cool...
Aaron:
These were originally taxis.
Aaron:
This started off as the London taxi demo because that's where I first came up with this geo algorithm.
Aaron:
And now it's the Singapore bus demo.
Aaron:
So quite cool.
Aaron:
All right.
Aaron:
So let me boot this up here.
Aaron:
Let's see.
Aaron:
All right.
Aaron:
Nobody look for a second.
Aaron:
A loosely coupled race.
Aaron:
There we go.
Aaron:
That's all right.
Aaron:
I'm just like, is there an...
Aaron:
I can't...
Aaron:
Loosely.
Aaron:
Is there an E in loosely?
Aaron:
How do you spell it?
Aaron:
L-O-O-S-E-L-Y.
Aaron:
There we go.
Aaron:
All right.
Aaron:
So run that.
Aaron:
There we go.
Karol:
All right.
Karol:
Let's turn it into a little bit of a bigger screen.
Karol:
So for all of you watching, let's say grab a phone.
Karol:
I'm grabbing mine right now.
Aaron:
I'll grab mine too.
Aaron:
Sure, why not?
Karol:
Go into...
Aaron:
Big prizes to be won.
Karol:
So whatever scanning app you have for QR codes.
Karol:
There we go.
Karol:
This is another lovely example of doing a PubSub or public subscribe.
Karol:
Little PubSub, yeah.
Karol:
Yep.
Karol:
Okay.
Karol:
I'm on the pink team.
Aaron:
I wonder if it's just going to be the two of us or if we'll have some other...
Aaron:
We'll see.
Karol:
Maybe at least Stefan is still watching and maybe he'll scan it.
Karol:
Yeah.
Karol:
So we'll give it a second.
Karol:
So...
Karol:
Oh, we have a yellow team.
Karol:
Yeah, there's somebody else.
Karol:
I'm on the green.
Karol:
Oh, we got four.
Aaron:
Oh, nice.
Aaron:
All right.
Aaron:
Woo.
Aaron:
Okay.
Aaron:
We need at least four.
Aaron:
We need at least four because there are four teams.
Aaron:
So this is good.
Aaron:
We'll see if a few...
Aaron:
We'll give it a few more seconds.
Aaron:
I'll explain what you're going to see here in a second.
Aaron:
Basically, there's going to be a little countdown.
Aaron:
I'm going to start the race.
Aaron:
There's going to be a little countdown.
Aaron:
When it says go, just tap your phone.
Aaron:
Just tap anywhere on the background, like anywhere on the screen.
Aaron:
And every time you tap, you row your boat, right?
Aaron:
Publishing messages.
Aaron:
And the winner is going to win a big prize from Carol.
Karol:
Yeah, right.
Karol:
Like I have the budget.
Karol:
We can agree on a private sparring session.
Karol:
Sure.
Aaron:
All right.
Aaron:
Well, if there's more people out there that are not participating, at least you can watch this amazing race.
Aaron:
Again, this is one of my very first JavaScript demos.
Aaron:
And so it's not that good.
Aaron:
I should probably tidy it up a bit.
Aaron:
All right.
Karol:
Are we ready?
Aaron:
We're going to do this race.
Aaron:
Some event-driven racing.
Aaron:
All right.
Aaron:
Here, let's do this thing.
Aaron:
Ooh.
Aaron:
All right.
Aaron:
Ready, set, go.
Aaron:
Go, go, go, go, go.
Aaron:
Holy hell.
Aaron:
Carol.
Aaron:
What the heck?
Aaron:
Oh, six fingers.
Aaron:
Six fingers.
Aaron:
I think you've done this before.
Aaron:
Have we done this?
Aaron:
We must have done this before.
Karol:
Yeah, yeah, we've done.
Aaron:
Yeah, see.
Aaron:
You have to play like someone who doesn't know all the tricks.
Aaron:
Anyway, thanks.
Karol:
Should we restart?
Aaron:
I'll give you a chance.
Aaron:
That's right.
Aaron:
So this is a silly little demo that we use in some of our user groups to get people.
Aaron:
I use it in my training, actually, to kind of get people excited a little bit.
Aaron:
It actually uses Solace messaging underneath.
Aaron:
Actually, it's not.
Aaron:
It's MQTT.
Aaron:
It's connecting to a Solace broker.
Aaron:
But every time you tap, it's publishing a message, right?
Aaron:
It's a row message.
Aaron:
And because this is a bidirectional WebSocket communication, it's very asynchronous.
Aaron:
It's very fast.
Aaron:
You can stream lots and lots, lots of clicks, lots of rows, you know, without having to, unlike REST, the whole point of this demo is to kind of say, how would you implement this using REST?
Aaron:
And if you had any amount of latency, you can see down in the bottom left corner there.
Aaron:
Actually, you can't because my name's in the way.
Aaron:
There's a latency counter.
Aaron:
You know, if you had a hundred, if you have 50 milliseconds of latency between you and your broker or your server, you could at most do 20, you know, events or round trips per second.
Aaron:
So you have to use something streaming there.
Aaron:
So do you want to do one more?
Aaron:
I don't know.
Aaron:
People might be bummed out and they got beat so bad.
Aaron:
But I promise I'll use one hand this time.
Aaron:
All right.
Aaron:
All right.
Aaron:
All right.
Aaron:
I'll just hit refresh here then.
Aaron:
We'll do it one more time.
Aaron:
There we go.
Aaron:
Now it's going to be a dev jam.
Aaron:
All right.
Aaron:
There we go.
Aaron:
You have to reload.
Aaron:
You have to refresh your app.
Aaron:
The URL hasn't changed.
Karol:
Yeah, I already closed the browser.
Karol:
So I just need to go.
Karol:
OK, I'm on the pink team again.
Aaron:
Again, the pink.
Aaron:
I'm on the green team one more time.
Aaron:
So, yeah.
Aaron:
All right.
Aaron:
All right.
Aaron:
We'll see if our other two competitors are still out there.
Aaron:
Or if they're chicken now.
Aaron:
So I'll give it a second while they join.
Aaron:
But yeah, so using, because it's bidirectional, you know, I mean, the server, me, the racer, the controller can send the start message to all the players.
Aaron:
The players, when they want to join the race, you know, they can send, I'm listening on a well, what's called a well-known topic, you know, just a topic that says, hey, I'm offering races and you publish on race on that topic and I can hear it.
Aaron:
So even if there are lots of other races playing right now, you publish one message, like as a service discovery message, say, who are the races out there?
Aaron:
All of the races that are listening on that can then reply.
Aaron:
It's like, it's like request reply, but multi request reply.
Aaron:
You know what I mean?
Aaron:
So using public subscribe, you can really build these complex kind of cool.
Karol:
It's basically request reply built over a asynchronous protocol.
Aaron:
Yeah, but also one to many.
Aaron:
It's also one to many, right?
Aaron:
It's like, it's like I publish one message saying who's out there.
Aaron:
That goes to like five different races.
Aaron:
They all respond saying here I am.
Aaron:
And then you can then choose which one you want to actually join.
Aaron:
And now we're joining this one.
Aaron:
Wow, we got six players.
Aaron:
Unless someone's refreshing their screen because it doesn't.
Aaron:
It's not smart enough to do that, but when the race starts, I do get rid of.
Karol:
I promise I'm going to be using one hand only.
Aaron:
My everybody remain in the air.
Aaron:
As many fingers, as many taps as you can.
Aaron:
Are you ready?
Aaron:
Seven, seven.
Karol:
Let's go.
Aaron:
All right.
Aaron:
All right.
Aaron:
Let's see if there's going to be eight.
Aaron:
Let's see if there's going to be eight.
Aaron:
And I do count like if one team has two people, you have to do twice as many clicks.
Aaron:
So it is fair.
Aaron:
All right, here we go.
Aaron:
Are you ready?
Aaron:
It's the only force that they're ready.
Aaron:
All right.
Aaron:
I'm going to go full speed this time.
Aaron:
Go, go, go, go, go.
Aaron:
Oh, yes.
Aaron:
That's pretty close.
Aaron:
I thought orange was whoever orange is.
Aaron:
All right.
Aaron:
Orange, I think, should actually win that prize because it's my game.
Aaron:
Let's give the prize to orange, whoever orange is out there.
Aaron:
Anyway, that's my silly demo.
Aaron:
But yeah, this is like, it's meant to show when you start thinking about the patterns, right?
Aaron:
Like, I want to join a race.
Aaron:
I want to subscribe to a race.
Aaron:
All right.
Aaron:
Get ready.
Aaron:
The race is starting.
Aaron:
You know, if this was using REST, which is client server, it's not server to client.
Aaron:
Like when the race is ready to start, how does the server tell all the clients that the race is starting?
Aaron:
You can't.
Aaron:
You have to pull.
Aaron:
Like the clients are just constantly pulling, saying, hey, has it started?
Aaron:
Not very efficient.
Karol:
So yeah.
Karol:
And that is actually, that has been studied.
Karol:
I believe, who was it?
Karol:
I think Zapier studied that back in 2013 or something.
Karol:
That's quite an old study.
Karol:
They studied polling mechanisms and the results of polling.
Karol:
And they discovered that over 98% of polling results in no data.
Aaron:
I heard a similar metric.
Aaron:
I heard it.
Aaron:
I heard somewhere.
Karol:
Yeah.
Karol:
It's in your, in Solace Dex.
Karol:
I seen Sean McAllister actually present that, exactly that metric and that study on a Solace user group.
Karol:
But it's a study.
Aaron:
Okay.
Aaron:
So, okay.
Aaron:
All right.
Aaron:
That's, if it's something referenceable, then I'm down with it.
Aaron:
You know, anecdotal, I don't know.
Karol:
I believe that as far as I did my research in that, that's a study done in 2013.
Karol:
So this is a fairly old one, but they studied that.
Karol:
I don't think anybody did these kinds of studies anywhere later, which is a shame.
Karol:
I think this would be a topic worth studying, but it is what it is.
Aaron:
Put this on, put this on the screen for a second.
Aaron:
This is, this is the Simpsons equivalent of it.
Aaron:
It's just like, are we there yet?
Aaron:
Has something changed?
Aaron:
Has something changed?
Aaron:
No.
Aaron:
Has something changed?
Aaron:
No.
Aaron:
Has something changed?
Aaron:
No.
Aaron:
No.
Aaron:
How about I just tell you when something has changed?
Aaron:
You know, like this is polling.
Aaron:
This is polling when, you know, if you want it to be responsive, you have to pull fast, right?
Aaron:
You could pull every hour and then there's probably going to be some change, but now you're an hour out of date.
Aaron:
So you pull really fast and now you're just burning your network and just backend database saying, nothing, nothing, nothing, nothing's changed.
Karol:
Yeah.
Karol:
And see, that was, that could probably be a feasible mechanism 20 years ago.
Karol:
Yeah.
Karol:
If we're considering our data centres where companies have their own data centres at 20 years back, they didn't have cloud available.
Karol:
They were hosting everything on premise.
Karol:
That was a scenario where storing data was horrendously expensive.
Karol:
Yeah.
Karol:
But moving data was absolutely, they're cheap.
Karol:
Well, now we have the other way around.
Aaron:
Networks were slow.
Aaron:
Disc was faster, right?
Aaron:
And so, yeah, the database as essential of your IT as the storage is the golden source.
Aaron:
That was the way almost all of these things were architected.
Aaron:
And now the network is fast.
Aaron:
Now the network goes like faster.
Aaron:
Like now the state is in the network and the database is just a hang.
Aaron:
It hangs off the side and it keeps that.
Aaron:
But the real truth is the network, not the database anymore.
Karol:
Yeah.
Aaron:
So you want to tap into that.
Karol:
But see now, if you consider cost-wise from a perspective of infrastructure, where most companies are now investing into that infrastructure being in cloud, they drop their own on-premise in favour of cloud.
Karol:
Now storing data in cloud is dirt cheap.
Karol:
Moving data in cloud is horrendously expensive.
Aaron:
Well, some of them make it cheaper than others, but yeah.
Karol:
But in comparison, 20 years ago and now, moving data became a lot more expensive and storing data became a lot cheaper.
Karol:
So if we're considering a polling mechanism and we want that polling to be near real time.
Karol:
So we set the polling intervals, for example, every one minute.
Aaron:
And we poll every one minute.
Aaron:
Real time.
Karol:
No, it's not real time.
Karol:
That's near real time.
Karol:
Real time is never achievable with polling.
Karol:
Sure.
Karol:
Ever.
Karol:
And so if we want to be near real time, we set that polling interval to one minute and then we start polling.
Karol:
But then we result in a lot of calls that are completely unnecessary that burn our budget because we're making those calls.
Karol:
We're getting a response.
Karol:
That response is empty, but we're already burning the money on getting that call in response, which means it's a problem.
Karol:
It's a problem from infrastructure perspective.
Karol:
It's a problem from a budgeting perspective.
Karol:
It's just not feasible to do polling mechanisms anymore.
Karol:
Polling mechanisms right now should be treated basically as a last resort mechanisms where we have them for legacy systems that cannot release events.
Karol:
Otherwise, it's just a bad idea in cloud environments.
Aaron:
I'm going to flip that around just a little bit to say, also, you're now up to a minute late for whatever action you're trying to action on.
Aaron:
If you're polling every minute, even if a lot of things change that minute, maybe it's fine to pull every minute.
Aaron:
You want to pull at a rate that you're not getting no ops all the time because that's dumb.
Aaron:
Even if you're down to five seconds, now you're still five seconds possibly late.
Aaron:
The start of my race, there was only a five-second countdown, so you have to pull at least every two or three seconds to actually make sure you start the race on time.
Aaron:
So speaking of polling, what would you consider the best method to implement event-driven PubSub on relational DB containing the source data?
Aaron:
What implementations do you use?
Karol:
And this is exactly the problem we just put in, the near real-time polling, which is like, why would we do that?
Karol:
If we're having relational databases, that must be a very old relational database that we have to resort to polling.
Karol:
As far as I remember, in telco environment, we resorted to polling with databases.
Karol:
At that time, we used Oracle.
Karol:
Yeah.
Karol:
With Oracle in a version lower than 10.
Karol:
Okay.
Aaron:
I don't know Oracle stuff, so yeah, that doesn't mean anything to me, but all right.
Karol:
They didn't have the mechanisms for the database to make a proper call.
Karol:
Yeah.
Karol:
Right?
Karol:
So if you had database-based systems and we communicated directly with those databases, fair enough that they were built properly so there was a proper segmentation of the database.
Karol:
From the integration perspective, we didn't actually touch the production tables and whatnot.
Karol:
There was always somewhere in staging before that data was actually released to the live production tables.
Karol:
But basically, those systems, those very old school systems, before they were modernised to higher versions of Oracle databases, like 11, 12, they were incapacitated in their capability to communicate, to initiate communication.
Karol:
So we had to resort to polling mechanisms.
Karol:
But the moment that those databases gained proper libraries to actually initiate communication, we had database triggers that resulted emulated events based on whatever the data type was in the table or the procedure.
Karol:
And basically, if we're talking about polling and turning into PubSub, well, replace your polling mechanism by using triggers in a database.
Aaron:
The answer, like if you're an Oracle user, the answer is GoldenGate, right?
Aaron:
Or some other kind of, it's change data capture.
Aaron:
If your database supports
Aaron:
change data capture,
Aaron:
there's like,
Aaron:
MSSQL does,
Aaron:
I mean, a number of them do,
Aaron:
where, and even if not that,
Aaron:
the log, logging database logs
Aaron:
as events are,
Aaron:
as rows are updated,
Aaron:
as tables are updated,
Aaron:
these are emitted as change data,
Aaron:
like they're emitted as events,
Aaron:
triggers,
Aaron:
I don't know the proper terminology,
Aaron:
but Oracle GoldenGate
Aaron:
was meant to allow you
Aaron:
to keep multiple databases in sync
Aaron:
by as changes are made over here,
Aaron:
these are emitted as events,
Aaron:
as triggers, as updates
Aaron:
to another database,
Aaron:
which can run over GMS.
Aaron:
I mean, that's actually
Aaron:
a really old use case
Aaron:
that saw us like 12 years ago.
Aaron:
When I first got hired, it was a GoldenGate replication use case using a Solace event broker to replicate customer data to like five different data centres, right?
Aaron:
So it was like, again, PubSub, one change in, and it went to five, four other data centres.
Karol:
So yeah, change data capture, checkout, I mean, yeah, this kind of replication, on that, yeah, that kind of replication to multiple data centres to have that copy in all data centres wouldn't be possible by DB links.
Aaron:
It's not even, yeah, it's not even replication, but there's just, if you want to be event driven with your data and your database is your golden source, you want to initiate some kind of change to the capture mechanism to emit those as events that you can now tap into.
Aaron:
You can listen to say, hey, this has been updated.
Aaron:
Boom.
Aaron:
And you get that message right away.
Aaron:
Yeah.
Aaron:
So either database logging or changing the capture would be my answer on that.
Karol:
So absolutely.
Aaron:
And Solace has some things around this.
Aaron:
We have a Debezium, like as part of our integration, micro integrations, we do integrate with Debezium.
Aaron:
So some databases are supported through that.
Aaron:
I don't know.
Aaron:
I'm not a micro integration expert, but if you're looking for a Solace answer, maybe check out our integration hub.
Aaron:
But I'm sure there's lots of other stuff out there to do.
Karol:
There's plenty, plenty of solutions for change data capture and plenty of databases now they support these mechanisms.
Karol:
Anyway, Kafka has all this stuff as well.
Aaron:
You know, I mean, it's not uncommon.
Aaron:
So I'm sure you'll find some.
Karol:
It's just a matter of understanding the use case is that actually an operational event or is that something you need for like analytics?
Karol:
Yeah, right.
Karol:
Because these are operational events are very different than events for analytics or for audit security, etcétera.
Karol:
And you have to consider the temporal coupling aspect of that.
Karol:
How is that data going to be utilised in time?
Karol:
And then you can figure out which kind of mechanism you need to actually liberate that data from the database, because sometimes that would be actually putting that in a log broker and just being able to replay that from that log instead of using operational broker with or without persistence doesn't matter, but with that robust filtering capability like Solace provides, right?
Karol:
So it's all about understanding the context and then doing proper trade-off analysis.
Karol:
What would be the least worst fit?
Aaron:
Yeah, I've been looped into, I don't know why me, but looped into a potential POC proof of concept with the customer of ours that they're doing some mainframe stuff.
Aaron:
They have mainframe databases that they want to get data out of these.
Aaron:
And so their existing solution is JDBC.
Aaron:
They pull their database.
Aaron:
I don't know if it's a rational database.
Aaron:
I don't know anything about mainframe, but it's some type of database and they have JDBC apps that are pulling this database to get change and stuff out of it.
Aaron:
And they're trying to figure out a better way to do it, right?
Aaron:
And so change data capture is not really an option, but they can enable database logging for some of these tables as they get updated.
Aaron:
However, the logs don't contain all of the data.
Aaron:
So we're thinking maybe we can use the logs as a trigger to then kick off some polling, right?
Aaron:
So you don't, you pull only when something happens rather than pulling by time.
Aaron:
There's maybe an interesting hybrid type of solution.
Karol:
That's actually an EDA pattern.
Aaron:
Oh, good.
Karol:
That would basically land within the pattern of anaemic events.
Aaron:
Oh yeah, thin events.
Aaron:
Sure.
Aaron:
Yeah, yeah, yeah.
Aaron:
Something's happened.
Aaron:
I'm not going to tell you exactly what's happened.
Aaron:
Yeah, yeah, yeah.
Aaron:
Of course you're right.
Aaron:
Yeah, yeah, yeah.
Aaron:
That's anaemic events versus thin events.
Aaron:
Yeah, yeah, exactly.
Karol:
So you don't have the context of all the data that happened within whatever happened, but it's a notification.
Karol:
So if you have that anaemic event that at least points you to the right data, then you can make that smart polling of data to pull that exact record instead of having to pull all records or by flag or whatever every whatever the interval might be.
Karol:
And that's another viable solution for these kind of legacy systems that if you can find a trigger, some sort of a data like a log that could be utilised as an event beginning the communication, then you can utilise a polling mechanism that is based on those anaemic events.
Karol:
That is a fair use of that pattern.
Karol:
While a lot of people consider anaemic events to be an anti-pattern, it's a very, very useful pattern in these kind of niche situations.
Aaron:
Things are always applicable somewhere, right?
Aaron:
I mean, in general, anti-pattern, sure, but you can always find one thing where it's like, actually, that's a good idea to do it like that.
Karol:
It's a difficult, in general, the discussion around patterns and anti-patterns is quite a difficult topic on its own.
Karol:
Don't have time for that today, that's for sure.
Karol:
But if you're not going to jump into the distinctions between patterns and anti-patterns, but...
Karol:
I thought we were going to talk about AI.
Karol:
We will, we will.
Karol:
But if anybody is interested in looking into patterns and anti-patterns, I actually wrote an article about the distinguishing and trying to define what is actually a pattern or an anti-pattern.
Karol:
Because in my research, I scoured through several books that mentioned anti-patterns and there was no cohesive definition of what an anti-pattern is.
Karol:
So if somebody's interested in my take on what an anti-pattern is or how to address...
Aaron:
It's your article.
Aaron:
It's my article, exactly.
Karol:
Yes, I wrote it.
Karol:
So this is a piece I wrote some time ago while defining EDA patterns for the research I was doing, because I stumbled into, okay, how do I work with anaemic events or with content-based routing in EDA where people would consider that anti-patterns not to do ever.
Karol:
But that problem is not that kind of a binary problem, which means that there's a lot more to it.
Karol:
So it's always worth to jump into it, figure it out, try to understand the context.
Karol:
And the context is always the most difficult aspect there is.
Karol:
So if that helps, jump in, read it, ping me on LinkedIn later.
Karol:
What do you guys think about that article?
Karol:
Do you agree with my definition of an anti-pattern or a pattern in general?
Karol:
Let's have a discussion about that because that's always an interesting topic to spar on.
Karol:
I'm happy to jump into that outside of this live stream.
Aaron:
How does it know that someone has scanned the QR code?
Aaron:
I don't see any tags or anything.
Karol:
It knows because the streaming service we're using to chat today is proxying the QR code.
Karol:
So they're actually wiretapping on the QR code.
Karol:
So they're actually gathering metadata that somebody accessed and then redirecting to the right place.
Karol:
So we know you scan.
Karol:
I will read that later.
Karol:
So yeah, let's jump into, hopefully Sadi is still with us.
Karol:
If not, I hope you'll watch the recording and the answer to his question.
Karol:
So exception handling and identifying patterns, fantastic.
Karol:
What, oh, the whole comment doesn't really fit into...
Karol:
But luckily that's not a, it's just one word that's been cut out.
Karol:
So thoughts about AI and generative agentic in the world of integration.
Karol:
I have my own thoughts and I know you from the perspective of Solace, you have your own thoughts because you actually productize that to the open source project.
Karol:
So shoot, let's have the EDA perspective and Solace perspective on...
Aaron:
Solace perspective, yeah.
Aaron:
Shoot, man.
Aaron:
So I guess I'll just, I could summarise it in two kind of phrases is, one, agentic AI, agentic AI just means you have a bunch of specialist agents, right?
Aaron:
Like not one agent is going to be the Uber agent that does everything, like building graphs and talking to the weather and looking at files and doing all this stuff, right?
Aaron:
So you have specialist agents, they need to talk to each other.
Aaron:
And so like probably in these types of systems, 20% of it is actually the AI, maybe the LLMs and all that stuff.
Aaron:
80% of it is the integration.
Aaron:
It's the plumbing.
Aaron:
It's the plumbing between these things and how to make them work together.
Aaron:
And we've had a number of calls of with various people in this space and they all kind of agree.
Aaron:
That's some say 90%, 10%, and 90% Solace's answer is 20 and 80.
Aaron:
But you know, integration in these agentic systems is significant and important.
Aaron:
And the way that some of these companies are building these things, it's so reminiscent of kind of microservice distributed architectures where you have a bunch of specialist microservices that are doing their one little thing and they're doing point to point communications to all their other little guys.
Aaron:
And as a Solace person or as a Solace as a company, we've seen this before and we've been trying to fix this with publish, subscribe, event driven, asynchronous communication and it's the exact same thing.
Aaron:
So yeah.
Karol:
So that would resemble in that sense if we're talking about that microservice, pure microservice communication in agentic world that would be using the A2A protocol.
Aaron:
We've wrapped A2A with messaging.
Aaron:
So it's still at the payload is A2A but we're now using Solace and Topics to move this data around between various agents very like orchestrators and like you can now you can wiretap it.
Aaron:
We have all sorts of observability tools now because it's going through the broker.
Aaron:
You just subscribe to those A2A messages as they're flying through the broker and you can have a real time display.
Aaron:
Like we have demos of this stuff where you can see the different agents talking to each other and what they're doing and like where your query is.
Aaron:
It's anyway.
Aaron:
So Solace is building an agentic AI framework that you can plug in any MCP server to it and it's, you know, using Solace as its communication framework because we feel that that's where things are going.
Aaron:
It is you need to be scalable.
Aaron:
Oh, thank you.
Karol:
To the liberty of popping the main page for that that's called the Solace Agent Bash.
Karol:
So if you're interested in the topic how that works, it's exactly that and it's an open source.
Karol:
It's not a product.
Aaron:
I don't think we're open sourcing the whole thing.
Aaron:
There is some like secret sauces in there, but it is significant.
Aaron:
It's all on GitHub.
Karol:
So if you want to look it up, that's the QR code for the GitHub.
Karol:
Play around with it.
Karol:
See if you can use it.
Karol:
That's definitely something to use for agentic environments, but that doesn't really fully answer the question.
Karol:
No, no, that's not, yeah.
Karol:
Pose there.
Karol:
And I need to look it up in my Google Drive, but because I was actually interviewing with Solace a little bit ago, I had to prepare.
Aaron:
Didn't take it, you know.
Karol:
Didn't take it.
Karol:
Didn't take it.
Karol:
It was a very, very fine offer and I would definitely, if I was 10 years younger and didn't have kids, that would be definitely something amazing to do.
Karol:
I just need to find the right deck.
Karol:
I actually had to prepare the deck on that because I was asked to present a Solace agent badge and what would that be.
Karol:
So I tried to approach that from a perspective a little bit more agnostic.
Aaron:
While you're digging up your presentation there, I will give a shout out to my colleague, Tamimi, who actually made a nice little video series on our Solace YouTube channel, kind of explaining the, and they're nice little five minute videos, little bite size.
Aaron:
And he explains the kind of the Solace agent mesh, the different components of it and why we feel that kind of agentic AI needs to look at, you know, EDA and publish subscribe as a- Yeah, so actually, I actually used those to prepare this deck.
Karol:
They're great videos.
Karol:
I watched them all.
Karol:
They really explain the Solace agent mesh and the principles about meshing agents great.
Karol:
So watch them.
Karol:
And now in terms of the shift in terms of interoperability and integration, so we have our traditional IT ecosystem set up.
Karol:
We have our systems, our data and databases.
Karol:
We have integration platforms and message brokers aligned with those.
Karol:
We have API management.
Karol:
That's the traditional IT setup, right?
Karol:
In terms of interoperability.
Karol:
That's that box, right?
Karol:
So traditional IT ecosystem.
Karol:
And the way I basically see it, then on top of that, we have all sorts of LLMs, generative AI.
Karol:
We have all sorts of agents doing various things with or without the access to those LLMs. And this is basically where we come into this agentic ecosystem.
Karol:
Now, these ecosystems are next to each other, but one relies on the other one.
Karol:
The agentic ecosystem is basically useless without, right?
Karol:
I don't really remember what's there.
Karol:
So we have model context protocol and A2I.
Karol:
A2I is between agents.
Karol:
MCP is the boundary between the traditional IT ecosystem and the agents.
Karol:
So if we're looking at the traditional integration or a traditional application integration, we still very much need it because that's our lifeline to actual data.
Karol:
That's our lifeline to actual functions.
Karol:
That's our lifeline to actual governance over what that agent can do in our IT ecosystems and in our systems.
Karol:
And this is where the MCP really comes to play, where now a lot of integration platforms enabled to just add MCP on top of their APIs.
Karol:
So instead of exposing a REST endpoint, we expose an MCP endpoint, MCP server as an endpoint.
Karol:
And this is the shift.
Karol:
It's still the same integration, just a different protocol.
Karol:
And the MCP server then basically becomes that different of a protocol in the sense that it actually requires that state.
Karol:
So that's the differentiator.
Karol:
So we're still gonna have plenty of work as integrators.
Karol:
That's exactly that 80% is that plumbing, thought through, understood so that we know which agent has access to what data.
Karol:
While we can set up- Authorisation, authentication.
Karol:
We can set up this as MCP servers solely because if you look at MCP server, what it is, it's a micro integration platform, a broker type integration platform.
Karol:
But it's something that I'm working on in terms of properly describing.
Karol:
But basically the analogue is, if you look at MCP from a perspective of the API led architecture, so that layered architecture where you have the channel layer that is the representation of what that system or what that agent has access to, then basically the MCP server becomes one application and channel layer.
Karol:
And this is interesting because then you can apply a lot of governance over the mains, over the access to proper services and data within your ecosystem by governing what that one channel has access to.
Karol:
And then you can host however much MCP servers you want, which with all of them having precisely fine tuned access to services that you already have.
Karol:
So if a company already has a API led architecture platform in place, easy peasy.
Karol:
That's just exposing that as another endpoint as an MCP.
Karol:
And already those technologies are catching up and starting exposing, adding MCP as just another protocol in the portfolio of protocols you can expose from their applications.
Karol:
And that makes it all interesting, very interesting, because that's a very large impact on the architecture of integration platforms.
Karol:
And on top of that, if you add the communication, the agentic communication, which is A2A or A2A wrapped with async, like done by Solace.
Aaron:
Well, the most of the use cases we're seeing these days from customers that are interested is kind of like this talk to your data type use cases, right?
Aaron:
Where you might have agents for Salesforce for your problem, your JIRAs, maybe your trouble ticket, your orders.
Aaron:
And so like if you're a customer facing person, you like get a support call.
Aaron:
You could talk to your, you could basically say, hey, chatbot, tell me all the, tell me all the things that you need to know and give me an update on this particular customer.
Aaron:
And it'll pull all this data from disparate places and then format it into a nice HTML report or some PowerPoint slides and present it to you.
Aaron:
Here's boom, just like that.
Aaron:
Having that kind of, I mean, that's from the usability perspective, like in terms of how do you actually go and architect that and like kind of build all this.
Aaron:
There's a lot of integration.
Aaron:
There's, I mean, it's, yeah.
Karol:
Yes, the agent basically has to access a lot of sources of data to compose, but this access needs to be use case specific.
Karol:
Otherwise it's going to be just hallucination on top of hallucination because it's already been, Antropic already tested that in terms of the extent of MCP and how you can build MCP is that the more sources you add to the MCP server, the more the agent will hallucinate, the more the model will hallucinate because there's too many sources in that.
Aaron:
I think some of our AI, so Solace kind of made a dedicated AI team about two years ago to kind of start down this path.
Aaron:
So we've been thinking about this for a while, even though we're a message broker, event-driven kind of company, we do have people that were very keen to get on this and had been dabbling in AI for probably like five years, our chief AI guy.
Aaron:
However, the one thing I was going to say that you just key me to, they, I remember some of our slides talk about in order to prevent hallucinations, it's about providing the right amount of context to certain servers.
Aaron:
Like you don't want to overload them and you have to give them enough.
Aaron:
And so as part of that, I think a lot of stuff has gone into, in our implementation, we have this orchestrator kind of mega agent that basically you can scale it out.
Aaron:
So it's not really a bottleneck, but it is the one who is taking down your complex human query and figuring out how to break that down for the different agents based on their capabilities, which are advertised by these agent cards, you know, and providing that agent with the right amount of context to not hallucinate.
Aaron:
So I'm guessing they've probably gone down this path of, I want access.
Aaron:
Yeah, yeah.
Aaron:
Sometimes it's pretty, pretty funny.
Aaron:
Not when you're trying to get like, you know, writing documentation and it's like just making up crazy stuff.
Aaron:
You're like, I almost can't do that.
Aaron:
Like you're crazy chatbot, but.
Karol:
And the same applies to just using generative AI.
Karol:
I have a licence for Google workspace.
Karol:
So I work on a daily basis with Gemini within my workspace.
Karol:
So I often test the extent how those hallucinations occur.
Karol:
So I figured one day I'm going to experiment with a Gemini based agent and just hook up all the data I downloaded from LinkedIn.
Karol:
That's available as my data for my activity, my profile, etcétera.
Karol:
And I just hooked up willy nilly all the data to that chatbot agent.
Karol:
And I also hooked up my CD that I made myself and started asking that agent questions about me.
Karol:
The results were astounding.
Karol:
I was like, where do you get that information from?
Karol:
There's nothing that would indicate that I studied marketing.
Aaron:
All right.
Aaron:
So work in progress, eh?
Karol:
Yeah, it's probably going to be changing over the years.
Karol:
Those models will be handling multiple data sources better.
Karol:
But the more you hook up now, it's the more hallucinations.
Karol:
So if we're talking integration, those integrations will have to be very much fine grained integrations with a very specific purpose per agent.
Karol:
So the agents will also have to be very purpose related.
Karol:
So they cannot work as very generalistic software.
Karol:
So yeah, customer support agents, absolutely fine for somebody in customer support to use and pull that data and understand that data in that small specific context of a use case.
Karol:
For example, reconciling problems with an order in a retail environment or something like that.
Karol:
Or understanding the account of a customer in telco.
Karol:
So what kind of services they have?
Karol:
What's the usage of those services?
Karol:
What are the boundaries or whatever else?
Karol:
Or what are what incidents they have posted over the last half a year to see if that's maybe a reoccurring problem?
Karol:
We are yet to see.
Karol:
We already seen some companies backing out of AI, probably due to poor implementation.
Karol:
So there were...
Karol:
I recently read a case study of a company that replaced their call centres with AI.
Karol:
And the number of complaints over very poor quality of service skyrocketed.
Karol:
So after half a year, they basically rehired the majority of the call centre and switched back to humans handling the calls.
Karol:
The speed of processing the calls was great with AI.
Karol:
The quality of the processing, everybody hated it.
Karol:
It was horrendous.
Karol:
So yeah.
Karol:
Hallucinogens, yes.
Karol:
I'm happy to get those that AI is doing.
Karol:
Looking at the...
Karol:
Very creative.
Karol:
Very creative.
Karol:
Looking at the image processing with generative AI back like five years done by Google, the test where you have those wonky images of cats like merged into together.
Karol:
Yeah, yeah, yeah.
Karol:
Some hardcore drugs there for AI.
Karol:
But now it's better.
Karol:
But obviously it's still not to the level that it's going to be good.
Karol:
So proper handling of data, proper handling of integrations is now ever more so crucial.
Aaron:
In my opinion, at least.
Aaron:
Agreed.
Aaron:
Yeah.
Aaron:
It's embarrassing, but I actually haven't started playing with this stuff yet because I just got my new laptop sorted out.
Aaron:
My old laptop couldn't run the agent mesh because my...
Aaron:
Whatever, it doesn't matter.
Aaron:
My WSL was too old.
Aaron:
I got a new laptop.
Aaron:
I got all modern.
Aaron:
Anyway, and so I'm going to start playing with this.
Aaron:
So I don't have a...
Aaron:
I don't like to talk and have an opinion about something that I haven't really used and touched myself, you know?
Aaron:
Like I could not tell you much about...
Aaron:
I don't know, Boomi.
Aaron:
Because I've never really played with Boomi.
Aaron:
I kind of know a few high level things.
Aaron:
But if you ask me about Solace APIs, I can go...
Aaron:
I can talk to you for hours about because I played with them I don't like to talk about things that I haven't...
Aaron:
Otherwise, you just sound like a marketing person who's just reading the slides and, you know, whatever, right?
Karol:
So yeah, I don't want to say too much about...
Karol:
But then again, you're very much a hands-on kind of person, hands-on specialist.
Karol:
Well, I'm more of an architect and I deal with qualitative analysis all the time and contextualising that to business.
Karol:
So a completely different scope.
Karol:
So we're looking from different perspectives.
Karol:
For you, it's important to experience that so you can have an opinion.
Karol:
For me, it's important to ponder upon the topic to have an opinion, to actually think it through.
Karol:
Two different perspectives on the same thing.
Aaron:
And well, I gave them our business opinion, right?
Aaron:
Really?
Aaron:
So yeah, it's like we see agentic AI systems as distributed architectures and that they are made better by something like us.
Aaron:
So that's...
Aaron:
We're not going to build LLMs, that's for sure.
Aaron:
We're just trying to make them talk better, that's all.
Aaron:
So yeah.
Karol:
And that's absolutely going to be extremely important in proper adoption of Generative AI and later models to make them talk properly with proper boundaries and proper context of semantic understanding, semantic coupling of what they're doing.
Karol:
Because otherwise, that's going to be just hallucination after hallucination after hallucination.
Karol:
And it's not going to be pretty.
Aaron:
Yeah.
Aaron:
And it's like, obviously, proper authorisation from agent to agent is also super important, right?
Aaron:
If I'm querying, if I'm talking about my HR system, I should not be able to look up other people's information on HR, right?
Aaron:
Like, I mean, it'd be very locked down to that versus a weather system.
Aaron:
Who cares?
Aaron:
I mean, there are very customer details.
Aaron:
They're like, yeah, these kind of things need to be part of it.
Aaron:
Passing along tokens, however, authorisation authentication is done.
Aaron:
But we're getting into this now because this is actually useful stuff.
Aaron:
And it's like, now the guardrails have to go up because it's a little bit wild out there.
Aaron:
So yeah.
Karol:
Yeah.
Karol:
We're biased as well, though.
Karol:
We're all biased here.
Karol:
So and AI and generative AI LLMs only amplify our biases, basically.
Karol:
And that's been already established all over the place that if we have use cases that can produce bias, that bias will definitely be amplified because the training data, especially if we're using large language models that were trained by a different company.
Karol:
So whoever is training them, like Anthropic, Google, doesn't really matter.
Karol:
They're training the models and we're contextualising them to our use cases.
Karol:
We have no idea on what data those models were trained, which means that we have no idea what kind of biases will be surfacing through those models in our use cases.
Aaron:
We know there will be some, but we don't know what they...
Karol:
Yeah, that's something that needs to be accounted for.
Karol:
So any use cases that are prone to bias already should be disqualified from use because you would have to actually sit down in your company, take a vetted data set, check it for biases, train the model yourself, build the model yourself and then utilise it for your use cases.
Karol:
That is a multi-million dollar endeavour.
Karol:
Easily.
Karol:
Not a lot of companies can afford that.
Karol:
So we're kind of forced to use those models, but that comes with that risk of those kind of cognitive biases presented in the data sets.
Karol:
And we've already seen that in different ATS systems.
Karol:
Workday was recently sued for their ATS system.
Karol:
What's ATS?
Karol:
ATS, I don't really remember what the abbreviation stands for, but that's basically a system that's vetting candidates.
Karol:
Okay, okay.
Karol:
Analysing CVs, vetting candidates.
Karol:
And it turns out that their ATS, presumably, was already biased towards, for example, people over 50.
Karol:
Okay.
Karol:
Right?
Karol:
And they got rejection emails just automated rejection emails within minutes after applying or at hours that are not operating hours of said company.
Karol:
These kinds of things.
Karol:
So those biases based on the data sets already went amplified and made actually companies lose talent because of that.
Karol:
So there are many, many other examples where that funnel of data and providing proper data for agents is very, very crucial.
Aaron:
Over 50 is not that old, by the way.
Aaron:
I just want to point that out there because that's creeping up pretty soon.
Karol:
Yeah, yeah, yeah, yeah.
Karol:
That's, yeah, mine is the 40 mark and that's also creeping on me.
Karol:
It's, ooh, that's going to be...
Karol:
I don't care.
Karol:
I'm young at heart.
Karol:
And so are you.
Karol:
So yeah.
Karol:
There's plenty of problems with that.
Karol:
We don't know.
Karol:
We'll see.
Karol:
We're trying to make it work with what we have.
Karol:
And integration is going to be only, only more important in general.
Karol:
Whether or not it's going to be agent to agent or it's going to be our IT ecosystem to those agents to exchange proper data for them to work with that data or utilise services.
Karol:
We'll see.
Karol:
So, yeah.
Aaron:
Yep, yep.
Aaron:
And hopefully within a year or so, I'll have a much stronger opinion on all this stuff because I've been kind of...
Karol:
Hopefully.
Aaron:
I've been using AI, but I haven't been doing AI.
Aaron:
You know what I mean?
Karol:
I'm still waiting for a lovely project somewhere of a client that actually wants to utilise MCP so I can jump into domain-driven design and actually building that...
Aaron:
Get a project.
Karol:
Yeah, MCP-related integrations and actually design that properly so that we can work that.
Karol:
Right now for me, it's a theoretical work, but I see that there is a strong connection to domain-driven design that the domain-driven design field will grow due to agent AI and the utilisation of data by agents.
Karol:
That's definitely going to be a mandatory thing to handle that data in that specific way.
Karol:
Yep.
Karol:
That said, we are way over two hours.
Aaron:
Yeah, we are actually.
Aaron:
Yeah, I'm like, I got to go pee soon.
Aaron:
it was such a rush to get here.
Aaron:
Honestly, I'm glad our planes were late this morning because there was more thunderstorms rolling around Ottawa.
Aaron:
So my plane into Ottawa was a bit late.
Aaron:
So I'm very happy, even though we're two hours past when we said we were going to do this, that you were flexible enough to allow me to get home.
Aaron:
Otherwise, well, I could have just hung out at the airport like in the corner.
Karol:
That would have been a little bit cringy to talk about these things with such excitement at an airport.
Karol:
That would be a little bit difficult.
Aaron:
Thank you for being flexible and allowing me to get home.
Aaron:
And thank you for hosting me on your cool podcast.
Aaron:
Maybe you should come on to my podcast at some point.
Karol:
Oh, definitely.
Karol:
Office hours for the win.
Karol:
Office hours.
Karol:
All those office hours.
Karol:
And for those, I'm going to switch for a moment.
Karol:
Take us, well, okay.
Aaron:
Take us off screen.
Karol:
Coming up next week.
Karol:
Exactly next week.
Karol:
We're going to be having a bit of a discussion.
Karol:
Topic that's very related to our now discussion about AI.
Karol:
So we're talking data mesh versus application integration.
Karol:
I'm having two lovely guests.
Karol:
Rachel Barton, who is a principal data and domain architect.
Karol:
And Andrew Jones, who's a principal engineer and author specialising in data contracts.
Karol:
That's going to be a very interesting conversation to be had.
Karol:
Because we're going to be looking at what are differences in the field between data mesh and application integration.
Karol:
What the hell is going on?
Karol:
Because I've had some really interesting comments on the topic after a workshop that I ran at DDD Europe this year.
Karol:
And I think there's a lot of misconceptions and basically differences in language.
Karol:
How people describe the data architecture and data mesh versus how we talk about application integration.
Karol:
And this is something we're going to be exploring in the next stream, which is going to be exactly in a week.
Karol:
And if you're still with us, if you're still watching, and if you want to catch all the interesting topics on live streams, but also articles, you can read more on application integration, enterprise application integration, event-driven architecture, API-led architecture at bridgingthegap.eu.com.
Karol:
You can subscribe to our sub stack where we release all those live streams as posts also release their articles with a little bit of a delay and sometimes have some conversations.
Karol:
And if you're still with us, subscribe to the YouTube channel.
Karol:
You'll get a ping about new streams coming up.
Karol:
I'm also planning a few video series, well, still in planning, but materials pending to be built up and recorded.
Karol:
So hopefully a little bit more content will be there alongside these live streams.
Karol:
So yeah, that said, we're going to be ending.
Karol:
What time is it in Ottawa right now?
Aaron:
It's coming up on 5.30 PM.
Aaron:
5.30, oof.
Aaron:
Yeah, time for dinner, lunch.
Karol:
Time for dinner.
Aaron:
Actually, so yeah.
Karol:
For you, time for dinner.
Karol:
For me, it's time to go to bed and get some sleep before I go to the office tomorrow.
Karol:
Thank you all for joining.
Karol:
And Aaron, it's not the last time that we're going to be seeing you.
Karol:
It's definitely the first of many.
Karol:
Yeah, we'll be chatting about more event-driven topics later on.
Karol:
I'll ping you offline to chat about those.
Karol:
We'll figure something out.
Aaron:
I didn't show my sunburst.
Aaron:
I have to come back and show the sunburst diagram at some point.
Karol:
So we already have a new topic to talk about.
Karol:
So we'll jump into that.
Karol:
So observability, analytics, these kinds of things, these are also EDA related, very important.
Karol:
Welcome back to EDA.
Karol:
There are also more specialists in the field of EDA that we could talk together about EDA.
Karol:
That's going to be probably interesting.
Karol:
So first occurrence, not the last one.
Karol:
So we'll see each other on the stream somewhere later.
Karol:
And yeah, thank you for watching.
Aaron:
Thank you, everybody.
Karol:
Have a lovely afternoon, evening, night, whatever it is in your time zone where you're watching this.