Giới thiệu: Cuộc cách mạng về tài liệu bắt đầu từ đây
Trong thế giới phát triển phần mềm đầy tốc độ, có một sự thật khó chịu mà tất cả chúng ta đều phải đối mặt: tài liệu của chúng ta hầu như luôn bị lỗi thời. Chúng ta đã dành vô số giờ vật lộn với các công cụ vẽ sơ đồ kéo-thả, cẩn thận căn chỉnh các hộp và mũi tên, chỉ để chứng kiến những hình ảnh được tạo ra công phu trở nên lỗi thời ngay khi mã nguồn thay đổi.
Nhưng nếu tài liệu có thể theo kịp tốc độ phát triển thì sao? Nếu việc tạo các sơ đồ kiến trúc chuyên nghiệp lại đơn giản như viết một hàm thì sao?
Chào mừng bạn đến với cuộc cách mạng Mô hình hóa dưới dạng Mã. Hướng dẫn này sẽ dẫn dắt bạn qua VPasCode, nền tảng dựa trên trình duyệt của Visual Paradigm, nơi thay đổi cách các đội tạo, chia sẻ và duy trì các sơ đồ kiến trúc hệ thống. Bằng cách coi sơ đồ là mã, bạn sẽ khám phá ra cách tạo ra các hình ảnh chất lượng xuất bản chỉ trong vài phút—không phải vài giờ—đồng thời đảm bảo tài liệu của bạn phát triển liền mạch cùng với hệ thống.
Cho dù bạn là một nhà phát triển đang tài liệu hóa các vi dịch vụ, một kiến trúc sư trình bày cho các bên liên quan, hay một kỹ sư DevOps đang ánh xạ cơ sở hạ tầng, hướng dẫn toàn diện này sẽ trang bị cho bạn các kỹ năng để làm chủ VPasCode và nâng tầm trò chơi tài liệu của đội bạn.
1. Bắt đầu: Sơ đồ đầu tiên của bạn trong 5 phút {#getting-started}
Không cần cài đặt, không cần thiết lập, chỉ cần mã
Một trong những tính năng mạnh mẽ nhất của VPasCode là quy trình tiếp cận không ma sát. Không có gì phải cài đặt, không cần tạo tài khoản, và không có cấu hình phức tạp. Hãy cùng tạo sơ đồ đầu tiên của bạn ngay bây giờ.
Hướng dẫn nhanh từng bước:
-
Truy cập VPasCode: Mở trình duyệt của bạn và truy cập https://www.vpascode.com/editor/
-
Chọn Động cơ của bạn: Chọn từ menu thả xuống:
-
Mermaid – Tốt nhất cho sơ đồ luồng và tài liệu hiện đại
-
PlantUML – Lý tưởng cho UML và kiến trúc doanh nghiệp
-
Graphviz – Hoàn hảo cho các cấu trúc mạng phức tạp
-
-
Tải mẫu: Nhấp vào ‘Ví dụ’ và chọn một mẫu khởi đầu
-
Chỉnh sửa và xem trước: Sửa đổi mã trong bảng bên trái; xem sơ đồ của bạn cập nhật ngay lập tức ở bên phải
-
Xuất hoặc Chia sẻ: Tải xuống dưới dạng SVG/PNG hoặc sao chép URL có thể chia sẻ

Hình 1: VPasCode chuyển đổi mã dựa trên văn bản thành sơ đồ kiến trúc chuyên nghiệp ngay lập tức
2. Hiểu rõ giao diện VPasCode {#interface}
Trước khi đi sâu vào cú pháp, hãy làm quen với không gian làm việc.

Hình 2: Giao diện hai bảng của VPasCode—mã ở bên trái, xem trước trực tiếp ở bên phải
Phân tích các thành phần giao diện:
Bảng bên trái (Trình soạn thảo mã):
-
Trình soạn thảo văn bản có tô sáng cú pháp
-
Số dòng để tham khảo dễ dàng
-
Hỗ trợ tự động hoàn thành
-
Tô sáng lỗi theo thời gian thực
Bảng bên phải (Xem trước trực tiếp):
-
Hiển thị trực quan ngay lập tức
-
Điều khiển di chuyển và phóng to/thu nhỏ
-
Hiển thị dựa trên vectơ (rõ nét ở mọi mức độ phóng to)
-
Nhấp để kiểm tra các phần tử
Thanh công cụ phía trên:
-
Bộ chọn công cụ (Mermaid/PlantUML/Graphviz)
-
Thư viện mẫu
-
Tùy chọn xuất (SVG, PNG, PDF)
-
Nút chia sẻ (tạo liên kết vĩnh viễn)
-
Cài đặt và tùy chọn
Thanh trạng thái phía dưới:
-
Trạng thái xác thực cú pháp
-
Đếm ký tự
-
Thời gian lưu lần cuối
-
Tham chiếu phím tắt
Nguyên tắc quy trình cốt lõi:
Viết mã → Xem xem trước ngay lập tức → Tinh chỉnh → Xuất/Chia sẻ
Vòng lặp phản hồi tức thời này chính là điều khiến VPasCode trở nên mạnh mẽ. Không có nút “render” để nhấp, không cần chờ biên dịch—chỉ có phản hồi trực quan thuần túy và tức thì khi bạn gõ.
3. Làm chủ Mermaid.js: Sơ đồ luồng và hơn thế nữa {#mermaid-tutorial}
Mermaid.js đã trở thành tiêu chuẩn thực tế cho việc vẽ biểu đồ thân thiện với lập trình viên. Cú pháp của nó trực quan, dễ đọc và hoàn hảo cho tài liệu đi kèm với mã nguồn.
Hướng dẫn 1: Tạo luồng xác thực người dùng
Hãy cùng xây dựng một biểu đồ luồng xác thực thực tế mà bạn có thể sử dụng trong kế hoạch sprint tiếp theo của mình.
Mã ví dụ:

graph TD
A[Người dùng nhập thông tin đăng nhập] --> B{Định dạng hợp lệ?}
B -->|Không| C[Hiển thị lỗi xác thực]
B -->|Có| D[Gửi đến dịch vụ xác thực]
C --> A
D --> E{Thông tin đăng nhập khớp?}
E -->|Không| F[Trả về 401 Không được phép]
E -->|Có| G[Tạo mã JWT]
G --> H[Lưu mã vào HttpOnly Cookie]
H --> I[Chuyển hướng đến bảng điều khiển]
F --> A
style A fill:#e1f5ff,stroke:#0066cc
style I fill:#d4edda,stroke:#28a745
style F fill:#f8d7da,stroke:#dc3545
Điều này minh họa:
-
Các nút quyết định (hình thoi với
{?}) -
Luồng có hướng (
TD= Từ trên xuống dưới) -
Tùy chỉnh kiểu dáng với màu sắc
-
Vòng lặp tự tham chiếu
-
Nhãn rõ ràng
Hướng dẫn 2: Biểu đồ kiến trúc vi dịch vụ
Bây giờ hãy cùng tạo một kiến trúc hệ thống phức tạp hơn thể hiện các mối quan hệ giữa các dịch vụ.
Mã ví dụ:

graph LR
subgraph Client["Lớp khách hàng"]
Web[Ứng dụng Web<br/>React]
Mobile[Ứng dụng di động<br/>Flutter]
end
subgraph API["API Gateway"]
Gateway[ Kong Gateway ]
Auth[Dịch vụ xác thực]
Rate[Giới hạn tốc độ]
end
subgraph Services["Dịch vụ kinh doanh"]
User[Dịch vụ người dùng]
Order[Dịch vụ đơn hàng]
Product[Dịch vụ sản phẩm]
Payment[Dịch vụ thanh toán]
end
subgraph Data["Lớp dữ liệu"]
UserDB[(Cơ sở dữ liệu người dùng<br/>PostgreSQL)]
OrderDB[(Cơ sở dữ liệu đơn hàng<br/>MongoDB)]
ProductDB[(Cơ sở dữ liệu sản phẩm<br/>PostgreSQL)]
Cache[(Bộ nhớ đệm Redis)]
end
Web --> Gateway
Mobile --> Gateway
Gateway --> Auth
Gateway --> Rate
Rate --> User
Rate --> Order
Rate --> Product
User --> UserDB
User --> Cache
Order --> OrderDB
Order --> Payment
Product --> ProductDB
Payment --> OrderDB
style Gateway fill:#ff6b6b,stroke:#c92a2a,color:white
style UserDB fill:#4ecdc4,stroke:#087f5b
style OrderDB fill:#4ecdc4,stroke:#087f5b
style ProductDB fill:#4ecdc4,stroke:#087f5b
style Cache fill:#ffe66d,stroke:#f08c00
Các khái niệm chính:
-
subgraphđể nhóm logic -
LRđể bố cục từ trái sang phải -
Nhãn nhiều dòng với
<br/> -
Ký hiệu hình trụ cơ sở dữ liệu với
[( )] -
Định tuyến và quan hệ phức tạp
Bài hướng dẫn 3: Biểu đồ trình tự cho xử lý đơn hàng
Biểu đồ trình tự rất quan trọng để hiểu các tương tác theo thời gian giữa các thành phần.
Mã ví dụ:

sequenceDiagram
autonumber
participant C as Khách hàng
participant W as Ứng dụng Web
participant O as Dịch vụ Đơn hàng
participant P as Dịch vụ Thanh toán
participant I as Dịch vụ Tồn kho
participant N as Dịch vụ Thông báo
C->>W: Thêm mục vào giỏ hàng
C->>W: Nhấn "Thanh toán"
W->>O: POST /orders {items, shipping}
O->>I: Đặt chỗ tồn kho
I-->>O: Đặt chỗ được xác nhận
O->>P: Xử lý thanh toán
P-->>O: Thanh toán thành công
O->>O: Tạo bản ghi đơn hàng
O->>N: Gửi xác nhận đơn hàng
N-->>C: Xác nhận qua email
O-->>W: 201 Created {orderId}
W-->>C: Hiển thị trang thành công
Note over O,P: Phần quan trọng<br/>phải có tính giao dịch
rect rgba(200, 200, 0, 0.2)
O->>P: Tính tiền thẻ
P-->>O: ID giao dịch
end
Tính năng của biểu đồ trình tự:
-
autonumberđể đánh số bước tự động -
participantkhai báo -
->>cho các cuộc gọi đồng bộ -
-->>cho các phản hồi -
Ghi chú trêncho chú thích -
hình chữ nhậtđể làm nổi bật các phần
Bài hướng dẫn 4: Biểu đồ Gantt cho lập kế hoạch Sprint
Mermaid cũng hỗ trợ trực quan hóa tiến độ dự án.
Mã ví dụ:

gantt
title Sprint 24 - Module Xác thực
dateFormat YYYY-MM-DD
axisFormat %m/%d
section Backend
Thiết kế hợp đồng API :done, des1, 2024-06-01, 2d
Triển khai dịch vụ JWT :active, des2, 2024-06-03, 3d
Di chuyển cơ sở dữ liệu : des3, sau des2, 2d
Kiểm thử đơn vị : des4, sau des3, 2d
section Frontend
Thành phần đăng nhập : front1, 2024-06-03, 3d
Quản lý token : front2, sau front1, 2d
Đường dẫn được bảo vệ : front3, sau front2, 2d
section Integration
Tích hợp API : int1, sau des4, 2d
Kiểm thử E2E : int2, sau int1, 3d
Kiểm toán bảo mật : int3, sau int2, 2d
4. Tìm hiểu sâu về PlantUML: Kiến trúc doanh nghiệp {#plantuml-tutorial}
PlantUML xuất sắc trong việc tạo các biểu đồ UML chính thức và tài liệu kiến trúc doanh nghiệp. Hãy cùng khám phá các ví dụ thực tế.
Bài hướng dẫn 1: Biểu đồ thành phần cho nền tảng Thương mại điện tử
Mã ví dụ:

@startuml
!theme plain
skinparam backgroundColor #FFFFFF
skinparam componentStyle uml2
title "Nền tảng Thương mại điện tử - Kiến trúc thành phần"
package "Lớp Trình bày" {
[Giao diện Web] as Web
[Ứng dụng Di động] as Mobile
[Bảng điều khiển Quản trị] as Admin
}
package "Lớp API" {
[API Gateway] as Gateway
[Xác thực] as Auth
[Bộ giới hạn tốc độ] as RateLimit
}
package "Dịch vụ Kinh doanh" {
[Dịch vụ Danh mục] as Catalog
[Dịch vụ Đơn hàng] as Order
[Dịch vụ Thanh toán] as Payment
[Dịch vụ Vận chuyển] as Shipping
[Dịch vụ Thông báo] as Notify
}
package "Lớp Dữ liệu" {
database "Cơ sở dữ liệu Sản phẩm" as ProdDB
database "Cơ sở dữ liệu Đơn hàng" as OrderDB
database "Cơ sở dữ liệu Người dùng" as UserDB
queue "Hàng đợi Tin nhắn" as MQ
}
Web --> Gateway
Mobile --> Gateway
Admin --> Gateway
Gateway --> Auth
Gateway --> RateLimit
Gateway --> Catalog
Gateway --> Order
Order --> Payment
Order --> Shipping
Order --> Notify
Catalog --> ProdDB
Order --> OrderDB
Auth --> UserDB
Payment ..> MQ : phát sự kiện
Shipping ..> MQ : đăng ký sự kiện
Notify ..> MQ : đăng ký sự kiện
@enduml

Hình 3: Biểu đồ thành phần PlantUML hiển thị kiến trúc phân lớp
Bài hướng dẫn 2: Biểu đồ triển khai cho cơ sở hạ tầng đám mây
Mã ví dụ:
Bài hướng dẫn 3: Mô hình C4 – Biểu đồ Container
Mô hình C4 rất tuyệt vời để truyền đạt kiến trúc phần mềm ở nhiều mức độ trừu tượng khác nhau.
Mã ví dụ:

@startuml
!define AWS_COLOR FF9900
!define DOCKER_COLOR 0DB7ED
skinparam componentStyle uml2
skinparam backgroundColor #FAFAFA
title “Kiến trúc Triển khai Đám mây”
package “Vùng AWS: us-east-1” {
package “Mạng con Công cộng” {
[CloudFront CDN] as CDN
[Application Load Balancer] as ALB #AWS_COLOR
}
package “Mạng con Riêng tư 1” {
[Web Server 1] as Web1 #DOCKER_COLOR
[Web Server 2] as Web2 #DOCKER_COLOR
}
package “Mạng con Riêng tư 2” {
[API Server 1] as API1 #DOCKER_COLOR
[API Server 2] as API2 #DOCKER_COLOR
}
package “Tầng Dữ liệu” {
database “RDS Chính” as RDS1 #AWS_COLOR
database “RDS Sao chép” as RDS2 #AWS_COLOR
[ElastiCache Redis] as Cache #AWS_COLOR
}
package “Lưu trữ” {
[S3 Bucket] as S3 #AWS_COLOR
[EFS Shared Storage] as EFS #AWS_COLOR
}
}
Internet –> CDN
CDN –> ALB
ALB –> Web1
ALB –> Web2
Web1 –> API1
Web1 –> API2
Web2 –> API1
Web2 –> API2
API1 –> RDS1
API2 –> RDS1
RDS1 -[dashed]> RDS2
API1 –> Cache
API2 –> Cache
API1 –> S3
API2 –> S3
Web1 –> EFS
Web2 –> EFS
@enduml
Bài tập 4: Biểu đồ hoạt động cho quy trình
Mã ví dụ:

@startuml
|Khách hàng|
start
:Tìm kiếm sản phẩm;
:Thêm vào giỏ hàng;
:Tiến hành thanh toán;
|Hệ thống|
:Xác thực các mục trong giỏ hàng;
:Tính tổng;
nếu (Còn hàng?) thì (có)
:Dự trữ hàng tồn kho;
khác (không)
:Hiển thị hết hàng;
stop
endif
|Khách hàng|
:Nhập địa chỉ giao hàng;
:Chọn phương thức thanh toán;
|Hệ thống|
:Xử lý thanh toán;
nếu (Thanh toán thành công?) thì (có)
:Tạo đơn hàng;
:Gửi email xác nhận;
:Cập nhật hàng tồn kho;
khác (không)
:Hiển thị lỗi thanh toán;
detach
endif
:Giao hàng;
:Cập nhật trạng thái đơn hàng;
stop
partition "Công việc nền" {
:Tạo hóa đơn;
:Thông báo kho hàng;
}
@enduml
5. Cơ bản về Graphviz: Trực quan hóa mạng phức tạp {#graphviz-tutorial}
Graphviz (ngôn ngữ DOT) xuất sắc trong việc trực quan hóa các mối quan hệ phức tạp và cấu trúc mạng nơi các thuật toán bố trí đóng vai trò quan trọng.
Bài tập 1: Đồ thị phụ thuộc của vi dịch vụ
Mã ví dụ:

Hình 4: Trực quan hóa Graphviz hiển thị các phụ thuộc và luồng dữ liệu của vi dịch vụ
digraph MicroservicesDependencies {
rankdir=TB;
node [shape=box, style="rounded,filled", fontname="Arial"];
edge [fontname="Arial", fontsize=10];
// Định nghĩa nút với màu sắc
node [fillcolor="#e3f2fd"];
"API Gateway" [fillcolor="#ffcdd2"];
"Service Mesh" [fillcolor="#fff9c4"];
// Các dịch vụ cốt lõi
"User Service";
"Auth Service";
"Order Service";
"Payment Service";
"Inventory Service";
"Notification Service";
"Analytics Service";
// Cơ sở dữ liệu
node [shape=cylinder, fillcolor="#c8e6c9"];
"User DB";
"Order DB";
"Product DB";
"Analytics DB";
// Dịch vụ bên ngoài
node [shape=box, fillcolor="#f3e5f5", style="dashed,filled"];
"Payment Gateway";
"Email Service";
"SMS Service";
// Mối quan hệ
"API Gateway" -> "Service Mesh";
"Service Mesh" -> "User Service";
"Service Mesh" -> "Auth Service";
"Service Mesh" -> "Order Service";
"Service Mesh" -> "Payment Service";
"Service Mesh" -> "Inventory Service";
"User Service" -> "User DB";
"Auth Service" -> "User DB";
"Order Service" -> "Order DB";
"Order Service" -> "Inventory Service";
"Order Service" -> "Payment Service";
"Inventory Service" -> "Product DB";
"Payment Service" -> "Payment Gateway";
"Notification Service" -> "Email Service";
"Notification Service" -> "SMS Service";
"Analytics Service" -> "Analytics DB";
"Order Service" -> "Notification Service" [style=dashed];
"Payment Service" -> "Notification Service" [style=dashed];
// Đồ thị con để nhóm
{
rank=same;
"User Service";
"Auth Service";
}
{
rank=same;
"Order Service";
"Payment Service";
"Inventory Service";
}
} Bài hướng dẫn 2: Phân cấp tổ chức
Mã ví dụ:

digraph OrgChart {
rankdir=TB;
node [shape=box, style="rounded,filled", fontname="Helvetica"];
edge [fontname="Helvetica", arrowsize=0.7];
// Cấp điều hành
CEO [label="CEOnJohn Smith", fillcolor="#1976d2", fontcolor="white"];
// Cấp C-Level
subgraph cluster_exec {
label="Đội ngũ điều hành";
style=dashed;
color="#90caf9";
CTO [label="CTOnSarah Johnson", fillcolor="#42a5f5"];
CFO [label="CFOnMichael Brown", fillcolor="#42a5f5"];
COO [label="COOnEmily Davis", fillcolor="#42a5f5"];
CPO [label="CPOnDavid Wilson", fillcolor="#42a5f5"];
}
// Kỹ thuật
subgraph cluster_eng {
label="Kỹ thuật";
style=filled;
color="#e3f2fd";
VP_Eng [label="Phó Giám đốc Kỹ thuật", fillcolor="#64b5f6"];
subgraph cluster_eng_teams {
label="Đội nhóm";
style=dotted;
Backend [label="Đội Backendn(12 kỹ sư)", fillcolor="#bbdefb"];
Frontend [label="Đội Frontendn(8 kỹ sư)", fillcolor="#bbdefb"];
DevOps [label="Đội DevOpsn(5 kỹ sư)", fillcolor="#bbdefb"];
QA [label="Đội QAn(6 kỹ sư)", fillcolor="#bbdefb"];
}
}
// Sản phẩm
subgraph cluster_product {
label="Sản phẩm";
style=filled;
color="#fff3e0";
VP_Product [label="Phó Giám đốc Sản phẩm", fillcolor="#ffb74d"];
PM1 [label="Quản lý Sản phẩmnNền tảng", fillcolor="#ffcc80"];
PM2 [label="Quản lý Sản phẩmnDi động", fillcolor="#ffcc80"];
PM3 [label="Quản lý Sản phẩmnPhân tích", fillcolor="#ffcc80"];
}
// Mối quan hệ
CEO -> CTO;
CEO -> CFO;
CEO -> COO;
CEO -> CPO;
CTO -> VP_Eng;
VP_Eng -> Backend;
VP_Eng -> Frontend;
VP_Eng -> DevOps;
VP_Eng -> QA;
CPO -> VP_Product;
VP_Product -> PM1;
VP_Product -> PM2;
VP_Product -> PM3;
// Đường nét đứt để thể hiện hợp tác
PM1 -> Backend [style=dotted, color="#757575"];
PM2 -> Frontend [style=dotted, color="#757575"];
PM3 -> Backend [style=dotted, color="#757575"];
} Bài hướng dẫn 3: Sơ đồ luồng dữ liệu
Mã ví dụ:

digraph DataFlow {
rankdir=LR;
nodesep=1.0;
node [shape=ellipse, style="filled", fontname="Arial"];
edge [fontname="Arial", fontsize=9];
// Các thực thể bên ngoài
node [fillcolor="#ffccbc", shape=box];
Customer [label="Khách hàng"];
Vendor [label="Nhà cung cấp"];
Bank [label="Hệ thống ngân hàng"];
// Các quy trình
node [fillcolor="#c5cae9", shape=circle];
P1 [label="Đặt hàng"];
P2 [label="Xử lý thanh toán"];
P3 [label="Cập nhật tồn kho"];
P4 [label="Tạo hóa đơn"];
P5 [label="Giao hàng"];
P6 [label="Gửi thông báo"];
// Kho dữ liệu
node [fillcolor="#c8e6c9", shape=box3d];
D1 [label="Cơ sở dữ liệu đơn hàng"];
D2 [label="Cơ sở dữ liệu tồn kho"];
D3 [label="Cơ sở dữ liệu khách hàng"];
D4 [label="Hồ sơ hóa đơn"];
// Luồng dữ liệu
Customer -> P1 [label="Yêu cầu đặt hàng"];
P1 -> D1 [label="Lưu đơn hàng"];
P1 -> D3 [label="Cập nhật khách hàng"];
P1 -> P2 [label="Chi tiết thanh toán"];
P2 -> Bank [label="Yêu cầu thanh toán"];
Bank -> P2 [label="Xác nhận thanh toán"];
P2 -> P3 [label="Thanh toán thành công"];
P3 -> D2 [label="Giảm tồn kho"];
P3 -> P4 [label="Đơn hàng đã xác nhận"];
P4 -> D4 [label="Lưu hóa đơn"];
P4 -> P6 [label="Dữ liệu hóa đơn"];
P3 -> P5 [label="Yêu cầu giao hàng"];
P5 -> Vendor [label="Nhãn giao hàng"];
P5 -> P6 [label="Thông tin theo dõi"];
P6 -> Customer [label="Xác nhận đơn hàngn+ Theo dõi"];
// Đường nét đứt cho các truy vấn
D1 -> P5 [label="Lấy chi tiết đơn hàng", style=dashed];
D2 -> P1 [label="Kiểm tra khả dụng", style=dashed];
D3 -> P1 [label="Lấy thông tin khách hàng", style=dashed];
} 6. Các mẫu triển khai thực tế {#implementation-patterns}
Mẫu 1: Tài liệu về quy trình CI/CD
Mã ví dụ (Mermaid):

graph LR
subgraph Source["Kiểm soát nguồn"]
Git[Kho lưu trữ GitHub]
PR[Yêu cầu kéo]
end
subgraph CI["Tích hợp liên tục"]
Lint[Kiểm tra mã]
Test[Đơn vị kiểm thử]
Build[Sản phẩm xây dựng]
Scan[Quét bảo mật]
end
subgraph CD["Triển khai liên tục"]
Dev[Triển khai sang môi trường Dev]
Stage[Triển khai sang môi trường Staging]
E2E[Kiểm thử E2E]
Prod[Triển khai sang môi trường Production]
end
subgraph Monitor["Giám sát"]
Logs[Tổng hợp nhật ký]
Metrics[Bảng điều khiển chỉ số]
Alerts[Hệ thống cảnh báo]
end
Git --> PR
PR --> Lint
Lint --> Test
Test --> Build
Build --> Scan
Scan --> Dev
Dev --> Stage
Stage --> E2E
E2E --> Prod
Prod --> Logs
Prod --> Metrics
Metrics --> Alerts
style Git fill:#f0f0f0,stroke:#333
style Prod fill:#d4edda,stroke:#28a745,color:black
style Alerts fill:#f8d7da,stroke:#dc3545,color:black
Mẫu 2: Thiết kế lược đồ cơ sở dữ liệu
Mã ví dụ (PlantUML):

Hình 5: Sơ đồ quan hệ thực thể hiển thị lược đồ cơ sở dữ liệu thương mại điện tử
@startuml
!define TABLE(name) entity name << (T,#FFAAAA) >>
!define PK(x) x <<PK>>
!define FK(x) x <<FK>>
TABLE(Users) {
PK(user_id) : INT
--
email : VARCHAR(255)
password_hash : VARCHAR(255)
created_at : TIMESTAMP
last_login : TIMESTAMP
status : ENUM
}
TABLE(Products) {
PK(product_id) : INT
--
sku : VARCHAR(50)
name : VARCHAR(255)
description : TEXT
price : DECIMAL(10,2)
stock_quantity : INT
category_id : INT
}
TABLE(Categories) {
PK(category_id) : INT
--
name : VARCHAR(100)
parent_id : INT
}
TABLE(Orders) {
PK(order_id) : INT
--
FK(user_id) : INT
order_date : TIMESTAMP
total_amount : DECIMAL(10,2)
status : ENUM
shipping_address : TEXT
}
TABLE(OrderItems) {
PK(item_id) : INT
--
FK(order_id) : INT
FK(product_id) : INT
quantity : INT
unit_price : DECIMAL(10,2)
}
TABLE(Payments) {
PK(payment_id) : INT
--
FK(order_id) : INT
payment_method : ENUM
transaction_id : VARCHAR(255)
amount : DECIMAL(10,2)
status : ENUM
processed_at : TIMESTAMP
}
Users ||--o{ Orders : places
Orders }o--|{ Users : belongs_to
Orders ||--|{ OrderItems : contains
OrderItems }o--|| Products : references
Products }o--|| Categories : categorized_in
Orders ||--o{ Payments : paid_by
note right of Users
Lưu trữ tài khoản khách hàng
và dữ liệu xác thực
end note
note left of Orders
Bản ghi giao dịch chính
với chi tiết vận chuyển
end note
@enduml
Mẫu 3: Trực quan hóa Cơ sở hạ tầng dưới dạng Mã
Mã ví dụ (Mermaid):
graph TB
subgraph AWS["Cơ sở hạ tầng đám mây AWS"]
direction TB
subgraph Networking["Mạng"]
VPC[VPC 10.0.0.0/16]
IGW[Cổng Internet]
NAT[Cổng NAT]
subgraph Public["Mạng con công cộng"]
ALB[Trình cân bằng tải ứng dụng]
Bastion[Host Bastion]
end
subgraph Private["Mạng con riêng tư"]
subgraph AppTier["Lớp ứng dụng"]
ECS1[Nhiệm vụ ECS 1]
ECS2[Nhiệm vụ ECS 2]
ECS3[Nhiệm vụ ECS 3]
end
subgraph DataTier["Lớp dữ liệu"]
RDS[RDS PostgreSQL<br/>Đa vùng]
Redis[ElastiCache Redis]
end
end
end
subgraph Storage["Lưu trữ"]
S3[Thùng S3<br/>Tài sản & Bản sao lưu]
EFS[Lưu trữ chia sẻ EFS]
end
subgraph Security["Bảo mật"]
WAF[Quy tắc WAF]
SG[Nhóm bảo mật]
IAM[Vai trò IAM]
end
subgraph Monitoring["Giám sát & Ghi nhật ký"]
CW[CloudWatch]
XRay[AWS X-Ray]
SNS[Thông báo SNS]
end
end
User[Người dùng cuối] --> CloudFront[CloudFront CDN]
CloudFront --> WAF
WAF --> ALB
ALB --> ECS1
ALB --> ECS2
ALB --> ECS3
ECS1 --> RDS
ECS2 --> RDS
ECS3 --> RDS
ECS1 --> Redis
ECS2 --> Redis
ECS3 --> Redis
ECS1 --> S3
ECS2 --> S3
ECS3 --> S3
ECS1 --> EFS
ECS2 --> EFS
ECS3 --> EFS
ECS1 --> CW
ECS2 --> CW
ECS3 --> CW
RDS --> CW
Redis --> CW
CW --> SNS
style VPC fill:#f9f9f9,stroke:#333,stroke-width:2px
style ALB fill:#ff9900,stroke:#cc7a00,color:white
style RDS fill:#2e73b8,stroke:#1a4d80,color:white
style User fill:#95a5a6,stroke:#7f8c8d

Hình 6: Sơ đồ kiến trúc cơ sở hạ tầng đám mây AWS
7. Kỹ thuật nâng cao: Tạo kiểu và tùy chỉnh {#advanced-techniques}
Tạo kiểu nâng cao Mermaid
Tùy chỉnh chủ đề:

%%{init: {'theme':'base', 'themeVariables': {
'primaryColor': '#4CAF50',
'primaryTextColor': '#fff',
'primaryBorderColor': '#388E3C',
'lineColor': '#757575',
'secondaryColor': '#FFC107',
'tertiaryColor': '#fff'
}}}%%
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Process A]
B -->|No| D[Process B]
C --> E[End]
D --> E
style A fill:#2196F3,stroke:#1976D2,color:white
style E fill:#F44336,stroke:#D32F2F,color:white
Tham số da PlantUML
Phong cách chuyên nghiệp:

@startuml
' Phong cách toàn cục
skinparam backgroundColor #FFFFFF
skinparam shadowing false
skinparam roundcorner 10
skinparam linetype ortho
' Phong cách thành phần
skinparam component {
BackgroundColor #E3F2FD
BorderColor #1976D2
ArrowColor #1976D2
}
' Phong cách gói
skinparam package {
BackgroundColor #FFF3E0
BorderColor #F57C00
FontSize 14
}
' Phong cách ghi chú
skinparam note {
BackgroundColor #F1F8E9
BorderColor #689F38
FontColor #33691E
}
package "Frontend" {
component [React App]
component [Redux Store]
}
package "Backend" {
component [Node.js API]
component [Express Server]
database [MongoDB]
}
[React App] --> [Redux Store]
[Redux Store] --> [Node.js API]
[Node.js API] --> [Express Server]
[Express Server] --> [MongoDB]
note right of [Redux Store]
Quản lý trạng thái tập trung
cho toàn bộ ứng dụng
end note
@enduml
Thuộc tính nâng cao Graphviz
Sơ đồ mạng chuyên nghiệp:

digraph AdvancedStyling {
// Thuộc tính đồ thị toàn cục
graph [
bgcolor="#f8f9fa"
fontname="Helvetica"
fontsize=16
label="Kiến trúc hệ thống doanh nghiệpnMôi trường sản xuất"
labelloc="t"
pad=0.5
ranksep=1.5
nodesep=1.0
];
// Thuộc tính nút mặc định
node [
fontname="Helvetica"
fontsize=11
style="filled,rounded"
penwidth=2
];
// Thuộc tính cạnh mặc định
edge [
fontname="Helvetica"
fontsize=9
penwidth=1.5
arrowsize=0.8
];
// Cụm nút với phong cách tùy chỉnh
subgraph cluster_presentation {
label="Lớp trình bày";
style=filled;
color="#e3f2fd";
fontcolor="#1565c0";
Web [label="Ứng dụng Web<br/>React 18", fillcolor="#64b5f6", fontcolor="white"];
Mobile [label="Ứng dụng di động<br/>Flutter", fillcolor="#64b5f6", fontcolor="white"];
}
subgraph cluster_business {
label="Lớp logic nghiệp vụ";
style=filled;
color="#fff3e0";
fontcolor="#e65100";
API [label="REST API<br/>Node.js", fillcolor="#ffb74d", fontcolor="black"];
GraphQL [label="Cổng GraphQL", fillcolor="#ffb74d", fontcolor="black"];
}
subgraph cluster_data {
label="Lớp dữ liệu";
style=filled;
color="#e8f5e9";
fontcolor="#2e7d32";
Primary [label="Cơ sở dữ liệu chính<br/>PostgreSQL 14", shape=cylinder, fillcolor="#a5d6a7"];
Replica [label="Bản sao đọc<br/>PostgreSQL 14", shape=cylinder, fillcolor="#c8e6c9"];
Cache [label="Bộ nhớ đệm Redis<br/>Chế độ cụm", shape=cylinder, fillcolor="#c8e6c9"];
}
// Cạnh với phong cách tùy chỉnh
Web -> API [label="HTTPS/REST", color="#1976d2", fontcolor="#1976d2"];
Mobile -> API [label="HTTPS/REST", color="#1976d2", fontcolor="#1976d2"];
Web -> GraphQL [label="WebSocket", color="#1976d2", fontcolor="#1976d2", style=dashed];
API -> Primary [label="Đọc/Ghi", color="#388e3c", fontcolor="#388e3c"];
API -> Cache [label="Bộ nhớ đệm", color="#f57c00", fontcolor="#f57c00", style=dashed];
GraphQL -> Replica [label="Chỉ đọc", color="#388e3c", fontcolor="#388e3c"];
Primary -> Replica [label="Sao chép luồng", color="#757575", style=dotted];
}
8. Quy trình cộng tác và chia sẻ {#collaboration}
Tạo sơ đồ có thể chia sẻ
Chia sẻ từng bước:
-
Tạo liên kết chia sẻ:
-
Nhấn nút “Chia sẻ” trong VPasCode
-
Sao chép URL đã tạo
-
Chia sẻ qua email, Slack hoặc tài liệu
-
-
Nhúng vào tài liệu:
## Kiến trúc hệ thống  Hoặc nhúng phiên bản tương tác: <iframe src="https://www.vpascode.com/embed/abc123xyz" width="100%" height="600"></iframe> -
Xuất cho bài thuyết trình:
-
SVG cho đồ họa web có thể mở rộng
-
PNG (300 DPI) cho PowerPoint/Keynote
-
PDF cho tài liệu in
-
Tích hợp kiểm soát phiên bản
Lưu mã sơ đồ trong Git:
project-root/
├── docs/
│ ├── diagrams/
│ │ ├── architecture/
│ │ │ ├── system-overview.puml
│ │ │ ├── deployment-view.puml
│ │ │ └── data-flow.mmd
│ │ ├── processes/
│ │ │ └── user-journey.mmd
│ │ └── infrastructure/
│ │ └── aws-architecture.dot
│ └── README.md
└── src/
Quy trình Git mẫu:
# Tạo sơ đồ
echo '@startuml
component "API Gateway"
@enduml' > docs/diagrams/architecture/gateway.puml
# Cam kết thay đổi
git add docs/diagrams/architecture/gateway.puml
git commit -m "Thêm sơ đồ kiến trúc API Gateway"
git push
# Thành viên trong nhóm giờ có thể xem trong VPasCode
# bằng cách dán mã hoặc tải từ URL
Mẫu hợp tác nhóm
Mẫu 1: Bản ghi quyết định kiến trúc (ADRs)
# ADR-007: Mẫu giao tiếp vi dịch vụ
## Bối cảnh
Chúng ta cần chuẩn hóa cách các vi dịch vụ giao tiếp.
## Quyết định
Sử dụng tin nhắn bất đồng bộ qua RabbitMQ cho giao tiếp giữa các dịch vụ.
## Sơ đồ kiến trúc
```mermaid
graph LR
A[Service A] -->|Publish| B[(RabbitMQ)]
B -->|Subscribe| C[Service B]
B -->|Subscribe| D[Service C]
Hệ quả
-
Tách rời tốt hơn
-
Khả năng mở rộng tốt hơn
-
Tăng độ phức tạp trong xử lý tin nhắn
**Mẫu 2: Tài liệu lập kế hoạch Sprint**
Tạo các sơ đồ sống động phát triển cùng Sprint của bạn:

graph TD
subgraph Sprint24["Sprint 24 - Đang thực hiện"]
Done[✅ Nhiệm vụ đã hoàn thành]
InProgress[🔄 Đang thực hiện]
ToDo[📋 Cần làm]
Blocked[⛔ Bị chặn]
end
Done --> Task1[Module xác thực người dùng]
Done --> Task2[Di chuyển cơ sở dữ liệu]
InProgress --> Task3[Phát triển API]
InProgress --> Task4[Tích hợp giao diện người dùng]
ToDo --> Task5[Kiểm thử đơn vị]
ToDo --> Task6[Tài liệu hóa]
Blocked --> Task7[Tích hợp bên thứ ba]
style Done fill:#d4edda,stroke:#28a745
style InProgress fill:#fff3cd,stroke:#ffc107
style ToDo fill:#e2e3e5,stroke:#6c757d
style Blocked fill:#f8d7da,stroke:#dc3545
Kết luận: Hành trình của bạn đến với sự xuất sắc trong tài liệu hóa
Chúc mừng! Bạn đã hoàn thành hành trình toàn diện qua VPasCode và phương pháp luận Sơ đồ dưới dạng Mã. Hãy cùng nhìn lại những gì bạn đã học và vạch ra lộ trình tiếp theo.
Những gì bạn đã thành thạo
Suốt khóa hướng dẫn này, bạn đã khám phá:
-
Sức mạnh của sơ đồ dựa trên văn bản: Bạn đã thấy cách viết mã để tạo sơ đồ loại bỏ sự cồng kềnh của việc định vị thủ công, đảm bảo tính nhất quán và giúp tài liệu dễ bảo trì.
-
Ba công cụ tiêu chuẩn ngành: Bạn giờ đã có kỹ năng thực tế trong:
-
Mermaid.js cho sơ đồ luồng thân thiện với lập trình viên và tài liệu hiện đại
-
PlantUML cho sơ đồ UML và kiến trúc ở mức độ doanh nghiệp
-
Graphviz cho các cấu trúc mạng phức tạp và trực quan hóa mối quan hệ
-
-
Các mẫu thực tế: Từ kiến trúc vi dịch vụ đến lược đồ cơ sở dữ liệu, quy trình CI/CD đến sơ đồ tổ chức—bạn đã học cách trực quan hóa hầu như bất kỳ hệ thống hoặc quy trình nào.
-
Quy trình cộng tác: Bạn hiểu cách chia sẻ sơ đồ qua URL, nhúng chúng vào tài liệu, tích hợp với kiểm soát phiên bản và tự động hóa việc tạo sơ đồ trong các quy trình CI/CD.
-
Phong cách chuyên nghiệp: Bạn có thể tạo hình ảnh chất lượng xuất bản với chủ đề tùy chỉnh, thương hiệu nhất quán và mức độ chi tiết phù hợp cho các đối tượng khác nhau.
Bức tranh toàn cảnh
Điều khiến VPasCode thực sự mang tính chuyển đổi không chỉ là công cụ này—mà là sự thay đổi mô hình mà nó đại diện. Bằng cách coi sơ đồ là mã, bạn đang:
-
Thu hẹp khoảng cách giữa việc triển khai và tài liệu hóa
-
Dân chủ hóa kiến trúc bằng cách làm cho nó dễ tiếp cận với mọi người trong nhóm
-
Bảo vệ kiến thức trước tương lai thông qua các tài liệu dựa trên văn bản và được kiểm soát phiên bản
-
Tăng tốc quá trình hội nhập với tài liệu rõ ràng và có thể thực thi
-
Giảm nợ kỹ thuật bằng cách làm cho việc cập nhật đơn giản như việc chỉnh sửa văn bản
Các bước tiếp theo của bạn
Tuần 1: Bắt đầu nhỏ
-
Chọn một sơ đồ hiện có trong tổ chức của bạn
-
Tái tạo nó trong VPasCode bằng công cụ ưa thích của bạn
-
Chia sẻ nó với đồng nghiệp và thu thập phản hồi
-
Lưu trữ mã trong kho lưu trữ dự án của bạn
Tuần 2-3: Xây dựng đà
-
Tạo mẫu cho các loại sơ đồ phổ biến của nhóm
-
Xây dựng quy ước đặt tên và hướng dẫn về phong cách
-
Tích hợp việc xem xét sơ đồ vào quy trình xem xét mã nguồn
-
Tài liệu hóa quy trình “Sơ đồ dưới dạng mã” của bạn
Tháng 2: Mở rộng và tự động hóa
-
Thiết lập tích hợp CI/CD để tạo sơ đồ tự động
-
Tạo thư viện sơ đồ cho tổ chức của bạn
-
Đào tạo thành viên nhóm về quy trình
-
Đo lường thời gian tiết kiệm được và cải thiện chất lượng tài liệu
Tháng 3+: Biến nó thành văn hóa
-
Đề xuất áp dụng sơ đồ dưới dạng mã trong các quyết định kiến trúc
-
Chia sẻ các câu chuyện thành công với lãnh đạo
-
Đóng góp lại các mẫu cho cộng đồng
-
Khám phá các tính năng nâng cao như tạo sơ đồ hỗ trợ bởi AI
Lợi thế cạnh tranh
Các tổ chức thành thạo Sơ đồ dưới dạng mã sẽ đạt được những lợi thế đáng kể:
✅ Ra quyết định nhanh hơn: Hình ảnh rõ ràng thúc đẩy việc hiểu và thống nhất nhanh hơn
✅ Giảm thời gian hội nhập: Kỹ sư mới nắm bắt hệ thống nhanh hơn thông qua tài liệu có thể thực thi
✅ Giao tiếp tốt hơn với các bên liên quan: Sơ đồ chuyên nghiệp kết nối góc nhìn kỹ thuật và kinh doanh
✅ Giảm gánh nặng bảo trì: Cập nhật văn bản nhanh hơn việc vẽ lại hình ảnh
✅ Nâng cao chất lượng mã: Việc vẽ sơ đồ giúp phát hiện sớm các vấn đề về kiến trúc
Tham gia phong trào
Bạn giờ đây đã là một phần của cộng đồng ngày càng phát triển gồm các nhà phát triển, kiến trúc sư và đội ngũ nhận ra rằng tài liệu không nhất thiết phải là gánh nặng. Với VPasCode, bạn có các công cụ để biến nó thành một tài sản—một đại diện sống động, luôn thay đổi của hệ thống của bạn, phát triển song song với mã nguồn của bạn.
Lời kết
Thời điểm tốt nhất để bắt đầu coi sơ đồ như mã là hôm qua. Thời điểm tốt thứ hai là ngay bây giờ.
Chính bạn trong tương lai—và các đồng đội tương lai của bạn—sẽ cảm ơn bạn vì sự rõ ràng, tính nhất quán và sự tự tin mà tài liệu luôn cập nhật, luôn dễ truy cập và luôn chính xác mang lại.
Sẵn sàng bắt đầu? Truy cập VPasCode ngay bây giờ, dán mã sơ đồ đầu tiên của bạn vào và xem văn bản biến đổi thành sự rõ ràng. Trong ít thời gian hơn cả thời gian bạn đọc phần kết luận này, bạn sẽ đã tạo ra bản sao Diagram-as-Code đầu tiên của mình.
Tương lai của tài liệu kỹ thuật đã ở đây. Nó được điều khiển bằng mã, dựa trên trình duyệt và hoàn toàn miễn phí. Chào mừng bạn đến với cuộc cách mạng.
Giới thiệu về hướng dẫn này
Hướng dẫn toàn diện này được tạo ra để giúp các đội phát triển hiện đại hóa thực hành tài liệu của họ thông qua Diagram-as-Code. Được xây dựng trên nền tảng hai thập kỷ kinh nghiệm về kiến trúc doanh nghiệp của Visual Paradigm, VPasCode đại diện cho tương lai của truyền thông kỹ thuật—dễ tiếp cận, dễ bảo trì và miễn phí.
Cập nhật lần cuối: Tháng 6 năm 2026
Đối tượng mục tiêu: Nhà phát triển phần mềm, kiến trúc sư hệ thống, kỹ sư DevOps, nhà văn kỹ thuật và các đội phát triển
Điều kiện tiên quyết: Hiểu biết cơ bản về các khái niệm kiến trúc phần mềm
Thời gian hoàn thành ước tính: 2-3 giờ cho hướng dẫn đầy đủ, 15 phút cho bắt đầu nhanh
Chúc bạn vẽ sơ đồ vui vẻ! 🎨📊











