Tuyn tp Hi ngh Khoa hc thường niên năm 2024. ISBN: 978-604-82-8175-5
110
XÂY DỰNG GIẢI PHÁP TÍCH HỢP VÀ TRIỂN KHAI
LIÊN TỤC CHO ỨNG DỤNG MICROSERVICES
Đỗ Trường Xuân, Phạm Thanh Bình
Trường Đại hc Thy li, email: {xuandt, binhpt}@tlu.edu.vn
1. GIỚI THIỆU CHUNG
Microservices một xu hướng trong phát
triển phần mềm mang lại tính linh hoạt
khả năng mở rộng cho ứng dụng phần mềm.
Microservices chia phần mềm thành những
dịch vụ nhỏ hơn có thể chạy độc lập riêng
biệt. Mỗi dịch vụ nhỏ thực hiện một chức
năng riêng biệt dụ như quản đơn hàng
hoặc quản khách hàng. Việc chia nhỏ này
sẽ đem lại những lợi ích trong việc bảo trì
cũng như phát triển thêm những tính năng
mới một cách linh hoạt hơn, và khi xảy ra lỗi
thì chỉ dịch vụ đó bị ảnh hưởng thay toàn
bộ ứng dụng. Đặc biệt hiện nay rất nhiều
các công cụ cho phép hỗ trợ triển khai
quản các dịch vụ nhỏ này như công cụ
triển khai quản container Kubernetes
[1]. Kubernetes cho phép triển khai các dịch
thành các container trên một cụm các nốt
phần cứng. Công cụ quản microservices
như service mesh Istio [2]. Công cụ này cho
phép tăng cường bảo mật giao tiếp giữa các
dịch vụ, cân bằng tải, cũng như giám sát
thông số của dịch vụ khi chạy.
Tích hợp liên tục (continuous integration)
triển khai liên tục (continuous delivery)
[3] phương pháp tự động hóa quy trình
phát trin phn mềm bao gm tất cả các khâu
trong việc phát triển triển khai ứng dụng.
Tích hợp liên tục đề cập đến việc liên tục tích
hợp các thay đổi vào nguồn của ứng
dụng. Khi một nhóm phát triển làm việc cùng
nhau, CI đảm bảo rằng các phiên bản mới
nhất của nguồn được tích hợp vào một
kho lưu trữ chung một cách tự động. Việc
này giúp phát hiện sớm các lỗi hợp nhất
xung đột giữa các thành viên trong nhóm,
đồng thời đảm bảo nguồn luôn ổn định.
Triển khai liên tục liên quan đến việc triển
khai tự động các phiên bản mới nhất của ứng
dụng vào môi trường sản phẩm hoặc môi
trường thử nghiệm, giúp giảm thời gian
công sức cần thiết để triển khai ứng dụng,
đồng thời tăng tính nhất quán độ tin cậy
của quy trình triển khai. Hình 1 miêu tả quá
trình tích hợp liên tục và triển khai liên tục.
Hình 1. Quá trình tích hp
và trin khai liên tc
Quá trình tích hợp bao gồm: cập nhật
nguồn mới (commit code), biên dịch
nguồn (build), kiểm thử đơn vị (unit tests), và
kiểm thử tích hợp (integration tests). Quá
trình triển khai bao gồm: đánh giá nguồn
(review), triển khai trong môi trường staging
(môi trường cho các kiểm thử viên) môi
trường thực tế (production). Bài viết trình
bày một giải pháp cụ thể để xây dựng một
giải pháp tích hợp triển khai liên tục cho
ứng dụng microservices.
2. SO SÁNH CÁC GIẢI PHÁP
Một số công cụ tích hợp liên tục triển
khai liên tục phổ biến:
Tuyn tp Hi ngh Khoa hc thường niên năm 2024. ISBN: 978-604-82-8175-5
111
Công
cụ Ưu điểm Nhược điểm
Mã mở, tích hợp sẵn
với GitHub, dễ sử
dụng, cộng đồng lớn
Chỉ sử dụng với
các dự án Github
Github
Actions Định nghĩa workflow
bằng file YAML.
Hỗ trợ sử dụng
miễn phí và tính
phí với hạn chế
tính năng
Mã nguồn mở, nhiều
plugin, tùy biến cao,
miễn phí.
Giao diện khó sử
dụng và cấu hình
Jenkins Hỗ trợ cấu hình
pipeline bằng file
Jenkinsfile.
Yêu cầu triển
khai host riêng
Hỗ trợ build Docker
images.
Chi phí sử dụng
cao
Google
Cloud
Build Tích hợp với hạ tầng
Google Cloud.
Không hỗ trợ
host riêng
Tích hợp trong GitLab. Chỉ sử dụng được
với dự án GitLab
GitLab
CI/CD Định nghĩa pipeline
bằng file .gitlab-ci.yml.
Chi phí sử dụng
cao
3. XÂY DỰNG GIẢI PHÁP TÍCH HỢP VÀ
TRIỂN KHAI LIÊN TỤC
3.1. đồ khối giải pháp sử dụng
Github Action
Hình 2. Sơ đồ khi gii pháp
Các thành phần của giải pháp bao gồm:
Một ứng dụng mẫu microservices gồm
những dịch vụ sau: gateway (API), auth (xác
thực), customer (xử nghiệp vụ khách
hàng), common (xử nghiệp vụ chung),
recruitment (xử lý nghiệp vụ tuyển dụng).
Kho lưu trữ source code: Github.
Kho lưu trữ Docker image: Artifact
Registry của Google cloud platform (GCP).
Hệ thống triển khai và quản lý container:
Kubernetes của GCP.
Tăng cường giao tiếp bảo mật, cân bằng
tải giữa các microservices, giám sát dịch vụ:
Service mesh Istio.
Công cụ CI/CD: Github Actions [2].
3.2. Kịch bản của giải pháp
Branch develop: nhánh chứa mã nguồn
trong quá trình phát triển. Nhánh này sẽ được
triển khai lên môi trường phát triển (develop
namespace) trên cụm nốt Kubernetes.
Branch staging: nhánh chứa nguồn
đã hoàn thiện và selftest, sau đó biên dịch lên
môi trường staging để bàn giao cho tester
kiểm thử các test case. Nhánh này sẽ được
triển khai lên môi trường staging (staging
namespace) của cụm Kubernetes.
Branch master: nhánh chứa nguồn đã
vượt qua các bài test case của tester. Nhánh
này sẽ được triển khai lên môi trường thực tế
(production namespace) của cụm Kubernetes.
Hình 3. Kch bn tích hp
và trin khai liên tc
Tuyn tp Hi ngh Khoa hc thường niên năm 2024. ISBN: 978-604-82-8175-5
112
3.3. Các bước cấu hình chính của giải pháp
Tạo ra các namespace cho từng loại môi
trường
Tạo ra cụm các nốt Kubernetes
Tạo ra các Service Deployment cho
từng dịch vụ trên Kubernetes
Thiết lập các cấu hình Istio thiết lập
PeerAuth để cấu hình bảo mật khi giao tiếp
giữa các dịch vụ
3.4. Đánh giá giải pháp
Thc hin thêm mi mt API vào mã
nguồn của dịch vụ Recruitment
Thực hiện đẩy mã nguồn lên nhánh
develop, staging, tạo một tag mới trên
nhánh master. nguồn mới đã được tự
động kiểm thử triển khai trên môi trường
thực tế.
Hình 4. T động kim th
Hình 5. API mi được cp nht
4. KẾT LUẬN
Bài viết đã trình bày những xu hướng phát
triển phần mềm mới microservices, quy
trình tự động hóa quá trình phát triển phần
mềm. Bài viết cũng khảo sát các công cụ tự
động tích hợp triển khai liên tục với ưu
nhược điểm trình bày một giải pháp cho
phép thực hiện tích hợp triển khai liên tục
cho ứng dụng microservices.
5. TÀI LIỆU THAM KHẢO
[1] Linux Foundation. (2024). Kubernetes.
https://kubernetes.io/
[2] CNCF Foundation. (2024). Istio service
mesh. ttps://istio.io/latest/about/service-mesh/
[3] Github. (2024). GitHub Actions documentation:
https://docs.github.com/en/actions