Spring Cloud Config Server và cách tạo một Config Server đơn giản

Khi xây dựng ứng dụng theo hướng Microservices, có nhiều thách thức cần được giải quyết. Một trong những vấn đề đó là "làm sao để quản lý các cấu hình trong cụm các microservices và làm sao để chúng được phân phối dễ dàng?".

Spring Cloud Config cung cấp giải pháp theo hướng của Spring, dựa trên các annotations và Spring beans. Đây là một cách dễ dàng để giải quyết vấn đề đối với các module đã được đóng gói, khi đó ta coi các module này là immutable. Có 3 thành phần chính trong module Spring Cloud Config đó là Configuration Repository, là hệ thống quản lý phiên bản, Config Server, cung cấp các cấu hình, và Configuration Client, sử dụng cấu hình từ Config Server.

Module này cung cấp các file cấu hình thông qua HTTP interface.

Các microservices của chúng ta sẽ không có file application.yaml trong trường hợp này. Như vậy trong quá trình bootstrap, chúng sẽ tìm kiếm trong Config Server để tìm đúng file config của mình, sau đó quá trình bootstrap sẽ kết thúc và đi đến trạng thái running.




Từ hình trên ta có thể thấy ý tưởng chính ở đây là phân phối các cấu hình thông qua Config Server. Có một vài lợi điểm khi sử dụng kiến trúc này. Đầu tiên là nó giúp ta dễ dàng bảo trì, thứ 2 là các cấu hình được cung cấp thông qua giao thức chuẩn là HTTP, hầu hết các developer đều biết và có thể sử dụng giao thức này, cuối cùng là khi cấu hình thay đổi thì các microservices sẽ nhận được thay đổi tức thì.

Tạo một Config Server project


Ta tạo một project như sau






Bật Spring Cloud Config Server


Trong file pom.xml của project vừa tạo, ta thấy có một đoạn như sau

<dependency>
  <groupid>org.springframework.cloud</groupid>
  <artifactid>spring-cloud-config-server</artifactid>
</dependency>

Đây là Config Server dependency. Nó cho phép chúng ta sử dụng Config Server trong ứng dụng.

Sử dụng Github như một repository

 Spring Cloud Config Server cho phép chúng ta sử dụng các công nghệ lưu trữ khác nhau như một kho lưu trữ các thuộc tính. Ví dụ như Git, SVN, filesystem...


Cấu hình ứng dụng Spring Boot


Để bật và chạy Config Server, chúng ta chỉ cần thêm một annotation vào Spring Boot Starter class.


package com.khoa.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

  public static void main(String[] args) {
    SpringApplication.run(ConfigServerApplication.class, args);
  }

Annotation @EnableConfigServer sẽ thực hiện một số "magic" để ứng dụng có thể kết nối đến kho lưu trữ cấu hình.

Cấu hình Git repository như một kho lưu trữ thuộc tính


Ta tạo một repository trên Github và lưu một file cấu hình đơn giản. Repository có địa chỉ là https://github.com/TranNgocKhoa/config-respo. Các file cấu hình được lưu ở thư mục config-files.

Sau đó ta cấu hình vào trong file application.yaml của Config Server


server:
  port: 5000

spring:
  cloud:
    config:
      name: configserver
      server:
        git:
          uri: https://github.com/TranNgocKhoa/config-respo
          search-paths: config-files*


Chạy ứng dụng


Sau khi chạy ứng dụng, ta đã có được một Config Server. Đây là nơi phân phối các cấu hình cho các ứng dụng. Config Server hỗ trợ enviroment nên ta sẽ sử dụng profile khi lấy cấu hình.

Ví dụ, truy cập vào URL http://localhost:5000/dummy/default ta sẽ được file JSON trả về như sau:


{
  "name": "dummy",
  "profiles": [
    "default"
  ],
  "label": null,
  "version": "30bb77070299a4b49cf2eddb8b087a2adfba1a3d",
  "state": null,
  "propertySources": [
    {
      "name": "https://github.com/TranNgocKhoa/config-respo/config-files/dummy.yaml",
      "source": {
        "info.message": "Testing my Config Server",
        "info.status": "It worked"
      }
    }
  ]
}

Tương tự, để lấy cấu hình cho local profile, ta truy cập địa chỉ URL: http://localhost:5000/dummy/local

Nhận xét