From 3c71045f7bc147f69b53bba1d8b4134d9951f84d Mon Sep 17 00:00:00 2001 From: Sarah Allen Date: Thu, 1 Feb 2018 05:16:49 -0800 Subject: [PATCH] starter doc explaining key concepts from the spec --- about/concepts.md | 28 ++++++++++++++++++++++++++++ about/img/source-event-action.png | Bin 0 -> 14563 bytes 2 files changed, 28 insertions(+) create mode 100644 about/concepts.md create mode 100644 about/img/source-event-action.png diff --git a/about/concepts.md b/about/concepts.md new file mode 100644 index 000000000..9f15e0ca7 --- /dev/null +++ b/about/concepts.md @@ -0,0 +1,28 @@ + +# CloudEvents Concepts + +**Event**: data representing an occurrence, a change in state, that something happened (or did not happen). + +**Occurrence**: something that happens (or doesn’t happen) and is detected by a software system (“source”). + +Events include context and data. Each occurrence is uniquely identified by the data of the event. Events represent facts and therefore do not include a destination, whereas messages convey intent, transporting data from a source to a given destination. + +## Eventing + +Events are commonly used in server-side code to connect disparate systems where the change of state in one system causes code to execute in another. For example, a source may generate an event when it receives an external signal (e.g. HTTP or RPC) or observes a changing value (e.g. an IoT sensor or period of inactivity). + +To illustrate how a system uses CloudEvents, the simplified diagram below shows how an **event** from a **source** triggers an **action**. + +![alt text](img/source-event-action.png "A box representing the source with arrow pointing to a box representing the action. The arrow is annotated with 'e' for event and 'protocol'.") + +The source generates a message where the event is encapsulated in a protocol. The event arrives to a destination, triggering an action which is provided with the event data. + +**Source**: the software instance that generates the event at runtime. + +A **source** is a specific instance of a **source-type** which allows for staging and test instances. Open source software of a specific **source-type** may be deployed by multiple companies or providers. + +Events can be delivered through various industry standard protocols (e.g. HTTP, AMQP, MQTT, SMTP), open-source protocols (e.g. Kafka, NATS), or platform/vendor specific protocols (AWS Kinesis, Azure Event Grid). + +An **action** processes an **event** defining a behavior or effect which was triggered by a specific **occurrence** from a specific **source**. + + diff --git a/about/img/source-event-action.png b/about/img/source-event-action.png new file mode 100644 index 0000000000000000000000000000000000000000..fe938f088f1ff67a99ad0b7fe70bffaefbde7046 GIT binary patch literal 14563 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