-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
111 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
--- | ||
title: MACH (micro service based, API first, cloud native, headless) | ||
date: 2024-06-12T20:10:00+08:00 | ||
categories: | ||
- tech | ||
tags: | ||
- architecture | ||
- javascript | ||
--- | ||
|
||
Just an architecture style MACH got me attention. It is short for micro service based, API first, cloud native, headless. There are two of projects I involved one are in this architecture style. One is sitecore based, another one is developed. Kubernetes, nodejs, npm, strapi tsoa are used. Their mapping is as following. | ||
|
||
|
||
* micro services based: multiple services based on expressjs | ||
* api first: tsao | ||
* cloud native: more advanced than cloud native, kubernate native is used. | ||
* headless: strapi | ||
|
||
Here I have a diagram for the developed one. | ||
|
||
[plantuml, format="svg",opts="inline"] | ||
---- | ||
@startuml kubernetes | ||
footer Kubernetes Plant-UML | ||
scale max 1024 width | ||
skinparam nodesep 10 | ||
skinparam ranksep 10 | ||
' Azure | ||
!define AzurePuml https://raw.githubusercontent.com/RicardoNiepel/Azure-PlantUML/release/2-1/dist | ||
!includeurl AzurePuml/AzureCommon.puml | ||
!includeurl AzurePuml/AzureSimplified.puml | ||
!includeurl AzurePuml/Containers/AzureContainerRegistry.puml | ||
!includeurl AzurePuml/Databases/AzureCosmosDb.puml | ||
!includeurl AzurePuml/Databases/AzureSqlDatabase.puml | ||
!includeurl AzurePuml/DevOps/AzurePipelines.puml | ||
!includeurl AzurePuml/Identity/AzureActiveDirectory.puml | ||
!includeurl AzurePuml/Networking/AzureLoadBalancer.puml | ||
!includeurl AzurePuml/Security/AzureKeyVault.puml | ||
' Kubernetes | ||
!define KubernetesPuml https://raw.githubusercontent.com/dcasati/kubernetes-PlantUML/master/dist | ||
!includeurl KubernetesPuml/kubernetes_Common.puml | ||
!includeurl KubernetesPuml/kubernetes_Context.puml | ||
!includeurl KubernetesPuml/kubernetes_Simplified.puml | ||
!includeurl KubernetesPuml/OSS/KubernetesApi.puml | ||
!includeurl KubernetesPuml/OSS/KubernetesIng.puml | ||
!includeurl KubernetesPuml/OSS/KubernetesPod.puml | ||
actor "DevOps" as devopsAlias | ||
collections "Client Apps" as clientalias | ||
collections "Helm Charts" as helmalias | ||
left to right direction | ||
' Azure Components | ||
AzureActiveDirectory(aad, "\nAzure\nActive Directory", "Global") | ||
AzureContainerRegistry(acr, "ACR", "Canada Central") | ||
AzureCosmosDb(cosmos, "\nCosmos DB", "Global") | ||
AzureKeyVault(keyvault, "\nAzure\nKey Vault", "Global") | ||
AzureLoadBalancer(alb, "\nLoad\nBalancer", "Canada Central") | ||
AzureSqlDatabase(sql, "\nExternal\ndata stores", "Canada Central") | ||
AzurePipelines(ado, "CI/CD\nAzure Pipelines", "Global") | ||
' Kubernetes Components | ||
Cluster_Boundary(cluster, "Kubernetes Cluster") { | ||
KubernetesApi(KubernetesApi, "Kubernetes API", "") | ||
Namespace_Boundary(nsFrontEnd, "Front End") { | ||
KubernetesIng(ingress, "API Gateway", "") | ||
} | ||
Namespace_Boundary(nsBackEnd, "Back End") { | ||
KubernetesPod(KubernetesBE1, "", "") | ||
KubernetesPod(KubernetesBE2, "", "") | ||
KubernetesPod(KubernetesBE3, "", "") | ||
} | ||
Namespace_Boundary(nsUtil, "Utiliy Services") { | ||
KubernetesPod(KubernetesUtil1, "", "") | ||
KubernetesPod(KubernetesUtil2, "","") | ||
} | ||
} | ||
Rel(devopsAlias, aad, "AUTH") | ||
Rel(helmalias, KubernetesApi, "helm upgrade") | ||
Rel(aad, keyvault, " ") | ||
Rel(KubernetesApi, aad, "RBAC", "ASYNC") | ||
Rel(clientalias, alb, "HTTP", "ASYNC") | ||
Rel(alb, ingress, "HTTP", "ASYNC") | ||
Rel(ingress, KubernetesBE1, " ") | ||
Rel(KubernetesBE1, KubernetesBE2, " ") | ||
Rel(KubernetesBE1, KubernetesBE3, " ") | ||
Rel(KubernetesBE2, sql, " ") | ||
Rel(KubernetesBE3, keyvault, "Pod Identity") | ||
Rel(KubernetesBE3, cosmos, " ") | ||
Rel(ado, acr, "docker push") | ||
Rel_U(KubernetesApi, acr, "docker pull") | ||
@enduml | ||
---- |