-
Notifications
You must be signed in to change notification settings - Fork 153
/
C4 usage - IoT Reference Architecture - Stateful stream processing.puml
45 lines (32 loc) · 2.21 KB
/
C4 usage - IoT Reference Architecture - Stateful stream processing.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@startuml
!pragma revision 1
!includeurl https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
' !define AzurePuml https://raw.githubusercontent.com/plantuml-stdlib/Azure-PlantUML/master/dist
!define AzurePuml ../dist
!includeurl AzurePuml/AzureCommon.puml
!includeurl AzurePuml/AzureC4Integration.puml
!include ../dist/Compute/AzureFunction.puml
!includeurl AzurePuml/Analytics/AzureStreamAnalyticsJob.puml
!includeurl AzurePuml/Analytics/AzureEventHub.puml
!includeurl AzurePuml/Databases/AzureCosmosDb.puml
!includeurl AzurePuml/Storage/AzureBlobStorage.puml
!includeurl AzurePuml/InternetOfThings/AzureIoTHub.puml
LAYOUT_LEFT_RIGHT
LAYOUT_WITH_LEGEND()
AddElementTag("v1.0", $borderColor="red" )
System(devices, "Devices")
AzureIoTHub(iotHub, "IoT Hub", "Standard S1", "Ingress point for all telemetry, using built-in IoT Hub Routes for routing")
AzureEventHub(eventHubTelemetry, "Device Telemetry", "Standard, 5 TUs, 4 Partitions", "In addition to the built-in 'Receive device-to-cloud messages' from IoT Hub")
AzureFunction(telemetryFunction, "Telemetry Processing", "v1, App Service plan P3v2, C#", "transform it into a different format, e.g. joining external information")
AzureCosmosDb(warmStorageCosmos, "Warm Storage", "2,000 RUs", "for consumption, e.g. display on a dashboard")
AzureStreamAnalyticsJob(streamAnalytics, "Stream Analytics", "6 SUs", "apply complex queries over time periods, tolerates late (up to 21 days) and out-of-order (up to one hour) events")
AzureFunction(alertingFunction, "Alerting", "v2, Consumption plan, JS", $tags="v1.0")
AzureBlobStorage(coldBlobStorage, "Cold Storage", "General Purpose v2, Cool, RA-GRS", "all incoming data records are archived indefinitely at low cost, and are easily accessible for batch processing")
Rel(devices, iotHub, "Send telemetry to")
Rel(iotHub, eventHubTelemetry, "Routes all telemetry to")
Rel_Back(iotHub, streamAnalytics, "Analyzes each event from")
Rel(iotHub, coldBlobStorage, "Routes all telemetry to")
Rel_Back(eventHubTelemetry, telemetryFunction, "Processes each event from")
Rel(streamAnalytics, alertingFunction, "Triggers for output batches to")
Rel(telemetryFunction, warmStorageCosmos, "Writes all transformed events to")
@enduml