The following table summarizes how the different architectural elements of the FTGO Application1 were mapped to the proposed entities of the CNA quality model1.
Proposed Entity | FTGO Application Element |
---|---|
System | FTGO Application |
Component | {Service} | {Backing Service} | {Storage Backing Service} |
Service | Order Service | Restaurant Service | Delivery Service | Consumer Service | Kitchen Service | Accounting Service | Order History Service |
Endpoint | {Endpoint Mapping Table} |
External Endpoint | GET /orders?consumerId={consumerId} | GET /orders/{orderId} | POST /orders | POST /orders/{orderId}/revise | POST /orders/{orderId}/cancel | POST /consumers |
Backing Service | API Gateway | CDC Service | Kafka | Zookeeper | Zipkin |
Storage Backing Service | ftgo_consumer_service | ftgo_order_service | ftgo_kitchen_service | ftgo_restaurant_service | ftgo_accounting_service | ftgoorderhistoryservice | ftgo_accounting_service | ftgo_delivery_service | eventuate | DynamoDbLocal |
Link | {Link Mapping Table} |
Infrastructure | MySQL | DynamoDb | Docker Host | Local Computer |
Deployment Mapping | {Service | Backing Service} – hosted-on – Docker Host | DynamoDbLocal – hosted-on – DynamoDb | DynamoDb – hosted-on – Docker Host | {remaining Storage Backing Service} – hosted-on – MySQL | MySQL – hosted-on – Docker Host | Docker Host – hosted-on – Local Computer |
Request Trace | {Request Trace Mapping Table} |
Data Aggregate | Order | Restaurant | Consumer | Ticket | Account |
Backing Data | Kafka Server | Zookeeper Connection | Datasource Credentials & Configuration | Logging Configuration | Endpoints Configuration | EventuateTram Configuration | Spring Configuration | Metrics |
The different Request Trace entities included in the example application. Although the original specification of the entities2 defined that only Service entities can have Endpoints, the following table also provides Endpoints for Backing Service and Storage Backing Service entities. This is due to the fact that otherwise, some Link entities would directly point to specific Endpoints, whereas otherwise would not. Therefore, in order to use a consistent representation of Link entities, it was decided to change the entity specification such that Endpoints and External Endpoint entities are part-of Component instead of Service. Then, Backing Service entities and Storage Backing Service entities can also define Endpoints, as the following table does.
FTGO Application Element | |
---|---|
Order Service | POST /orders POST /orders/{orderId}/cancel POST /orders/{orderId}/revise GET /orders/{orderId} GET /restaurants/{restaurantId} |
Restaurant Service | POST /restaurants GET /restaurants/{restaurantId} |
Delivery Service | POST /couriers/{courierId}/availability GET /deliveries/{deliveryId} GET /deliveries?orderId={orderId}3 |
Consumer Service | POST /consumers GET /consumers/{consumerId} |
Kitchen Service | POST /tickets/{ticketId}/accept GET /restaurants/{restaurantId} GET /tickets?orderId={orderId}3 |
Accounting Service | GET /accounts/{accountId} GET /charges?orderId={orderId}3 |
Order History Service | GET /orders?consumerId={consumerId} Get /orders/{orderId} |
Kafka | For each topic exists a send-to and receive-from endpoint: orderService Topic consumerService Topic kitchenService Topic accountingService Topic net.chrisrichardson.ftgo.orderservice.domain.Order Topic net.chrisrichardson.ftgo.restaurantservice.domain.Restaurant Topic net.chrisrichardson.ftgo.consumerservice.domain.Consumer Topic net.chrisrichardson.ftgo.kitchenservice.domain.Ticket Topic net.chrisrichardson.ftgo.orderservice.createorder.CreateOrderSaga-reply Topic net.chrisrichardson.ftgo.orderservice.reviseorder.ReviseOrderSaga-reply Topic net.chrisrichardson.ftgo.orderservice.cancelorder.CancelOrderSaga-reply Topic |
CDC Service, Zookeeper & Zipkin4 | /connect |
DynamoDbLocal5 | /key-value |
ftgo_consumer_service, ftgo_order_service, ftgo_kitchen_service, ftgo_restaurant_service, ftgo_accounting_service, ftgoorderhistoryservice, ftgo_accounting_service, ftgo_delivery_service, eventuate5 | /sql |
The various Link entities included in the example application.
Proposed Entity | FTGO Application Element |
---|---|
Link | Order Service – subscribes-to – Kafka: orderService Topic receive-from Order Service – subscribes-to – Kafka: Restaurant Topic receive-from Order Service – subscribes-to – Kafka: CreateOrderSaga-reply Topic receive-from Order Service – subscribes-to – Kafka: ReviseOrderSaga-reply Topic receive-from Order Service – subscribes-to – Kafka: CancelOrderSaga-reply Topic receive-from Order Service – connects-to – Zookeeper: /connect Order Service – connects-to – Zipkin: /connect Order Service – connects-to – ftgo_order_service: /sql Restaurant Service – connects-to – Zookeeper: /connect Restaurant Service – connects-to – ftgo_restaurant_service: /sql Delivery Service – subscribes-to – Kafka: Order Topic receive-from Delivery Service – subscribes-to – Kafka: Restaurant Topic receive-from Delivery Service – subscribes-to – Kafka: Ticket Topic receive-from Delivery Service – connects-to – Zookeeper: /connect Delivery Service – connects-to – Zipkin: /connect Delivery Service – connects-to – ftgo_delivery_service: /sql Consumer Service – subscribes-to – Kafka: consumerService Topic receive-from Consumer Service – connects-to – Zookeeper: /connect Consumer Service – connects-to – ftgo_consumer_service: /sql Kitchen Service – subscribes-to – Kafka: kitchenService Topic receive-from Kitchen Service – subscribes-to – Kafka: Restaurant Topic receive-from Kitchen Service – connects-to – Zookeeper: /connect Kitchen Service – connects-to – ftgo_kitchen_service: /sql Accounting Service – subscribes-to – Kafka: accountingService Topic receive-from Accounting Service – subscribes-to – Kafka: Consumer Topic receive-from Accounting Service – connects-to – Zookeeper: /connect Accounting Service – connects-to – ftgo_accounting_service: /sql Order History Service – subscribes-to – Kafka: Order Topic receive-from Order History Service – connects-to – Zookeeper: /connect Order History Service – connects-to – DynamoDbLocal: /key-value API Gateway – routes-to – Order Service: "GET/orders/{orderId}" API Gateway – routes-to – Order Service: "POST /orders" API Gateway – routes-to – Order Service: "POST /orders/{orderId}/revise" API Gateway – routes-to – Order Service: "POST /orders/{orderId}/cancel" API Gateway – routes-to – Delivery Service: "GET /deliveries?orderId={orderId}" API Gateway – routes-to – Consumer Service: "POST /consumers" API Gateway – routes-to – Kitchen Service: "GET /tickets?orderId={orderId}" API Gateway – routes-to – Accounting Service: "GET /charges?orderId={orderId}" API Gateway – routes-to – Order History Service: "GET /orders?consumerId={consumerId}" CDC Service – publishes-to – Kafka: orderService Topic send-to CDC Service – publishes-to – Kafka: consumerService Topic send-to CDC Service – publishes-to – Kafka: kitchenService Topic send-to CDC Service – publishes-to – Kafka: accountingService Topic send-to CDC Service – publishes-to – Kafka: Order Topic send-to CDC Service – publishes-to – Kafka: Restaurant Topic send-to CDC Service – publishes-to – Kafka: Consumer Topic send-to CDC Service – publishes-to – Kafka: Ticket Topic send-to CDC Service – publishes-to – Kafka: CreateOrderSaga-reply Topic send-to CDC Service – publishes-to – Kafka: ReviseOrderSaga-reply Topic send-to CDC Service – publishes-to – Kafka: CancelOrderSaga-reply Topic send-to CDC Service – connects-to – Zookeeper: /connect CDC Service – reads-from – ftgo_order_service: /sql CDC Service – reads-from – ftgo_restaurant_service: /sql CDC Service – reads-from – ftgo_delivery_service: /sql CDC Service – reads-from – ftgo_consumer_service: /sql CDC Service – reads-from – ftgo_kitchen_service: /sql CDC Service – reads-from – ftgo_accounting_service: /sql CDC Service – reads-from – ftgoorderhistoryservice: /sql CDC Service – connects-to – eventuate: /sql Kafka – connects-to – Zookeeper: /connect |
The different Request Trace entities included in the example application.
Proposed Entity | FTGO Application Element |
---|---|
Request Trace | "GET /orders?consumerId={consumerId}": Trace[API Gateway, Order History Service, DynamoDbLocal, API Gateway – routes-to – Order History Service: "GET /orders?consumerId={consumerId}", Order History Service – connects-to – DynamoDbLocal: /key-value] |
"GET /orders/{orderId}": Trace[API Gateway, Order Service, Kitchen Service, Delivery Service, Accounting Service, ftgo_order_service, ftgo_kitchen_service, ftgo_delivery_service, ftgo_accounting_service, API Gateway – routes-to – Order Service: "GET/orders/{orderId}", Order Service – connects-to – ftgo_order_service: /sql, API Gateway – routes-to – Kitchen Service: "GET /tickets?orderId={orderId}", Kitchen Service – connects-to – ftgo_kitchen_service: /sql, API Gateway – routes-to – Delivery Service: "GET /deliveries?orderId={orderId}", Delivery Service – connects-to – ftgo_delivery_service: /sql, API Gateway – routes-to – Accounting Service: "GET /charges?orderId={orderId}", Accounting Service – connects-to – ftgo_accounting_service: /sql] |
|
"POST /orders": Trace[API Gateway, Order Service, Consumer Service, Kitchen Service, Accounting Service, CDC Service, Delivery Service, Order History Service, Kafka, ftgo_order_service, ftgo_consumer_service, ftgo_kitchen_service, ftgo_accounting_service, API Gateway – routes-to – Order Service: "POST /orders", Order Service – connects-to – ftgo_order_service: /sql, CDC Service – reads-from – ftgo_order_service: /sql, CDC Service – publishes-to – Kafka: consumerService Topic send-to, Consumer Service – subscribes-to – Kafka: consumerService Topic receive-from, Consumer Service – connects-to – ftgo_consumer_service: /sql, CDC Service – reads-from – ftgo_consumer_service: /sql, CDC Service – publishes-to – Kafka: CreateOrderSaga-reply Topic send-to, Order Service – subscribes-to – Kafka: CreateOrderSaga-reply Topic receive-from, CDC Service – publishes-to – Kafka: kitchenService Topic send-to, Kitchen Service – subscribes-to – Kafka: kitchenService Topic receive-from, Kitchen Service – connects-to – ftgo_kitchen_service: /sql, CDC Service – reads-from – ftgo_kitchen_service: /sql, CDC Service – publishes-to – Kafka: accountingService Topic send-to, Accounting Service – subscribes-to – Kafka: accountingService Topic receive-from, Accounting Service – connects-to – ftgo_accounting_service: /sql, CDC Service – reads-from – ftgo_accounting_service: /sql, CDC Service – publishes-to – Kafka: orderService Topic send-to, Order Service – subscribes-to – Kafka: orderService Topic receive-from, CDC Service – publishes-to – Kafka: Order Topic send-to, CDC Service – publishes-to – Kafka: Ticket Topic send-to, Order History Service – subscribes-to – Kafka: Order Topic receive-from, Delivery Service – subscribes-to – Kafka: Order Topic receive-from] |
|
"POST /orders/{orderId}/revise": Trace[API Gateway, Order Service, Kitchen Service, Accounting Service, CDC Service, Kafka, ftgo_order_service, ftgo_kitchen_service, ftgo_accounting_service, API Gateway – routes-to – Order Service: "POST /orders/{orderId}/revise", Order Service – connects-to – ftgo_order_service: /sql, CDC Service – reads-from – ftgo_order_service: /sql, CDC Service – publishes-to – Kafka: orderService Topic send-to, Order Service – subscribes-to – Kafka: orderService Topic receive-from, CDC Service – publishes-to – Kafka: ReviseOrderSaga-reply Topic send-to, Order Service – subscribes-to – Kafka: ReviseOrderSaga-reply Topic receive-from, CDC Service – publishes-to – Kafka: kitchenService Topic send-to, Kitchen Service – subscribes-to – Kafka: kitchenService Topic receive-from, Kitchen Service – connects-to – ftgo_kitchen_service: /sql, CDC Service – reads-from – ftgo_kitchen_service: /sql, CDC Service – publishes-to – Kafka: accountingService Topic send-to, Accounting Service – subscribes-to – Kafka: accountingService Topic receive-from, Accounting Service – connects-to – ftgo_accounting_service: /sql, CDC Service – reads-from – ftgo_accounting_service: /sql, CDC Service – publishes-to – Kafka: Ticket Topic send-to, CDC Service – publishes-to – Kafka: Order Topic send-to] |
|
"POST /orders/{orderId}/cancel": Trace[API Gateway, Order Service, Kitchen Service, Accounting Service, Delivery Service, Order History Service, CDC Service, Kafka, ftgo_order_service, ftgo_kitchen_service, ftgo_accounting_service, API Gateway – routes-to – Order Service: "POST /orders/{orderId}/cancel", Order Service – connects-to – ftgo_order_service: /sql, CDC Service – reads-from – ftgo_order_service: /sql, CDC Service – publishes-to – Kafka: orderService Topic send-to, Order Service – subscribes-to – Kafka: orderService Topic receive-from, CDC Service – publishes-to – Kafka: CancelOrderSaga-reply Topic send-to, Order Service – subscribes-to – Kafka: CancelOrderSaga-reply Topic receive-from, CDC Service – publishes-to – Kafka: kitchenService Topic send-to, Kitchen Service – subscribes-to – Kafka: kitchenService Topic receive-from, Kitchen Service – connects-to – ftgo_kitchen_service: /sql, CDC Service – reads-from – ftgo_kitchen_service: /sql, CDC Service – publishes-to – Kafka: accountingService Topic send-to, Accounting Service – subscribes-to – Kafka: accountingService Topic receive-from, Accounting Service – connects-to – ftgo_accounting_service: /sql, CDC Service – reads-from – ftgo_accounting_service: /sql, CDC Service – publishes-to – Kafka: Ticket Topic send-to, CDC Service – publishes-to – Kafka: Order Topic send-to, Delivery Service – subscribes-to – Kafka: Ticket Topic receive-from, Order History Service – subscribes-to – Kafka: Order Topic receive-from] |
|
"POST /consumers": Trace[API Gateway, Consumer Service, Accounting Service, CDC Service, Kafka, ftgo_consumer_service, API Gateway – routes-to – Consumer Service: "POST /consumers", Consumer Service – connects-to – ftgo_consumer_service: /sql, CDC Service – reads-from – ftgo_consumer_service: /sql, CDC Service – publishes-to – Kafka: Consumer Topic send-to, Accounting Service – subscribes-to – Kafka: Consumer Topic receive-from] |