Ebig
Liên hệ tư vấn
Dành cho CTO — số đo từng chặng, lấy từ log

Dự án của bạn chạy qua những gì, mất bao lâu ở từng chặng

Số đo dưới đây lấy trực tiếp từ log thật trên app.ebig.co — không phải ước lượng.

Đường đi thật của một lệnh đọc dữ liệuTrình duyệtxác thực phiên2msGatewayWorkplace hỏi Gateway110msLocalmở kết nối18msCSDL trong bộ nhớchạy lệnh8msNgười dùng thấy 325msBa đường chạy song song — mail 207ms, chat 309ms, thông báo 325ms — nên tính theo đường dài nhất.Đường đi thật của một lệnh đọc dữ liệuTrình duyệt2msxác thực phiênGateway110msWorkplace hỏi GatewayLocal18msmở kết nốiCSDL trong bộ nhớ8mschạy lệnhNgười dùng thấy 325msBa đường chạy song song, người dùng chờtheo đường dài nhất — mail 207ms,chat 309ms, thông báo 325ms.
Chặng dài nhất là Gateway: 110ms. CSDL trong bộ nhớ là chặng ngắn nhất: 8ms. Nguồn: log đo thật trên /api/bootstrap?tier=shell, app.ebig.co.
Mô hình hạ tầng mặc định — tầng SaaS dùng chung

Ebig thật sự chạy trên gì

Từng lớp chạy ở đâu, và lớp nào giữ việc gì.

Mô hình vật lý — biên toàn cầu, không có máy chủ cố định
Trình duyệt
app.ebig.co, tool.ebig.co.
biên toàn cầu
Gateway Worker
Xác thực, đọc header pid, định tuyến theo tenant.
gói trả phí
Không giới hạn request/ngày. Tự mở rộng ngang, không cần cấu hình node.
Các worker nghiệp vụ — liên kết worker nội bộ
SSO Worker
Định danh, Project, phân quyền thành viên.
Local Worker
Cầu nối duy nhất xuống CSDL trong bộ nhớ, qua TCP/TLS thật.
Service Worker
Chạy Pattern do "1 Table = 1 Module" biên dịch ra.
core-ai Worker
6 agent thật (qa/tuvan/howto/ops/designer/khach) — chỉ đọc.
CRM Worker — hệ thống nội bộ Ebig
Bucket kho đối tượng riêng ebig-crm-raw, tách khỏi luồng chung. Đây là CRM Ebig dùng để quản lý khách hàng của chính mình. Không phải module bán cho khách hàng dùng nền tảng.
Dữ liệu
CSDL trong bộ nhớ
Dữ liệu nghiệp vụ thật — khoá data:<pid>:<Module>, dùng chung cụm.
kho khoá–giá trị — DB_ACCOUNT
Project, thành viên, phiên đăng nhập.
kho đối tượng
Tệp/tài liệu module Document.
Đường đi thật của một lệnh đọc dữ liệu
1
Trình duyệt
2
Gateway Worker
3
Local Worker
4
CSDL trong bộ nhớ

Bốn chặng, không có chặng thứ năm. Thời gian thật của từng chặng nằm ở mô phỏng ngay bên dưới.

Tầng này không có "node" hay "vCPU". worker ở biên không cấp máy cố định — mở rộng theo request, không theo cấu hình trước.

Nhìn sơ đồ trên thấy nhiều worker — có phải microservice không?

Microservice là một lựa chọn, không phải một chuẩn mực

Quan niệm phổ biến

Hệ thống hiện đại thì phải chẻ nhỏ thành microservice. Mỗi chức năng một service riêng, càng nhiều càng "chuẩn". Đây là ngộ nhận, không phải quy luật kỹ thuật.

Ebig chọn
1 Module SSO Local

Ebig OS đi theo nguyên tắc "1 Table = 1 Module". Mỗi module sinh ra là một khối gọn, đầy đủ, không bị chẻ vụn thành nhiều service con.

Bên trái là tám mảnh phải điều phối với nhau. Bên phải là một khối, cộng đúng hai worker tách ra có lý do.

Ebig chỉ tách worker khi có lý do thật

Bốn worker, bốn lý do — và lý do nào cũng là một ràng buộc thật của hệ thống.

Worker tách riêngLý do
CRM nội bộ EbigBảo mật. Cô lập vật lý riêng, không chung hạ tầng với dữ liệu khách hàng.
SSORanh giới trách nhiệm rõ. SSO giữ định danh.
LocalRanh giới trách nhiệm rõ. Local giữ kết nối CSDL trong bộ nhớ.
GatewayMột cửa vào duy nhất. Xác thực và định tuyến nằm gọn một chỗ.

Không dòng nào tách ra chỉ vì kiến trúc nghe hợp thời.

Thị trường cũng đang tự sửa sai điều này

Năm 2023, đội Prime Video của Amazon công bố một lần chuyển kiến trúc ngược chiều.

Trước
Serverless / microservice
Điều phối qua dịch vụ điều phối luồng. Dữ liệu trung gian qua S3.
Sau
Một tiến trình gộp (monolith)
Chạy trên EC2/ECS. Giám sát chất lượng video, cùng khối lượng việc.
giảm 90%
chi phí hạ tầng. Chi phí điều phối giữa các service rời rạc mới là thứ gây tốn kém, không phải khối lượng công việc thật.

Kết luận của chính đội đó: microservice là công cụ, không phải mục tiêu. Dùng khi hợp bài toán, không dùng theo mặc định.

Case Amazon Prime Video 2023 là sự kiện có thật, được nhiều nguồn kỹ thuật độc lập xác nhận. Cách Ebig áp dụng nguyên tắc tương tự cho kiến trúc riêng của mình là lựa chọn thiết kế của Ebig, không phải một quy luật chung cho mọi hệ thống.

Trình duyệt
(đã đăng nhập)
auth: 2ms
→
Gateway
(worker ở biên)
gw: 110ms
→
Local
(worker ở biên)
connect: 18ms
→
CSDL trong bộ nhớ
(TCP/TLS)
lệnh: 8ms
Bước 1 — Xác thực phiên: 2ms.

Trình duyệt đã có phiên đăng nhập (cookie), nên bước xác thực gần như tức thời — không phải chặng tốn thời gian.

Bước 2 — Workplace hỏi Gateway: 110ms.

Đây là chặng chờ lớn nhất ngoài CSDL trong bộ nhớ. Gateway gộp 4 lệnh gọi (đếm mail, đếm hội thoại, thông báo, hồ sơ) qua liên kết worker nội bộ trước khi chuyển tiếp xuống Local.

Bước 3 — Local mở kết nối CSDL trong bộ nhớ: 18ms cho 3 kết nối mới.

18ms là chi phí bắt tay TCP/TLS. Chi phí này giảm được nếu tái sử dụng kết nối thay vì mở mới mỗi lượt. Đây là điểm đã ghi nhận cần tối ưu, không phải giới hạn cứng của CSDL trong bộ nhớ.

Bước 4 — CSDL trong bộ nhớ chạy lệnh thật: 8ms.

3 lệnh FT.SEARCH (mail, chat, thông báo) chỉ tốn 8ms tổng cộng ở phía CSDL trong bộ nhớ — đúng việc CSDL trong bộ nhớ làm nhanh nhất. CSDL trong bộ nhớ không phải nơi mất thời gian.

Bước 5 — Tổng thời gian người dùng thấy: 325ms.

Ba đường chạy song song nên tính theo đường dài nhất: mail 207ms, chat 309ms, thông báo 325ms. Trong 325ms đó, chỉ 8ms là lệnh CSDL trong bộ nhớ thật. Phần lớn còn lại là hàng đợi liên kết worker nội bộ và bắt tay kết nối — đúng chỗ đội kỹ thuật Ebig đang tối ưu tiếp.

Ba đường chạy song song, người dùng chờ theo đường dài nhất
Mail
207ms
Chat
309ms
Thông báo
325ms

Người dùng thấy 325ms, không phải tổng ba con số cộng lại. Đó là đường thông báo — đường chậm nhất.

Nguồn: log đo thật trên /api/bootstrap?tier=shell, app.ebig.co — không phải số dựng cho trang này.

Hai tầng triển khai tách bạch, không phải một

"Không dùng chung" đúng cho tầng nào

SaaS dùng chung On-premise / Private Cloud
Dành cho ai Mặc định — gói $15/người dùng
SME, doanh nghiệp vừa và lớn dùng mô hình SaaS chuẩn.
Riêng — Chính phủ / BigTech
Cơ quan nhà nước cần chủ quyền dữ liệu. Doanh nghiệp lớn thay hệ thống lõi cũ theo mô hình Zero Downtime.
Chạy trên gì worker ở biên + kho khoá–giá trị + CSDL trong bộ nhớ. Hạ tầng chung cho toàn bộ khách hàng. 100% on-premise hoặc private cloud. Hạ tầng Kubernetes (K8s) auto-scaling riêng biệt.
Cô lập bằng Logic. Mỗi dự án một tiền tố khoá riêng (data:<projectId>), cộng cờ kiểm soát quyền truy cập. Vật lý. Cụm K8s riêng, không dùng chung máy với khách hàng khác.
"Không dùng chung" đúng chưa Một nửa — chung máy, riêng khoá. Đúng nghĩa — đây mới là tầng dự án của bạn không dùng chung với ai.

Bốn dòng đối chiếu cho thấy "không dùng chung" chỉ đúng ở cột phải. Cột trái chung máy, riêng khoá.

Mô phỏng — đúng theo code thật đang chạy

Bấm "Tạo dự án" thì chuyện gì xảy ra

Không có việc cấp máy chủ riêng hay dựng hạ tầng mới — đây là một lượt ghi dữ liệu, gần như tức thời.

Khách bấm
"Tạo dự án"
→
Gateway Worker
xác thực phiên
→
SSO Worker
ghi kho khoá–giá trị
→
Trả về
project + secret
Bước 1 — Khách bấm nút.

Workplace gửi tên dự án lên Gateway. Chưa có gì được tạo ở bước này.

Bước 2 — Gateway xác thực danh tính từ cookie phiên.

Gateway không đọc bất kỳ thông tin "tôi là ai" nào do chính request gửi lên. Đây là điểm bản cũ từng có lỗ hổng nghiêm trọng nhất: ai gọi API cũng tự xưng được là bất kỳ ai.

Bước 3 — SSO Worker ghi 2 bản ghi vào kho khoá–giá trị, theo đúng thứ tự cố ý:

(a) bản ghi thành viên owner trước, (b) bản ghi project sau. Nếu đứt giữa chừng, chỉ để lại một membership mồ côi — không bao giờ để lại một project không ai sở hữu, không ai xoá được.

Bước 4 — Trả về projectId + clientSecret.

Secret chỉ hiện đúng một lần. kho khoá–giá trị chỉ giữ salt + SHA-256, không lưu lại nguyên văn.

Dữ liệu nghiệp vụ (Mail, Chat, Document…) chưa có gì ở bước này. Nó chỉ xuất hiện trên CSDL trong bộ nhớ khi khách thật sự bắt đầu dùng module, theo tiền tố data:<projectId>:<Module>.

Việc chặn người ngoài dự án đọc dữ liệu (tenantEnforce) mặc định TẮT. Chỉ bật khi khách bắt đầu dùng dữ liệu thật, đúng như trong mã nguồn.

Nguồn: Api/SSO/store/projects.js, hàm createProject.

Ví dụ thật ngoài thị trường — không phải Ebig

Một dự án hạ tầng lớn tự xây thường trông như thế này

Số lấy từ hồ sơ triển khai của một dự án viễn thông có thật ở Việt Nam, đã ẩn tên — trích để đối chiếu quy mô, không phải kiến trúc của Ebig.

Physical deployment model (to-be · production)
59 VM
máy ảo phải dựng và trực
554 vCPU
tổng năng lực tính toán cấp phát
2.476 GB
RAM cấp phát cho toàn hệ
Lối vào · Cổng API
5 VM — Load Balancer + API Gateway.
Cụm Kubernetes
15 VM — 3 Master + 12 Worker, 21 service.
CSDL giao dịch · Cache
12 VM — CSDL giao dịch có dự phòng + CSDL trong bộ nhớ.
Nền tảng dữ liệu
16 VM — hàng đợi sự kiện, kho phân tích, máy tìm kiếm, kho đối tượng.
Vận hành · CI/CD · AI
11 VM + 2 GPU — Observability, Vault, Registry.
Hệ ngoài giữ nguyên
21 máy OMC RAN + 7 hệ tích hợp (ERP, LDAP…).
Mỗi zone ở trên là một cụm máy đội IT phải tự dựng. Tự vá bản vá bảo mật, tự trực khi có sự cố, tự viết lại khi công nghệ cũ lỗi thời.
96 máy chủ vật lý cũ
59 VM
nhờ chuyển sang Kubernetes. Và đó đã là kết quả sau tối ưu.

Sáu ô trên là sáu cụm máy riêng biệt, mỗi cụm một công nghệ khác nhau. Đó là thứ phải tuyển người biết vận hành.

Đây là độ phức tạp mà Ebig OS gánh thay khách hàng ở tầng hạ tầng mặc định. Không phải vì Ebig không cần hạ tầng tương đương. Mà vì đội ngũ Ebig là người vận hành nó, còn khách hàng chỉ thấy 7 module qua Workplace.

Không chỉ trung tâm điều hành

Không phải ai cũng ngồi ở trung tâm điều hành

Cùng dự án tham chiếu ở trên — lần này là quy mô con người, không phải hạ tầng.

Lớp đo: tức thời
~2.000 người

Người dùng đồng thời (tức thời)

Giờ cao điểm, tại trung tâm điều hành (NOC) — màn hình lớn, mạng ổn định, phiên làm việc dài.

Lớp đo: tổng tiềm năng
~30.000 người

Tổng nhân sự kỹ thuật tiềm năng

900 điểm × 25–40 nhân sự/điểm, rải khắp cả nước. Thiết bị di động, mạng yếu/chập chờn, thời gian thao tác ngắn.

Đây là hai lớp số đo khác nhau — đồng thời và tổng. Chúng không mâu thuẫn nhau. Nhưng chúng kéo theo hai yêu cầu thiết kế khác hẳn.

Điều kiện làm việcNhóm NOCNhóm hiện trường
Thiết bịMàn hình lớnThiết bị di động
MạngỔn địnhYếu, chập chờn
Phiên làm việcDàiThao tác ngắn

Ba dòng khác nhau ở cả ba dòng. Không thể dùng chung một thiết kế màn hình cho hai nhóm này.

Về giá ở quy mô này: giá $15/người/tháng tính đúng cho người dùng thường xuyên, dùng đủ 7 module. Với hàng chục nghìn nhân sự hiện trường chỉ thao tác vài phút mỗi ca, áp thẳng công thức đó chưa chắc là mô hình tính phí hợp lý. Đây là bài toán cần trao đổi trực tiếp theo đúng cách tổ chức của bạn dùng hệ thống, không phải con số áp sẵn.

Hỏi giá cho quy mô của bạn
Không cần đội kỹ thuật — nhưng nếu có, không bị đứng ngoài

Domain, hạ tầng, vận hành — Ebig lo hết, bạn không cần tuyển người biết làm

Đăng ký domain, trỏ DNS, chứng chỉ SSL, dựng máy chủ, giám sát, vá bảo mật — toàn bộ chuỗi việc này Ebig làm sẵn phía sau. Khách hàng không cần tuyển ai biết những việc đó tồn tại để bắt đầu dùng.

Nếu công ty bạn có đầu tư đội kỹ thuật riêng, họ không bị gạt ra ngoài — họ có thể tự tìm hiểu, xem log, cùng vận hành với đội Ebig. Đây đúng là mối quan hệ mà chính Ebig đang có với các nền tảng mình dùng:

Hạ tầng đám mây
· Dịch vụ dữ liệu ·
Ebig không tự vận hành trung tâm dữ liệu của họ
→
Ebig
dùng và xây thêm giá trị lên trên
Ebig
khách hàng không cần tự vận hành hạ tầng Ebig
→
Doanh nghiệp bạn
dùng và xây thêm nghiệp vụ lên trên

Cùng một tầng quan hệ, chỉ khác vị trí đứng — không ai phải hiểu hết lớp bên dưới mới dùng được lớp bên trên.

Khi khách hàng đầu tư một bài toán lớn

Hạ tầng K8s riêng, và dự án của bạn nằm ở đâu trong đó

SỐ LIỆU GIẢ LẬP — minh hoạ cách tính cho 1 dự án quy mô lớn, không phải một triển khai đã đo thật.

MÔ HÌNH TRIỂN KHAI VẬT LÝ — DỰ ÁN LỚN, GIẢ LẬP · 2.000 người dùng đồng thời giờ cao điểm
NGƯỜI DÙNG
(2.000 đồng thời)
Workplace (trình duyệt)
~600 req/giây TB · đỉnh ×3 ≈ 1.800
LỐI VÀO — nền tảng biên + 5 VM
đường hầm TLS
tiến trình đường hầm chạy trong cluster — cụm K8s không lộ IP công khai, lọc DDoS/bot ngay tại biên trước khi vào LB
Load Balancer
2 node · 4 vCPU · 8 GB
API Gateway
3 node · 4 vCPU · 8 GB — 3.000 req/s/node
CỤM KUBERNETES — 3 Master + 6 Worker · 9 VM
K8s Master
3 node · 4 vCPU · 16 GB — quorum etcd
K8s Worker
6 node · 16 vCPU · 64 GB — HPA theo module
Meet Document Feed Mail Chat Assistant Report
Dự án của khách hàng = 1 namespace
ResourceQuota riêng theo namespace, NetworkPolicy chặn namespace khác — "1 Table = 1 Module" vẫn sinh module như bình thường, chỉ khác chỗ triển khai: pod chạy trong namespace riêng của dự án, không dùng chung pod với khách khác.
DATABASE · CACHE — 6 VM
cụm CSDL trong bộ nhớ
6 node · 8 vCPU · 32 GB — 3 master + 3 replica, riêng cho dự án này
Kiểm chứng thông lượng
Đỉnh ước tính 1.800 lệnh/giây → 6 node cấp ~12.000 lệnh/giây, tỷ lệ 6,7 — rất an toàn. Cần cao hơn thì thêm shard, không phải giới hạn cứng của CSDL trong bộ nhớ.
AI TẠI CHỖ — 2 VM + GPU
Assistant — mô hình nội bộ
2 node · 16 vCPU · 128 GB + GPU 48 GB — dữ liệu không rời khỏi hạ tầng khách hàng, đúng yêu cầu chủ quyền dữ liệu
VẬN HÀNH — 5 VM
Observability
2 node · Prometheus/Grafana
CI/CD — OS
2 node · AI đề xuất → Dev duyệt → publish
Vault
1 node · khoá bí mật

Dự án của khách hàng nằm ở đâu: vẫn đúng cơ chế "1 Table = 1 Module" như tầng SaaS dùng chung. Khác ở chỗ toàn bộ pod, CSDL trong bộ nhớ, storage của dự án này chạy trong namespace K8s riêng, có ResourceQuota và NetworkPolicy chặn khách hàng khác, thay vì chỉ cô lập bằng tiền tố khoá như tầng mặc định.

Cách tính phỏng theo đúng phương pháp trong tài liệu tham chiếu triển khai vật lý nội bộ của Ebig. Số liệu ở đây được giả lập cho một kịch bản minh hoạ, chưa phải cấu hình đã đo cho một khách hàng cụ thể.

Vì sao con số mở rộng được — không phải đoán

Cụm K8s không phải nơi hứng toàn bộ lưu lượng

1. Lọc tấn công và bot ngay tại biên, trước khi tới K8s

Nghĩa là cụm chỉ cần tính sức cho lưu lượng nghiệp vụ thật, không phải cho kịch bản bị tấn công nặng nhất. Đó là khác biệt giữa một con số tính được và một con số phải đoán.

2. Đường hầm TLS — cụm K8s không cần lộ IP công khai

tiến trình đường hầm chạy như một Deployment trong chính cụm K8s, tự mở đường hầm TLS ra nền tảng biên — không cần mở cổng, không cần địa chỉ IP công khai cho cụm. Toàn bộ traffic vào cụm đã đi qua DDoS protection, WAF và health check của nền tảng biên trước đó.

3. Mở rộng bằng nhiều cụm, không phải một cụm khổng lồ

Cân tải toàn cầu kiểm tra sức khoẻ từng cụm từ 3 trung tâm dữ liệu mỗi vùng, tự định tuyến sang cụm gần nhất còn khoẻ, tự ngắt cụm quá tải. Điều này đổi hẳn cách trả lời câu "2 triệu người dùng thì sao". Không phải dựng một cụm K8s 9 VM đủ sức gánh hết. Mà là nhiều cụm, mỗi cụm quy mô như mô hình dự án lớn ở trên, đặt ở nhiều vùng. Tất cả đứng sau cùng một cân tải toàn cầu. Mở rộng gần như tuyến tính bằng cách thêm cụm, không phải thêm máy vào một cụm duy nhất.

Cách bố trí nhiều cụm ở trên là suy luận kỹ thuật từ mô hình đã chạy, chưa phải một triển khai multi-cluster đã đo.

Nếu bạn hỏi "2 triệu người dùng thì sao"

Giá $15/người dùng đã tính cho trường hợp này

Hạ tầng phía sau (CSDL trong bộ nhớ, nền tảng biên, K8s…) mở rộng được theo mức dùng — chi phí mở rộng đó đã tính vào mức giá $15/người dùng/tháng, không phát sinh thêm khi lượng người dùng tăng. Bạn không cần tự lo phần kỹ thuật này.

Câu hỏi đáng quan tâm hơn không phải "hạ tầng có chịu được không", mà là bạn muốn đứng ở đâu trong 3 cách làm dưới đây.

3 cách thị trường đang làm — không tranh luận cách nào đúng

Bạn muốn nhẹ đầu, hay muốn tự quyết định từng phần?

Ebig không nói cách nào tốt hơn — mỗi cách có cái giá phải trả riêng. Bạn tự nhìn và chọn.

Nhẹ đầu nhất

Trả theo người dùng

$15/người/tháng, trọn 7 module. Không cần chọn công nghệ, không cần biết hạ tầng chạy ra sao.

Cái phải đánh đổi: ít quyền tuỳ biến sâu hơn 2 cách còn lại.

Ma trận lựa chọn

Tự chọn dịch vụ/module

Chọn đúng module cần, phối hợp theo ý mình. Linh hoạt hơn, nhưng tự bạn phải quyết định tổ hợp nào hợp lý.

Cái phải đánh đổi: đây là bài toán ma trận — mỗi lựa chọn thêm là một quyết định phải cân nhắc, đúng nghĩa "mua dây buộc mình".

Toàn quyền, toàn trách nhiệm

Tự xây dựng hạ tầng riêng

Tự chọn công nghệ, tự dựng, tự vận hành — toàn quyền kiểm soát.

Cái phải đánh đổi: chỉ riêng việc chọn công nghệ đã mất nhiều công sức. Còn xây dựng và vận hành thật thì độ khó lớn hơn nhiều, xem ví dụ thực tế ở trên.

Kể bài toán, nhận so sánh