Integration Platform: architectuur¶
Deze pagina beschrijft het globale ontwerp van het Integration Platform: de layers, de workloads en spokes, de omgevingen, het netwerk, identity, security en resilience. Het is het referentieontwerp. Jouw deployment kan afwijken in het aantal omgevingen, de shared services die zijn ingeschakeld en de gekozen opties. Vraag het aan je platformteam.
Principes¶
Het Integration Platform erft de ontwerpprincipes van MCP (Ontwerpprincipes) en voegt er vier van zichzelf aan toe.
| Principe | Betekenis |
|---|---|
| Cloud-first | Gebruik cloud-native Azure-services voor schaalbaarheid, betrouwbaarheid en kostenefficiëntie. |
| Gestandaardiseerd maar uitbreidbaar | Standaardpatronen halen infrastructuurcomplexiteit weg en geven hergebruik. Als er een nieuw patroon opkomt, kan op beheerste wijze een nieuwe bouwsteen worden toegevoegd. |
| Event-driven | Integraties reageren in real time, schalen onafhankelijk en blijven losjes gekoppeld. |
| You build it, you run it | Het team dat een integratie bouwt is gedurende de hele levensduur verantwoordelijk voor die integratie: deployment, monitoring en herstel. Automatisering en DevOps-praktijken ondersteunen dat. |
Capabilities¶
Het platform drukt zijn aanbod uit in technologie-agnostische capabilities. Het referentieontwerp koppelt elke capability aan ingrediënten. Een capability kan door een organisatie wel of niet nodig zijn. Wat nodig is, is een keuze per platform.
| Capability | Wat het omvat | Typische ingrediënten |
|---|---|---|
| Message and event brokering | Asynchrone, event-gebaseerde communicatie met volgorde, leveringsgaranties en ontdubbeling | Service Bus, Event Hubs |
| API management | API's ontwikkelen, publiceren, beveiligen, monitoren en analyseren | API Management |
| Low-code modules | Integraties gebouwd met configuratie, workflows en drag-and-drop | Logic App, Data Factory |
| High-code modules | Integratielogica in een programmeertaal, met de runtime en infrastructuur geleverd | Function App, Container App |
| Triggers and jobs | Geplande en door events getriggerde verwerking, batchjobs | Container jobs, Logic Apps, Data Factory |
| Infrastructure | Platforminfrastructuur en infrastructuur voor nieuwe integraties, inclusief gedeelde build runners | Spoke canvas, modules, container registry |
| Recipes and documentation | Richtlijnen, voorbeelden en best practices voor builders | Documentatiegeneratie |
| Provisioning and automation | Templates voor deploymentpipelines, geen handmatige infrastructuur | Terraform-modules, herbruikbare workflow |
| Collaboration | Broncode en automatisering op het repositoryplatform, work items in een ticketingtool | GitHub (referentieontwerp) |
Verdere capabilities die een platform kan toevoegen als er een duidelijke behoefte is: verbindingen met bronsystemen, documentverwerking, een integratiedirectory, AI-augmentatie en B2B-integratie (EDI, AS2). Ze maken geen deel uit van het referentieontwerp.
Layers¶
Het ontwerp scheidt wat waarop draait (ADR-010, ADR-011).
flowchart TB
subgraph L3["Consumption"]
iw["Integration workloads<br/>Logic Apps, Function Apps, Container Apps, Data Factory, API definitions"]
end
subgraph L2["Platform core"]
ssw["Shared services workload<br/>Service Bus, Event Hubs, API Management, ACR"]
cpw["Control plane workload<br/>configuration, access control, governance of the shared services"]
cpw -->|"configures"| ssw
end
subgraph L1["Foundation: MCP"]
hub["Hub: network, firewall, DNS, identity governance"]
sp["Spokes (spoke canvas)"]
end
iw -->|"consumes"| ssw
L2 -->|"runs on"| L1
L3 -->|"runs on"| L1
| Layer | Verantwoordelijkheid | Gerealiseerd als |
|---|---|---|
| Foundation | Netwerk, firewalling, DNS, identity governance, securitygrenzen ("de kiestoon") | MCP hub en spokes. Het platform bouwt geen eigen netwerkbackbone. |
| Platform core | De engines (shared services) en het control plane dat hun configuratie en toegang beheert | Een shared services spoke en een control plane-deployment |
| Consumption | De integraties die builders maken | Spokes voor integratieworkloads |
Door engine en control plane te scheiden kan het control plane opnieuw worden gedeployd of bijgewerkt zonder de uptime van de shared services te raken. De prijs is afstemming: beide moeten het eens zijn over wat er is gedeployd, en het verkeer ertussen loopt via de hub firewall.
Workloads, spokes en omgevingen¶
Een workload bestaat uit één of meer omgevingen, en elke omgeving is een spoke: een eigen Azure subscription met de basisinfrastructuur van het spoke canvas (Wat je krijgt). Elk virtueel netwerk van een spoke is gepeerd met de hub.
| Workload | Bevat |
|---|---|
| Shared services workload | De ingeschakelde shared services. De basisdeployment bevat alleen de Azure Container Registry, omdat het platform die nodig heeft om ingrediënten te publiceren. Andere worden toegevoegd als workloads ze nodig hebben. |
| Integration Platform workload | De ingeschakelde platformservices. De basisdeployment bevat DNS, bijvoorbeeld voor de naamresolutie van extern blootgestelde API's. |
| Integratieworkloads | De integraties. Elke gebruikt spoke-extensies om te verbinden met de shared services die ze nodig heeft, en modules om haar integratieservices te deployen. |
flowchart TB
hub["MCP hub: firewall, DNS"]
subgraph prd["Production"]
ssp["Shared services spoke (prod)"]
ipp["Integration Platform spoke (prod)"]
w1p["Integration workload spoke (prod)"]
end
subgraph nprd["Non-production"]
ssn["Shared services spoke (non-prod)"]
ipn["Integration Platform spoke (non-prod)"]
w1n["Integration workload spoke (non-prod)"]
end
hub --- ssp & ipp & w1p
hub --- ssn & ipn & w1n
w1p -.->|"extension"| ssp
w1n -.->|"extension"| ssn
Ontwerpkeuzes van het referentieontwerp:
- Twee omgevingen voor het platform, productie en niet-productie, zodat nieuwe versies van shared services buiten productie kunnen worden getest. Er kunnen meer omgevingen worden toegevoegd, omdat een platforminstantie met automatisering opnieuw kan worden gedeployd. Kosten en complexiteit zijn de reden om het bij twee te houden.
- Workloads volgen hun omgeving. Productieworkloads verbinden met het productieplatform, niet-productieworkloads met het niet-productieplatform. Het aantal spokes per workload wordt per workload gekozen.
- Een resource die goedkoop is en geen bedrijfsdata bevat, kan één keer worden gedeployd. Een Azure Container Registry wordt bijvoorbeeld doorgaans één keer voor het hele landschap gedeployd, niet per omgeving.
- Verbindingen zijn nooit impliciet. Elke verbinding tussen workloads, of naar buiten, loopt via de hub firewall en heeft een regel nodig (Firewallregels en IP-groepen). Een integratieworkload gebruikt niet standaard een shared service. Een workload mag er geen gebruiken.
- Integraties met on-premises systemen lopen via de hub en zijn firewall. Het is de bedoeling dat ze in een migratie tijdelijk zijn.
Hoe je een workload afbakent¶
Een integratieworkload kan op verschillende manieren worden afgebakend, alleen of gecombineerd. Begin met één of een paar workloads en splits ze als dat nodig is.
| Afbakening | Sterk punt | Let op |
|---|---|---|
| Per team | Duidelijke verantwoordelijkheid en autonomie, snelle beslissingen | Duplicatie als teams geen kennis delen |
| Per functioneel domein | Past bij domain-driven design, hergebruik binnen een domein | Afstemming voor domeinoverstijgende zaken |
| Per systeem | Eenvoudige lifecycle, systeemspecifieke controls | Vervaagd eigenaarschap als meerdere teams het systeem raken, lastig voor integraties die meerdere systemen beslaan |
| Per flow (alles tussen systeem A en B) | Traceerbaarheid, isolatie, eenvoudige troubleshooting | Veel kleine workloads, operationele overhead per flow |
Netwerk¶
Het Integration Platform past dezelfde segregatie toe als MCP. De hub firewall staat standaard alleen verkeer binnen een spoke toe. Om verkeer naar of vanaf een bron of bestemming buiten de spoke toe te staan, dien je een standaardwijziging in bij het platformteam (Firewallregels en IP-groepen). Verkeer van en naar on-premises wordt standaard geblokkeerd.
Shared services en modules gebruiken standaard private networking. Azure kent drie isolatieniveaus:
| Niveau | Wat het doet | Richting |
|---|---|---|
| VNet integration | De service stuurt uitgaand verkeer via de Azure-backbone het VNet en gepeerde VNets in | Uitgaand |
| VNet injection (subnet delegation) | De service draait in een eigen subnet met eigen private IP's | Inkomend en uitgaand |
| Private Link met private endpoints | De service krijgt een privé-IP in een subnet en zijn publieke toegang kan worden uitgezet | Alleen inkomend |
VNet injection heeft de voorkeur als de service het ondersteunt, maar het kan meer kosten vanwege dedicated compute. Anders worden private endpoints gecombineerd met VNet integration. API Management laat het verschil zien: de Premium-tier (classic) ondersteunt injection, Standard v2 alleen integration met private endpoints (Shared services).
Private endpoints in het platform hebben ook naamresolutie nodig vanuit je eigen netwerken. De vereiste DNS-forwarding staat op DNS voor private endpoints. Het MCP-ontwerp staat in DNS-ontwerp.
Als een API of endpoint vanaf internet bereikbaar moet zijn, zet die dan achter de Application Gateway met WAF van de hub (Shared services). De hub biedt DDoS-bescherming op het publieke IP van de Application Gateway.
Identity en toegang¶
Het Integration Platform volgt de RBAC- en PIM-standaarden van MCP (Identity- en toegangsmodel, Toegang, groepen en PIM): least privilege en just-in-time.
Daarbovenop gebruikt het platform twee patronen, beide beschreven in Beslissingen:
- Groepsgebaseerde delegatie van toegang (ADR-005). Resources krijgen nooit roltoewijzingen voor individuele identities. Elke permissie (bijvoorbeeld "send to queue X") is een Entra ID-groep. Het workload team is eigenaar van het lidmaatschap en wijzigt het zonder pipelinerun.
- Administrative units (ADR-004). De automatisering die groepen aanmaakt is beperkt tot een Entra ID administrative unit. Een gecompromitteerde automatiseringsidentity kan geen groepen buiten die unit wijzigen.
Spoke-extensies maken per spoke de basisgroepen en roltoewijzingen aan. Lees wat een extensie aanmaakt in Spoke-extensies.
Security¶
| Onderwerp | Referentieontwerp |
|---|---|
| Policies | Geen andere policies dan die van MCP. Optionele extra policies kunnen later worden toegevoegd, afgedwongen en geremedieerd. Een workload of spoke kan bijvoorbeeld op zijn eigen subscription een regulatory policy initiative inschakelen. |
| Defender for Cloud | De plannen van het platform plus Defender for APIs op de integratiesubscriptions. De kosten maken deel uit van de subscriptionkosten. Let op: Defender for APIs is niet beschikbaar voor workspace-API's in API Management. |
| Encryptie in transit en at rest | MCP-standaarden. Customer-managed keys waar een shared service dat ondersteunt. |
| IP-allowlists | API Management kan aanroepers beperken op IP-adres. Aanbevolen voor bekende, op internet gehoste systemen. |
| Scope van het platform | Het platform beheert het management plane (resources en RBAC). Data-plane-acties en data-plane-RBAC van de gedeployde resources zijn de verantwoordelijkheid van de workload-eigenaar. |
Levering van het platform en van ingrediënten¶
Het platform wordt vanaf het repositoryplatform met pipelines gedeployd en beheerd. Alle deploymentlogica, omgevingsparameters en automatiseringsscripts zijn code, dus deployments zijn herhaalbaar en auditbaar. Het platform wordt opgestart met vooraf gedefinieerde workflows die de kerncomponenten deployen, zoals de shared services.
Integratiespokes worden door het platformteam gedeployd via de normale spoke-pipeline: eerst een gewone spoke, optioneel uitgebreid met spoke-extensies die de spoke toegang geven tot de shared services (Spoke-extensies). Daarna kunnen builders beginnen.
Een ingrediënt publiceren en gebruiken:
flowchart LR
pe["Integration platform engineer<br/>adds or updates ingredient code"] --> build["Build automation<br/>creates a package"]
build --> reg["Container registry<br/>(shared service)"]
ib["Integration builder<br/>references the ingredient, sets parameters"] --> tpl["Build templates of the platform"]
reg --> tpl
tpl --> spoke["Deploy into the workload spoke(s)"]
Toegang tot de registry wordt met Entra ID beschermd.
Resilience¶
| Onderwerp | Referentieontwerp |
|---|---|
| Regio | Eén regio. Availability zones spreiden de services over datacenters, wat beschermt tegen de uitval van een datacenter maar niet tegen een regionale uitval. |
| Disaster recovery | Volgt MCP. Het platform en de shared services kunnen binnen enkele uren in een andere regio opnieuw worden gedeployd, in lijn met een recovery time objective van 24 uur en een recovery point objective van 48 uur. Beide waarden worden per platform ingesteld. |
| Workloads | Een workload die alleen shared services en modules van het platform gebruikt, kan ook in een andere regio opnieuw worden gedeployd, omdat de modules een locatie accepteren. Andere resources zijn de verantwoordelijkheid van het workload team. |
| Beschikbaarheid | Hangt af van de configuratie: bijvoorbeeld het aantal replicas van een Container App of het aantal instances van een Logic App-plan. Service-level agreements van Azure-services zijn niet hetzelfde als de beschikbaarheidsdoelen die je aan je afnemers belooft. |
| Configuratie | De platformconfiguratie is code in een Git-repository. |
Meer detail, afhankelijkheden en samengestelde beschikbaarheid per integratiepatroon: Beschikbaarheid.
Monitoring¶
De logging breidt de logging van MCP uit.
- Integration Platform spoke: geen extra alertregels naast die van MCP. Het team kan eigen regels toevoegen.
- Shared services: mogen eigen logging toevoegen. De shared service API Management deployt bijvoorbeeld een Application Insights-resource die met de Log Analytics workspace van zijn spoke is verbonden.
- Modules: sturen logs naar de Log Analytics workspace van de spoke, in sommige gevallen via een Application Insights-resource. Ze kunnen een action group en alertregels toevoegen. Sommige vereisen dat het workload team extra onderdelen implementeert (Modules).