Private MMO buộc tôi chịu trách nhiệm cho client cũ, server cũ, dữ liệu sống và người dùng thật. Nhiều lỗi chỉ xuất hiện sau deploy.
Ranh giới
Giá trị tôi giữ lại nằm ở hệ thống hậu trường:
- System design và legacy integration.
- Tooling, debugging và operation.
- Release, recovery và dữ liệu sống.
Một game là cả system graph
“Server” thực ra là một chuỗi contract.
Mỗi mũi tên đều có thể drift. Process active không có nghĩa người chơi vào được.
| Surface | Contract cần giữ | Failure dễ bị hiểu sai |
|---|---|---|
| Launcher | Version, endpoint, file integrity | Mở được không có nghĩa client đúng build |
| Authentication | Identity, session, server selection | Login pass không chứng minh game service khỏe |
| Game service | Config, dependency, protocol | Process active không chứng minh loop hoạt động |
| Database | Schema, state, backup, recovery | Kết nối được không chứng minh dữ liệu nhất quán |
| Admin tool | Authority, validation, audit trail | UI tiện có thể che một mutation nguy hiểm |
Production là graph của contract, không phải danh sách process xanh.
Production hỏng theo từng phần
Game system thường hỏng từng phần:
- Service khởi động thành công nhưng đọc config cũ.
- Client chạy trên máy dev nhưng thiếu runtime asset sau khi đóng gói.
- Updater publish đủ file nhưng edge còn giữ artifact trước.
- Auto restart làm process sống lại nhưng xóa dấu vết của root cause.
- Một thao tác admin đúng về kỹ thuật nhưng sai authority.
Vì vậy health check phải đi qua nhiều lớp.
| Layer | Câu hỏi | Evidence |
|---|---|---|
| Process | Binary có đang chạy? | PID, service state |
| Dependency | Nó có chạm được thứ cần thiết? | Focused probe, dependency log |
| Contract | Một flow tối thiểu có hoàn tất? | Health transaction không mutation |
| User edge | Người dùng thật đang nhận gì? | Client version, public endpoint, edge hash |
Tool cho operator
Server manager, log viewer, config UI và health check phải trả lời nhanh:
- Thành phần nào đang chạy?
- Nó chạy với config và version nào?
- Lỗi gần nhất và recovery path là gì?
UI chỉ là bề mặt. Validation, authority, idempotency và audit trail phải nằm bên dưới.
Một chạm, nhiều guardrail
Một server manager WinUI 3 từng chạy tốt trên máy dev nhưng package crash ngầm với mã 0xc000027b. Nó thiếu language asset của SDK và có XAML implicit style sai.
Bài học:
- one-click = ít code, ít thứ phải nghĩ
+ one-click = complexity được hấp thụ và kiểm chứng ở phía tool
+ artifact phải được test như artifact, không test thay bằng source tree
+ failure phải để lại evidence trước khi auto recovery
Nút Stop cũng phải theo dependency order, graceful shutdown, memory flush, timeout và retry. Surface đơn giản không đồng nghĩa kiến trúc đơn giản.
Dữ liệu sống
Code có thể revert. Vật phẩm, nhân vật và transaction thì không.
| Release | Có thể đảo ngược thế nào | Gate cần có |
|---|---|---|
| Code và static config | Rollback artifact hoặc config đã hash | Build, compatibility, restart plan |
| Persistent state | Restore, reconciliation hoặc corrective operation | Backup, audit, owner authority |
AI có thể chuẩn bị evidence và dry-run. Mutation dữ liệu thuộc owner.
Release tới edge
Release chỉ xong khi client, updater, manifest, CDN và service cùng đúng contract.
- Artifact nào là canonical?
- Version nào đang được manifest quảng bá?
- Hash ở origin và edge có khớp?
- Client cũ gặp server mới sẽ thế nào?
- Rollback server có yêu cầu rollback client không?
- Player data sinh ra giữa hai version được xử lý ra sao?
Người dùng nhận artifact từ edge, không nhận badge trên dashboard.
Phần còn lại
- Legacy contract luôn thắng assumption mới. Protocol, encoding và config cũ không tự biến mất vì ta thay UI.
- Observability là product feature. Operator không nhìn thấy state thì system chưa thực sự operable.
- Artifact là thứ được ship. Source build được không chứng minh package chạy được.
- Auto recovery phải giữ evidence. Restart nhanh mà mất root cause chỉ chuyển lỗi sang tương lai.
- Data mutation cần authority cao hơn code change. Độ khó phục hồi quyết định độ chặt của gate.
- Đơn giản ở bề mặt là kết quả của boundary rõ ở bên dưới.
Private MMO không phải toàn bộ GreenJade. Nó là nơi tôi học production bằng hệ thống thật.