Yêu cầu phần cứng tối thiểu cho kiến trúc CQRS và Event Sourcing
Để triển khai mô hình Command Query Responsibility Segregation (CQRS) kết hợp với Event Sourcing, hệ thống cần xử lý song song luồng ghi (Write) và luồng đọc (Read) độc lập, đồng thời lưu trữ lịch sử sự kiện (Event Store) với kích thước tăng theo thời gian.
Yêu cầu cấu hình tối thiểu cho môi trường phát triển (Development) và thử nghiệm (Staging) như sau:
- CPU: Tối thiểu 4 nhân (vCore) để xử lý các microservice song song.
- RAM: Tối thiểu 8GB. Event Sourcing tiêu tốn bộ nhớ khi rebuild state từ các event, cần RAM để cache dữ liệu.
- Storage: Tối thiểu 100GB SSD. Ưu tiên NVMe để giảm độ trễ I/O khi ghi log sự kiện liên tục.
- Network: Băng thông ổn định, ưu tiên kết nối nội bộ (LAN) tốc độ cao giữa các node.
Đối với môi trường Production, nhân đôi các thông số trên và cân nhắc sử dụng RAID 10 cho đĩa cứng để đảm bảo tính sẵn sàng cao (High Availability).
Kiểm tra cấu hình hiện tại của server bằng lệnh sau:
cat /proc/cpuinfo | grep "processor" | wc -l && free -h && df -h
Kết quả mong đợi: Hiển thị số lượng CPU cores, tổng dung lượng RAM (trên 8GB) và dung lượng ổ cứng trống (trên 100GB).
Cài đặt và cập nhật hệ thống Ubuntu 24.04 LTS
Bước đầu tiên là đảm bảo hệ điều hành Ubuntu 24.04 LTS đang chạy ở phiên bản mới nhất và các gói bảo mật đã được cập nhật.
Thực hiện cập nhật danh sách gói phần mềm và nâng cấp hệ thống lên phiên bản mới nhất:
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Quá trình cập nhật hoàn tất, không báo lỗi dependency, hệ thống được reboot nếu cần thiết (lệnh sẽ gợi ý).
Install các gói công cụ cơ bản cần thiết cho môi trường server (build-essential, curl, git, wget, unzip):
sudo apt install -y build-essential curl git wget unzip software-properties-common
Kết quả mong đợi: Các gói công cụ được cài đặt thành công, sẵn sàng cho các bước tiếp theo.
Thiết lập hostname và kiểm tra phiên bản kernel để xác nhận môi trường:
hostnamectl set-hostname cqrs-server && uname -r
Kết quả mong đợi: Hostname được đặt thành "cqrs-server" và hiển thị số phiên bản kernel của Ubuntu 24.04.
Cấu hình Docker Engine và Docker Compose trên Ubuntu
Để chạy các container chứa Event Store, Command Side và Query Side, ta cần cài đặt Docker Engine chính thức từ kho lưu trữ của Docker, không sử dụng phiên bản mặc định trong apt cache (thường là bản cũ).
Thêm repository chính thức của Docker vào hệ thống:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Kết quả mong đợi: Repository Docker được thêm vào file cấu hình nguồn phần mềm.
Cập nhật lại danh sách gói và cài đặt Docker Engine cùng các công cụ hỗ trợ:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kết quả mong đợi: Docker Engine, CLI, và Compose Plugin được cài đặt thành công.
Thêm người dùng hiện tại vào nhóm docker để có thể chạy lệnh docker mà không cần sudo:
sudo usermod -aG docker $USER
Kết quả mong đợi: Người dùng được thêm vào group "docker". Lưu ý: Cần đăng xuất và đăng nhập lại hoặc chạy lệnh `newgrp docker` để áp dụng.
Kiểm tra phiên bản Docker và Docker Compose sau khi cài đặt:
docker --version && docker compose version
Kết quả mong đợi: Hiển thị phiên bản Docker Engine (v27.x hoặc cao hơn) và Docker Compose Plugin (v2.x).
Chạy test container cơ bản để đảm bảo Docker Engine hoạt động:
docker run hello-world
Kết quả mong đợi: Container chạy thành công và in ra thông báo "Hello from Docker!".
Cài đặt các công cụ CLI: kubectl, jq và editor văn bản
Môi trường CQRS thường cần tương tác với Kubernetes (nếu mở rộng), xử lý JSON (Event Store trả về JSON), và chỉnh sửa cấu hình. Ta sẽ cài đặt kubectl, jq và Neovim (hoặc nano).
Cài đặt công cụ xử lý JSON `jq` từ kho mặc định của Ubuntu:
sudo apt install -y jq
Kết quả mong đợi: Lệnh `jq --version` hiển thị phiên bản hiện hành.
Cài đặt trình soạn thảo văn bản nâng cao `neovim` (hoặc `nano` nếu thích đơn giản):
sudo apt install -y neovim
Kết quả mong đợi: Lệnh `nvim` có thể chạy được trong terminal.
Cài đặt `kubectl` để quản lý cluster Kubernetes trong tương lai (sử dụng cách download binary trực tiếp từ Google Cloud):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl
Kết quả mong đợi: Binary file kubectl được tải về, cấp quyền thực thi và di chuyển vào thư mục hệ thống.
Xác minh toàn bộ các công cụ CLI đã được cài đặt và sẵn sàng sử dụng:
kubectl version --client && jq --version && nvim --version | head -n 1
Kết quả mong đợi: Hiển thị phiên bản của kubectl, jq và neovim mà không báo lỗi "command not found".
Điều hướng series:
Mục lục: Series: Triển khai Database CQRS với Event Sourcing và Ubuntu 24.04
Phần 2: Khái niệm nền tảng: CQRS và Event Sourcing »