岳晓阳:大家下午好!开始之前先介绍一下优云数智,这是今年新搞的一个品牌,熟悉我们的人知道我们之前是数人云,数人云在今年5月份和UMCloud做了一次合并,合并之后启用了一个新的品牌优云数智。第一个字为什么是优呢?因为我们是Ucloud的全资子公司,这个优代表Ucloud,后面三个字“云数智”,代表公司以后的业务主要集中在云计算大数据和人工智能,从IaaS到PaaS提供全方位的解决方案。前面几位老师从微服务的架构到后面的治理,讲的都是比较高level的内容,我们这个配置中心在整个微服务体系里算其中一小块,只是解决了分布式环境下如何去做软件配置管理的问题。

岳晓阳-1

今天分享的标题是微服务系统的配置中心,按照常规,在开始之前需要老生常谈把微服务相关的内容大概介绍一下。微服务本身的诞生并不是一个偶然的现象,从上面这几个点,领域驱动设计、敏捷方法论、持续交付、虚拟化和基础设施自动化、DevOps文化我们展开来看:领域驱动设计指导我们如何分析并模型化复杂的业务;敏捷方法论帮助我们消除浪费,快速反馈;持续交付促使我们构建更快、更可靠、更频繁的软件部署和交付能力;虚拟化和基础设施自动化(Infrastructure As Code)则帮助我们简化环境的创建、安装;DevOps 文化的流行以及特性团队的出现,使得小团队更加全功能化。这些都是推动微服务诞生的重要因素。

前面几位老师都在讲2014年的论文对于微服务的定义,我就不再赘述了。这张暴露年龄的片子的下方是软件开发经历的三个阶段:单体应用、SOA架构、微服务架构。因为我本人是做了差不多17年的开发,亲身经历了每一个阶段,在目前这个阶段,微服务现在基本上已经被大家广泛接受了。

这里我们做了一个比较,片子上这两张图都是从网上下载的,实际是一个订车系统的架构,左边是单体架构,右边是微服务架构,从图上可以很清晰的看到两种架构的区别。单体和微服务的优劣对比,这里就不展开讲了,总的来说各有利弊,在一定的规模下,你很难说到底哪个好还是不好。

这一页是微服务的生命周期,从DevOps的角度来看,每次构建微服务并将其部署到环境时,都要经历从组装、引导、服务注册/发现、服务监控等四个阶段,对应了微服务开发的四个原则:

Ø  微服务应该是独立的,可以独立部署多个

Ø  微服务应该是可配置的

Ø  微服务实例需要对客户端透明

Ø  微服务应该传达其健康状况

我们的观点

今天分享的主题是配置中心,那我们主要还是讲讲有关配置中心的事情。在这里先抛出一个观点,我们认为:每一个大型的分布式微服务系统都需要一个配置中心。从单体应用那时候的配置管理来回顾一下,左边的图描述的是按照环境的不同,提供不同的配置文件,将这些配置文件跟二进制包打包在一起,这个在Weblogic时代是很流行的一种做法。到现在我知道有些厂家还是用这种方式做,它也是容器运行环境,在打镜像的时候会把配置的信息和镜像打在一起。假设实际当中有三个环境,前面是一个开发环境,中间是测试环境,后面是一个企业的生产环境。每个环境都有相关对应的配置文件,程序去哪个环境运行,就提供对应环境的运行包。

微服务系统到底怎么管理配置信息

考虑这么几个问题,一个系统到后面可能会拆成好几个微服务,每一个微服务可能有好多的实例,这些实例分布在不同的系统上,要让人手工去改这个配置系统,想想就是很可怕的事。这还只是一个系统,如果是多个系统呢?牵扯到多个数据中心呢?所以对于微服务的配置,我们有几个原则:一是程序和配置一定要分离,二是配置要集中进行管理,三是同一个程序包要适应多个环境,四是我们要提供一个客户端去拉取配置信息,五是服务端要能够推送,这一条主要是考虑程序运行时动态修改配置的情况,此外还要维护多版本的配置信息,还有配置中心自己的容灾,以及客户端规模到达一定数量的时候,必须考虑配置中心的性能问题。

我们整个团队的主要精力还是放在容器平台本身,去年上半年还在基于Mesos做PaaS平台,下半年转到Kubernetes体系。但是去年上半年开始,我们已经持续在微服务的领域中进行投入,配置中心是我们推出的其中一款产品。

微服务配置原则

Heroku创始人AdamWiggins发布了一个“十二要素应用宣言(TheTwelve-Factor App)”,为构建使用标准化流程自动配置,服务界限清晰,可移植性高,基于云计算平台可扩展的服务配置提供了方法论:

1.配置是可分离的,可从微服务中抽离出来,任何的配置修改不需要动一行代码。

2.配置应该是中央的 通过统一的中央配置平台去配置管理不同的微服务

3.配置中心必须必须可靠切稳定地提供配置服务。

4.配置是可追溯的,任何的配置历史都是可追溯,被管理且可用。

在云服务时代,对微服务做配置,对它有什么样的要求呢?

首先必须基于镜像管理部署,有自己相应独立的配置,而且程序包不可以因为环境的改变而更改。也就是说,它是独立于环境的不可变的程序包。

这是我们提到的,云化微服务的配置原则:

1.完全分离要部署的程序和其对应的配置。

2.程序包对于任何环境都是不可变的。

3.通过环境变量或配置存储在程序启动时注入配置。

这是我们去年整理的,对配置中心功能需求的分析,主要分三个大的方面,一是需要具备的功能,二是跟其它产品的集成,三是企业级的管理属性。

配置中心的必备要素

1.配置数据持久化存储。

2.可以横向扩展的缓存集群。

3.配置信息的拉取和推送。

4.配置数据及配置过程管理。

配置中心的系统架构

首先接入第一层是网关,整体的存储通过Hawk Server,下发到ETCD集群,ETCD集群再同步到K8S容器运行的平台。

先从数据迁移的状态简化成简单的几部分。比如新建一个配置,要么配置就被删除了,直接一步到位。如果没有这样做,就面临几种情况,这个配置是否要小范围的去做一些试探性的发布,这种情况可以走灰度发布,状态变成灰度中,配置不允许更改。要么就是两条路走,全量发布到所有服务上。要么就是放弃灰度回到之前的状态,放弃灰度后会去到已修改的状态。

另外一种情况,新建一个配置,直接全量发布,状态变成已发布状态,这时候是可更改的。但是每一次的更改,还是会回到原来那个状态。这个更改要做灰度吗?还是做发布?还是对发布有点后悔,不打算更改了?这时,从历史版本里面找一个合适的版本,激活,然后再做一次发布,通过几个简单的回路,涵盖了大部分的业务场景。

配置数据状态变迁

Hawk Portal是主体的配置界面,用户在界面上对配置进行输入、增删、改查的管理。这些资料会有两份,一份做通过Mysql做本地存储,另一份通过Hawk Server直接同步到ETCD.

由于HAWK Server是同步到ETCD里面,也就是说ETCD相当于另外一个数据库,这当中不存在数据之间的互相抄送,从而减低丢失数据的风险。持久化,是说研发和运维在后台做数据迁移,或者数据监控时更有把握,更方便。

优云数智HAWK其实有两个ETCD,一个ETCD是做注册发现的,Hawk Server、Hawk Portal都会注册在里面,作为相关的组件。类比Spring Cloud Eureka,Eureka是注册在Eureka Server里面的一个内存列表,集群里面所有Server共享这个内存信息。这个过程优云数智做了简化,所有信息全部注册在ETCD里面。

ECTD集群由于是共享的,组件的状态和一致性得到保障。Portal和Server之间不再通过Portal注册在Server并通过心跳来维持关系而是通过共享持久化的ETCD,保证数据在任意时刻所看到的状态都是一致的,从而保证了服务的注册,以及服务发现的稳定性。

Hawk和Eureka 选择的路径不一样。Eureka是比较重量级的,HAWK则简化了这个配置,简化这种代码的复杂性,重点提高系统的完整性,打造系统闭环,通过一些相对简单的方法,提高服务的稳定性。

配置一旦通过Hawk Portal潜入本地数据库,微服务的注册服务是怎么实现配置呢?当Portal写入配置到本地数据库时,同时也会通过服务Sever去同步到ETCD,ETCD里面存储的信息,是一个持久化的数据。

通过Server实时从ETCD拉取配置,有时是运行的时候拉取,有时是启动时拉取。启动时拉取有两种策略,启动的时候拉取配置,存储到本地作为静态文件的配置,运行时候拉取,动态的变更实时生效。

在Web层其实也有一些问题需要解决,比如,因为我们不是一个开发框架,是奔着一个开源系统的方向去,所以要解决服务跟浏览器之间的授权。

优云数智现在的做法是在本土数据库存储一些用户的信息,但是并没有采用传统意义上的建Session来做验证和授权,而是通过动态下发JWT的形式,每一个请求动态下发,根据我个人用户的一些信息生成,每次的请求一来一去都有交换新的Token,每个Token实时生效并有续约的功能,来代替传统意义上的Session.

配置中心的支撑体系

第一种运维管理体系类似于偏静态类的配置,在启动时通过配置文件直接拉取读业务。另外一种是开发管理体系,偏动态管理,代表的是一种程序或者在运行过程中,通过实时的变更配置内容而实时生效,达到的一种效果。

一个健全的配置中心应该支持这两种运维体系。

配置中心有这么几点:

1.基于Spring Cloud config打造。

2.完全兼容Spring Cloud config API.

3.配置更新通过GRPC双向流实时推送。

4.采用ETCD作为配置数据的强一致性存储。

5.具备LDAP用户认证、授权管理、审批流程、审计日志等企业级特性。

6.通过Open API和查件体系扩展支持基础组件,如sharding-gdbc.

配置中心部署模式

微服务配置中心如何部署,一般来讲会是这么两种方式,生产环节中单独布一套配置中心,在开发环境部署一套配置中心,开发环境的配置中心可以支持Dev、SIT、UAT等多个环境。

简单小结一下,前面主要分享了三个方面的内容,一是配置中心在微服务架构体系中处于什么样的地位;二是分析了业界微服务配置中心的发展情况,最后是微服务配置中心Hawk的架构说明。

对未来的展望

我们要做的工作,首先还是继续围绕Spring Cloud体系,为客户提供成熟方案和服务治理中心。二是探索基于Service Mesh的新方案,拥抱Istio/Conduit.三是配置中心Hawk我们已经做好了在GitHub上开源的准备工作,希望大家多多关注Hawk,关注您可信赖的云服务合作伙伴——优云数智。

今天的分享就这么多,谢谢大家。

 

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排 行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党
2023-10-31 14:47:04
市场情报 从营到赢,世纪互联蓝云合作伙伴云赢峰会2023圆满召开
具体来看,这些增值价值主要体现在两个方面,一是商务模式创新,另一方面,是服务能力开放。 <详情>
2023-08-29 08:49:05
运营商 中国联通发布《可信算力交易服务白皮书》
8月18日,中国联通举办“大模型时代下的AI算力新基建”分论坛,与合作伙伴一起,共同探讨中国算力产业发展趋势和未来。 <详情>
2023-07-20 17:25:54
云资讯 2023可信云大会·云原生技术与实践分论坛开幕在即
历经多年发展,云原生技术生态已趋于完善,行业接纳度攀升,发展进入深水期。 <详情>
2023-07-20 17:18:00
云资讯 2023可信云大会“一云多芯应用创新”分论坛先睹为快!
一云多芯技术的应用推动了IT产业链的创新发展,激发了新的商机和合作机会。 <详情>
2023-07-20 15:08:31
云资讯 2023可信云大会 “云安全和零信任”分论坛抢“鲜”看!
可信云大会“云安全与零信任”分论坛将在7月26日下午举办 <详情>