微服务配置中心, 这个方案 Go 里用起来不输 SpringCloud

本文探讨了在微服务架构中配置中心的重要性,并对比了Spring Cloud Config的使用。在Go语言中,虽然没有像Spring Cloud那样的成熟解决方案,但通过Viper库可以实现类似功能,包括从ETCD或Consul读取远程配置并支持热更新。文章提到Viper从ETCD读取配置时存在bug,需要自行扩展实现,并给出了简单的配置监听和热更新示例。
摘要由CSDN通过智能技术生成

微服务架构设计模式里有一条讲到,要设计可配置的服务。把服务从单体架构细分成微服务后,所有配置属性都集中存储在一个位置,更易于管理。这个集中存储管理配置的地方,就是配置中心。

使用配置中心还有一个好处就是,往往都支持应用配置的热更新,这样就不需要像修改本地配置那样进行发版部署了。

但是这么好的事儿就没有缺点了吗?当然有,除非有基础设施支持,否则它需要额外的人力进行设计和运维。不过好在有各种开源框架比如 Spring Cloud Config,能使服务接入配置中心,没有什么侵入性。至少在表面使用上感觉不到有变化。

那么在 Go 里有没有类似的方案呢?经过我这周的试验探索,还真发现了,这个方案落地也很简单,今天就跟大家简单说说。更详细的还得是大家上手操作起来才能感受到,本方案涉及的代码太多,可以给我的公众号:网管叨bi叨,发送消息【go-config】获取项目下载地址。

分享软件开发和系统架构设计基础、Go 语言和Kubernetes。

有人可能会说远程配置中心,我就把配置放在 ETCD 上,项目启动的时候拉下来不就行了?先别着急,咱先看看隔壁家 Spring 是怎么实现这个事儿,有没有我们可以学习的地方。

Spring 的配置和配置中心

用过 Spring 的同学都接触过,在 Java 的项目里都有一个resources​目录,这个目录里一般都会有类似名字叫application.properties 的配置文件。

配置文件

也有可能配置文件的后缀名是.yaml​,那么属性配置的格式就是YAML格式的。

在这些配置文件里设置的属性配置,都可以通过可以通过@Value注解注入到对象的属性上,比如假设我们在配置文件里设定了订单的折扣为95折的配置

order:
  discount: 95

那在代码里,我们就能像下面这样,把属性配置的值绑定到类实例的属性上:

public class CoffeeOrderController {

    @Value("${order.discount}")
    private Integer discount;
  
  ......
}

后来,因为微服务流行起来了,大家又对自己的服务拆得乐此不疲,所以 Spring 家族里后来又有了 SpringCloud,像我们知道的知名厂商 Alibaba、Netflix 都按它这个标准开源自己内部使用的组件,就有了我们天天看到的各种资料推广文里面的 SpringCloud-Netflix,SpringCloud- Alibaba这些。

SpringCloud- Alibaba在国内因为阿里的关系使用更广泛一些,它里面提供的配置中心方案是一个叫 Nacos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值