Microservices Map with API Gateway & Service Mesh
Eight bounded-context services inside an Istio mesh pool, fronted by an API gateway, wired to Kafka for domain events and to their own datastores — with the mesh control plane drawn as a nested frame.
Rendering…
Make it your own.
{
"nodes": [
{ "id": "mesh", "type": "pool", "label": "Service mesh — Istio, mTLS between all services", "x": 400, "y": 20, "width": 760, "height": 560, "fill": "rgba(241,245,249,0.45)", "stroke": "#475569" },
{ "id": "ctl", "type": "container", "label": "Mesh control plane", "x": 430, "y": 380, "width": 720, "height": 150, "fill": "rgba(237,233,254,0.26)", "stroke": "#6d28d9" },
{ "id": "web", "type": "browser-window", "label": "Web app", "x": 40, "y": 60, "width": 150, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "mob", "type": "mobile-device", "label": "iOS / Android", "x": 40, "y": 200, "width": 150, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "part", "type": "cloud", "label": "Partner API callers","x": 40, "y": 355, "width": 160, "height": 74, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "gw", "type": "api-gateway", "label": "API gateway — Kong", "x": 230, "y": 170, "width": 150, "height": 104, "fill": "#dcfce7", "stroke": "#15803d", "bold": true },
{ "id": "auth", "type": "fingerprint", "label": "Auth service (OIDC)", "x": 230, "y": 340, "width": 150, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" },
{ "id": "ord", "type": "microservice", "label": "orders", "x": 440, "y": 80, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8", "bold": true },
{ "id": "cat", "type": "microservice", "label": "catalogue", "x": 620, "y": 80, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "pri", "type": "microservice", "label": "pricing", "x": 800, "y": 80, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "inv", "type": "microservice", "label": "inventory", "x": 980, "y": 80, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "pay", "type": "microservice", "label": "payments", "x": 440, "y": 230, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "shp", "type": "microservice", "label": "shipping", "x": 620, "y": 230, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "ntf", "type": "microservice", "label": "notifications","x": 800, "y": 230, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "srch", "type": "microservice", "label": "search", "x": 980, "y": 230, "width": 140, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "istiod", "type": "component", "label": "istiod — xDS", "x": 460, "y": 410, "width": 140, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
{ "id": "kiali", "type": "line-chart", "label": "Kiali — topology", "x": 630, "y": 410, "width": 140, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
{ "id": "jaeger", "type": "scatter-chart","label": "Jaeger — traces", "x": 810, "y": 410, "width": 140, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
{ "id": "cert", "type": "certificate", "label": "mTLS cert issuer", "x": 990, "y": 410, "width": 140, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
{ "id": "pgo", "type": "cylinder", "label": "Postgres — orders", "x": 1200, "y": 100, "width": 150, "height": 70, "fill": "#fef3c7", "stroke": "#b45309" },
{ "id": "ddbc", "type": "aws-dynamo", "label": "DynamoDB — catalogue","x": 1200, "y": 220, "width": 140, "height": 110, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "redis", "type": "cache", "label": "Redis — price cache", "x": 1200, "y": 380, "width": 140, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" },
{ "id": "kafka", "type": "event-bus", "label": "Kafka — domain events","x": 560, "y": 620, "width": 160, "height": 104, "fill": "#fef3c7", "stroke": "#b45309", "bold": true }
],
"edges": [
{ "id": "m1", "source": "web", "target": "gw", "thickness": 2 },
{ "id": "m2", "source": "mob", "target": "gw", "thickness": 2 },
{ "id": "m3", "source": "part", "target": "gw", "label": "rate limited" },
{ "id": "m4", "source": "gw", "target": "auth", "label": "verify JWT", "style": "dashed" },
{ "id": "m5", "source": "gw", "target": "ord", "label": "/orders", "thickness": 3 },
{ "id": "m6", "source": "gw", "target": "cat", "label": "/catalogue" },
{ "id": "m7", "source": "gw", "target": "srch", "label": "/search" },
{ "id": "m8", "source": "ord", "target": "pay", "label": "authorise" },
{ "id": "m9", "source": "ord", "target": "inv", "label": "reserve stock" },
{ "id": "m10", "source": "cat", "target": "pri", "label": "price lookup" },
{ "id": "m11", "source": "ord", "target": "kafka","label": "OrderPlaced", "thickness": 2 },
{ "id": "m12", "source": "kafka","target": "shp", "label": "subscribe" },
{ "id": "m13", "source": "kafka","target": "ntf", "label": "subscribe" },
{ "id": "m14", "source": "ord", "target": "pgo" },
{ "id": "m15", "source": "cat", "target": "ddbc" },
{ "id": "m16", "source": "pri", "target": "redis" },
{ "id": "m17", "source": "istiod","target": "ord", "label": "xDS config", "style": "dashed" },
{ "id": "m18", "source": "cert", "target": "pay", "label": "workload cert","style": "dashed" },
{ "id": "m19", "source": "ord", "target": "jaeger","label": "spans", "style": "dashed" },
{ "id": "m20", "source": "kiali","target": "istiod","label": "reads config","style": "dashed" }
]
}