>백엔드 개발 >Golang >Go-Zero 기반의 Dynamic Configuration Center 실습

Go-Zero 기반의 Dynamic Configuration Center 실습

WBOY
WBOY원래의
2023-06-23 08:27:091812검색

인터넷 애플리케이션 및 시스템의 지속적인 개발로 인해 구성 관리가 점점 더 중요한 작업이 되었습니다. 과거에는 수동 구성이나 간단한 구성 파일 솔루션을 자주 사용했지만 이러한 방법은 더 이상 빠르게 변화하는 비즈니스 요구를 충족할 수 없습니다. 따라서 현대 마이크로서비스 아키텍처에서는 동적 구성 센터가 필수가 되었습니다.

이 글에서는 Go-Zero 프레임워크 기반의 Dynamic Configuration Center 실습을 소개하겠습니다.

go-zero 소개

go-zero는 확장 가능한 고성능 마이크로서비스를 구축하기 위한 간단하고 효율적이며 사용하기 쉬운 프레임워크입니다. 다양한 최신 인터넷 애플리케이션을 지원하는 풍부한 도구 체인과 플러그인이 있습니다.

go-zero는 비즈니스 모델 개발을 지원할 뿐만 아니라 캐싱 시스템, 메시지 대기열, 서비스 검색, 로그, 데이터베이스 마이그레이션 등과 같은 일련의 비비즈니스 모델 솔루션도 지원합니다. 이는 개발자에게 더 많은 지원을 제공하고 고품질 애플리케이션을 구축하는 데 도움을 줄 수 있습니다.

동적 구성 센터 실습

이 글에서는 Go-Zero 프레임워크의 동적 구성 센터 실습에 중점을 두겠습니다. Dynamic Configuration Center는 애플리케이션의 구성 정보를 관리하는 서비스입니다. 동적 구성 센터를 통해 구성의 신속한 변경 및 롤백을 지원하면서 다양한 버전의 애플리케이션을 쉽게 관리할 수 있습니다.

구성 데이터 구조

먼저 구성 문제를 해결하는 데 사용되는 데이터 구조를 고려해 보겠습니다. 구성 항목을 저장하기 위해 구성 구조를 정의할 수 있습니다.

type Config struct {
    Name      string `json:"name"`
    Version   string `json:"version"`
    Endpoint  string `json:"endpoint"`
    AccessKey string `json:"access_key"`
    SecretKey string `json:"secret_key"`
}

애플리케이션에서 필요에 따라 더 많은 구성 항목을 추가할 수 있습니다.

구성 관리

go-zero 프레임워크에서는 etcd나 Zookeeper를 구성 관리를 위한 스토리지 백엔드로 사용할 수 있습니다. etcd가 스토리지 백엔드로 사용되고 go-zero 프레임워크에서 제공하는 구성 관리 도구가 etcd를 작동하는 데 사용된다고 가정합니다.

먼저 etcd 클라이언트를 저장하려면 ConfigManager 구조를 정의해야 합니다.

type ConfigManager struct {
    cli *clientv3.Client
}

초기화 기능에서 etcd 클라이언트를 생성하여 ConfigManager에 저장할 수 있습니다.

func NewConfigManager(endpoints []string) (*ConfigManager, error) {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints: endpoints,
    })
    if err != nil {
        return nil, err
    }
    return &ConfigManager{
        cli: cli,
    }, nil
}

다음으로 구성 항목을 etcd에 저장하는 SaveConfig 함수를 정의할 수 있습니다.

func (m *ConfigManager) SaveConfig(cfg Config) error {
    ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
    defer cancel()

    data, err := json.Marshal(cfg)
    if err != nil {
        return err
    }

    _, err = m.cli.Put(ctx, "/config/"+cfg.Name, string(data))
    if err != nil {
        return err
    }

    return nil
}

마지막으로, etcd에서 지정된 이름을 가진 구성 항목을 가져와서 Config 구조로 구문 분석하는 GetConfig 함수를 정의할 수 있습니다.

func (m *ConfigManager) GetConfig(name string) (*Config, error) {
    ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
    defer cancel()

    resp, err := m.cli.Get(ctx, "/config/"+name)
    if err != nil {
        return nil, err
    }

    if len(resp.Kvs) == 0 {
        return nil, fmt.Errorf("config not found")
    }

    var cfg Config
    err = json.Unmarshal(resp.Kvs[0].Value, &cfg)
    if err != nil {
        return nil, err
    }

    return &cfg, nil
}

이러한 도구를 사용하면 구성 항목을 쉽게 관리할 수 있습니다. 이제 애플리케이션에서 이러한 구성 항목을 사용하는 방법을 고려해 보겠습니다.

애플리케이션 사용

go-zero 프레임워크에서는 구성 파일을 사용하여 애플리케이션의 구성 정보를 관리할 수 있습니다. 구성 파일을 사용하면 애플리케이션이 시작될 때 구성 항목을 로드할 수 있습니다. 그러나 보다 유연하고 실시간 솔루션이 필요한 상황이 있습니다.

go-zero 프레임워크는 원격 구성 센터에서 애플리케이션 구성 항목을 로드하기 위한 ConfigCenter 플러그인을 제공합니다. 동적 구성을 달성하려면 ConfigCenter 플러그인만 구성하면 됩니다.

func main() {
    c := &cli.App{
        Commands: []*cli.Command{
            {
                Name:  "serve",
                Usage: "start server",
                Flags: []cli.Flag{
                    &cli.StringFlag{
                        Name:  "config",
                        Usage: "config file path",
                    },
                },
                Action: func(ctx *cli.Context) error {
                    var cfg Config
                    err := config.LoadFromEtcd(cfg.Name, cfg)
                    if err != nil {
                        log.Fatal(err)
                    }
                    log.Println(cfg)

                    // start server
                    return nil
                },
            },
        },
    }
    err := c.Run(os.Args)
    if err != nil {
        log.Fatal(err)
    }
}

위 코드에서는 config.LoadFromEtcd 함수를 사용하여 etcd에서 지정된 이름의 구성 항목을 로드합니다. 구성 항목을 업데이트해야 하는 경우 etcd에서 수동으로 수정할 수 있습니다. 애플리케이션을 다시 시작하면 최신 구성 항목이 로드됩니다.

보안

동적 구성 센터를 구현할 때 보안은 매우 중요한 포인트입니다. 구성 항목에는 데이터베이스 자격 증명, API 키 등과 같은 민감한 정보가 포함되는 경우가 많기 때문입니다. 따라서 실무에서는 다음 사항에 주의해야 합니다.

  • etcd 및 기타 관련 서비스의 보안을 보장합니다.
  • etcd에 일반 텍스트 비밀번호나 민감한 정보를 저장하지 마세요. 민감한 정보는 암호화 또는 보안 스토리지 솔루션을 사용하여 보호할 수 있습니다.
  • etcd 및 애플리케이션을 인증하고 구성 항목에 액세스하고 수정할 수 있도록 권한을 부여합니다.

결론

동적 구성 센터는 최신 애플리케이션의 필수적인 부분입니다. 이는 애플리케이션 구성 정보를 관리하는 유연하고 빠르며 안전한 방법을 제공합니다. 본 글에서는 Go-Zero 프레임워크 기반의 동적 구성 센터 사례를 소개합니다. 이러한 사례를 통해 구성 항목을 쉽게 관리하고 동적 구성을 구현하며 이를 애플리케이션에서 사용할 수 있습니다.

위 내용은 Go-Zero 기반의 Dynamic Configuration Center 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.