Trong hệ thống bao gồm nhiều dịch vụ, khi triển khai ứng dụng chúng ta gặp phải một số vấn đề sau:
• Mỗi một dịch vụ đều có các thông số cấu hình đi kèm (ví dụ thông tin về cơ sở dữ liệu, thông tin mô tả cho các dịch vụ gọi là metadata…).
• Các thông tin cấu hình này nằm phân tán ở từng dịch vụ cho nên rất khó kiểm soát.
• Các dịch vụ thường sẽ dùng chung một số thông tin cấu hình, cho nên mỗi khi thay đổi thông số cấu hình ở một dịch vụ này thì sẽ phải thay đổi hàng loạt nội dung liên quan ở các dịch vụ khác.
• Mỗi khi thay đổi thông tin cấu hình, sẽ phải thực hiện việc nạp lại các cấu hình cho từng dịch vụ.
Vì các vấn đề nêu trên, các thông tin cấu hình cần phải được quản lý tập trung. Để cài đặt mô hình này, tác giả sử dụng Spring Cloud Config46. Spring Cloud Config cung cấp cơ chế quản lý tập trung cấu hình ứng dụng như sau:
• Thông số cấu hình có thể được lưu trữ ở một tệp tin vật lý hoặc là lưu tại một kho lưu trữ tập trung (gọi là git repo).
• Tệp tin cấu hình được lưu theo quy ước {service-id}.properties hoặc {service- id}.yml. Trong đó “service-id” là tên định danh của từng dịch vụ.
• Các tệp tin cấu hình được sử dụng theo nguyên tắc kế thừa, ví dụ: theo quy ước, tệp tin application.properties lưu thông tin cấu hình chia sẻ chung cho tất cả các dịch vụ, các tệp tin cấu hình riêng biệt cho từng dịch vụ sẽ thừa hưởng lại các thông số từ tệp chính này.
• Spring Cloud Config còn cung cấp cơ chế tự động nạp lại cấu hình (gọi là auto reload config) bằng cách sử dụng các thành phần như Spring Cloud Bus47
hoặc có thể kết hợp với một số công cụ khác như Rabbit MQ48
Mô hình triển khai quản lý cấu hình tập trung được minh họa trong hình 3.15.
46 https://cloud.spring.io/spring-cloud-config/reference/html/ 47 https://spring.io/projects/spring-cloud-bus
57
Hình 3.15. Quản lý cấu hình tập trung với Spring Cloud Config