DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Because the DevOps movement has redefined engineering responsibilities, SREs now have to become stewards of observability strategy.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Related

  • Event Driven Architecture (EDA) - Optimizer or Complicator
  • Event-Driven Microservices: How Kafka and RabbitMQ Power Scalable Systems
  • Exploring Intercooler.js: Simplify AJAX With HTML Attributes
  • Streamlining Event Data in Event-Driven Ansible

Trending

  • Caching 101: Theory, Algorithms, Tools, and Best Practices
  • Designing Fault-Tolerant Messaging Workflows Using State Machine Architecture
  • ITBench, Part 1: Next-Gen Benchmarking for IT Automation Evaluation
  • Data Lake vs. Warehouse vs. Lakehouse vs. Mart: Choosing the Right Architecture for Your Business

What Aren’t Events?

What are Events, and more importantly, what aren't Events?

By 
Cameron HUNT user avatar
Cameron HUNT
·
Oct. 24, 22 · Opinion
Likes (4)
Comment
Save
Tweet
Share
4.7K Views

Join the DZone community and get the full member experience.

Join For Free

Despite the hype around ‘Event-Driven Architecture’ (EDA) over the past few years, I am confident that you will be unable to find a solid definition for ‘Event,’ on the web today. After an hour of research, the best definition I managed to find is one of several definitions provided by Red Hat: “We will define a software event as the immutable record that something happened within an application… Normally, events are broadcast to notify of change or replicate state across multiple applications.” Here, Red Hat are talking specifically about ‘Software Events’: each of which signals a ‘change of state’ in a particular ‘entity’ (e.g. Customer address changed) within a given distributed application.

This definition perhaps seems very straightforward, but what is not mentioned, is that there are in fact three different types of ‘Events’ according to today’s pundits:

  1. Notification Events: These carry no more than the key identifiers of the entity that was changed (e.g. Customer ID) in order to “notify of change” – but clearly in no way to “replicate state across multiple applications,” as state changes are entirely absent from the event payload. An additional call to the source system is in fact required by each individual event consumer, to (attempt to) determine precisely which state changes were made.
  2. [Event-Carried State Transfer/Decision] Events: These carry only those attributes of the business entity that were actually changed – without any doubt the sweet spot in the world of EDA and something that is slowly becoming the norm for good reason.
  3. Data Events: These carry the entire current ‘state’ of the business entity that was changed, making it very simple to “replicate state across multiple applications,” but extremely difficult to know precisely which attributes were changed.

Given that we have defined (Software) Events as an “immutable record that something happened within an application,” I am happy to go so far as to disqualify ‘Notification Events’ entirely as true ‘Events:’ They contain nothing other than the entity’s key, which we never change, and nothing else that might be referred to as “immutable.” Indeed, if there are two separate consumers of a ‘Notification Event,’ and they each make their callbacks to the source system at different times to determine what changes were made to the relevant entity, they can both indeed receive different results given that subsequent changes might have been made to the same entity between the two calls: hardly an immutable record.

What is even more interesting, is that if we consider Microsoft’s definition of ‘Event,’ we read that: “An event is the smallest amount of information that fully describes something that happened in the system.” As such, according to Microsoft, we just eliminated ‘Data Events’ as well, as these contain all of the changed entity’s attributes, regardless of whether or not changes were made to those attributes: far from “the smallest amount of information that fully describes something that happened.” This now leaves us with only ECST/Decision Events, or what I prefer to call quite simply ‘Events,’ and the EDA universe becomes clearer.

We also see loose, and even factually incorrect use of the term ‘Event’ in the world of IoT. We are told that IoT devices generate massive numbers of ‘Events’ each day, above all in the context of ‘Streaming Analytics’ use cases. These ‘IoT Events’ are said to result from, for example, regular, high-frequency temperature and velocity readings of a conveyor belt motor, needed to facilitate ongoing Streaming Analytics: in order to detect discrepancies between readings over a rolling window of time. What should be entirely obvious, is that the temperature and velocity readings for the same motor can and indeed should be identical for the most part, meaning there is typically no “change of state” whatsoever between the large majority of corresponding ‘IoT Events.’ This is precisely why ‘IoT Events’ – unlike EDA-relevant ‘Events’ – typically aren’t even persisted: they are of little to no value outside of the timeframe that is being analyzed.

This might all seem quite trivial, but if we can’t even arrive at a common definition for what an ‘Event’ is, then we have no chance whatsoever of clearly defining ‘Event-Driven Architecture.’ Therefore, above and beyond my previous analysis of the three most often discussed event patterns, we must also learn to separate ‘IoT telemetry’ – which generates millions of immediately analyzed, non-persisted records – from any resultant ‘Events,’ which in most cases are generated by concerned Streaming Analytics solutions – and not by the IoT devices themselves – to signal a significant change of state (e.g. Motor high temperature exceeded). Only the latter will typically be persisted; only the latter are ‘Events.’

In a separate, alternative definition of ‘Event’ provided by RedHat, we read that “An event is any significant occurrence or change in state” in a system. This is quite interesting because a “change in state” in itself undoubtedly represents a “significant occurrence,” which suggests that we must also consider any other “significant occurrence” that might be anticipated. This makes me think first of all of the worlds of web development, where we often hear talk of ‘UI Events.’ If the user clicks on a button to trigger an action, has there been a ‘change of state’ to the UI? Not at all, but it can be said that there was a “significant occurrence.” On the other hand, if the user also entered a response into one of the fields shown on the UI, then there was indeed a change to the UI’s state. Each of these UI examples seems to meet this second Red Hat definition of an ‘Event,’ yet it must be pointed out that a Distributed Application as a whole has no interest whatsoever in the events that are occurring on individual user PCs, in individual user applications.

So what of ‘System Events,’ such as ‘Audit Events’ when an application user accesses sensitive data or enters an incorrect password three times? Whilst each of these examples undoubtedly represents another category of ‘Software Event,’ the Distributed Application as a whole is typically uninterested in such events. Given this, we must conclude that the lifeblood of EDA – the modern architecture used to build distributed applications – is one, and only one type of event: ‘Business Events’ – "the smallest amount of information that fully describes" a 'Change of State' in a Business Entity.

Event

Opinions expressed by DZone contributors are their own.

Related

  • Event Driven Architecture (EDA) - Optimizer or Complicator
  • Event-Driven Microservices: How Kafka and RabbitMQ Power Scalable Systems
  • Exploring Intercooler.js: Simplify AJAX With HTML Attributes
  • Streamlining Event Data in Event-Driven Ansible

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!