{
  "docVersion": 1,
  "id": "blog-tenancy-d2",
  "name": "Silo vs pool — the isolation vocabulary",
  "purpose": "Silo: dedicated resources per tenant. Pool: shared resources with logical isolation via a tenant identifier.",
  "nodes": {
    "sa": {
      "type": "user",
      "label": "Tenant A",
      "x": 40,
      "y": 40,
      "w": 130,
      "h": 84
    },
    "sb": {
      "type": "user",
      "label": "Tenant B",
      "x": 210,
      "y": 40,
      "w": 130,
      "h": 84
    },
    "sda": {
      "type": "database",
      "label": "A's resources",
      "x": 40,
      "y": 200,
      "w": 130,
      "h": 84,
      "color": "green"
    },
    "sdb": {
      "type": "database",
      "label": "B's resources",
      "x": 210,
      "y": 200,
      "w": 130,
      "h": 84,
      "color": "green"
    },
    "pa": {
      "type": "user",
      "label": "Tenant A",
      "x": 560,
      "y": 40,
      "w": 130,
      "h": 84
    },
    "pb": {
      "type": "user",
      "label": "Tenant B",
      "x": 730,
      "y": 40,
      "w": 130,
      "h": 84
    },
    "pd": {
      "type": "database",
      "label": "Shared resources",
      "x": 645,
      "y": 220,
      "w": 170,
      "h": 90,
      "color": "blue",
      "runtime": "every row: tenant_id"
    }
  },
  "edges": {
    "e1": {
      "from": "sa",
      "to": "sda",
      "fromSide": "bottom",
      "toSide": "top"
    },
    "e2": {
      "from": "sb",
      "to": "sdb",
      "fromSide": "bottom",
      "toSide": "top"
    },
    "e3": {
      "from": "pa",
      "to": "pd",
      "fromSide": "bottom",
      "toSide": "top",
      "label": "WHERE tenant_id=A"
    },
    "e4": {
      "from": "pb",
      "to": "pd",
      "fromSide": "bottom",
      "toSide": "top"
    }
  },
  "boxes": {
    "z1": {
      "x": 10,
      "y": -30,
      "w": 370,
      "h": 400,
      "label": "SILO — no neighbors, per-tenant cost",
      "color": "green",
      "opacity": 0.04
    },
    "z2": {
      "x": 530,
      "y": -30,
      "w": 370,
      "h": 400,
      "label": "POOL — best economics, logical walls",
      "color": "blue",
      "opacity": 0.04
    }
  },
  "texts": {
    "t1": {
      "x": 10,
      "y": 420,
      "text": "BRIDGE = silo and pool mixed per layer — decided per microservice\n(the post's main diagram is a bridge: pooled app tier, split data tier)",
      "color": "amber",
      "size": 12
    }
  },
  "meta": {
    "createdAt": "2026-07-19T09:00:00.000Z",
    "modifiedAt": "2026-07-19T09:00:00.000Z"
  }
}