本文内容来自12月21日 DockOne 微信群线上分享html
微服务近年来煊赫一时,若是在后端服务领域诸多热门技术趋势中,好比容器、微服务、DevOps等,找出一个最火的方向,那么非微服务莫属。微服务架构经过有效拆分应用,解耦系统,提供更好的软件伸缩性和企业的敏捷性,实现敏捷开发和部署。
它不是一种横空出世的技术,事实上微服务microservice的概念已经存在多年,一度曾是软件开发的宠儿。近年来被愈来愈多的企业和开发人员所推崇,并在互联网企业当中大量落地。一些有表明性的传统行业经过实施微服务架构,提升业务灵活性,加速业务需求变化和响应。mysql
微服务化做为一个体系,包括开发框架、以及周边配套工具链,好比服务治理、配置中心、安全管理、与容器的结合、监控管理等等。每每,围绕微服务的管理体系是微服务搭建的难点所在。
接下咱们就谈谈配置中心的架构与实战。git
1
为何须要配置管理中心github
首先,咱们的观点是,每个稍微有点规模的分布式系统,都应该有一个统一配置中心。
当今的系统,随着系统的复杂度增长,配置也日益增多,随着devops等概念的推广,人们对配置的指望值也愈来愈高:指望配置修改后实时地生效,指望支持灰度发布,发布回滚,历史追踪,环境隔离,集群配置,服务治理等等,这个时候分布式统一配置中心就变得尤其重要。算法
配置中心解决什么痛点:spring
把业务开发者从复杂以及繁琐的配置中解脱出来,只需专一于业务代码自己,从而可以显著提高开发以及运维效率。同时将配置和发布包解藕也进一步提高发布的成功率,并为运维的细力度管控、应急处理等提供强有力的支持。sql
配置中心的使用场景:数据库
在服务构建阶段,配合构建流水线,为服务软件包或镜像提供配置。
在服务运维阶段,动态调整服务配置,知足运维的灵活性需求。
在服务开发阶段,提供 OpenAPI,为其余基础设施的配置外置化,中心化提供支持。后端
配置中心Hwk产品需求:安全
基于上述一些列的特色,咱们构思了本身的配置中心的产品需求:
为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,实现了对服务端和客户端中环境变量,配置文件,动态属性配置的抽象映射,并支持配置的灰度下发,历史版本控制等先进功能
配置接口彻底兼容 Spring Cloud Config,后台管理功能则经过 open API的形式对外开放,知足企业多样化的定制需求
管理Springcloud的微服务框架的业务配置,服务治理配置以及kubernetes的configmap和secrets的配置,同时也能经过插件的方式对流行的第三方类库提供特别支持,好比与 sharding-jdbc 的深度集成
2
数人云hawk的架构
配置中心是一个强一致性的系统,配置数据不一致会一块儿严重的业务问题, Hawk 使用读写分离的方式处理配置数据,Hawk Portal使用mysql 存储配置数据,并把经过审核的配置数据同步给 HawkServer,Hawk Server 使用etcd 来存储并下发的配置数据。
认证与受权
认证与受权分为 Hawk Portal 和 Hawk Server 两个部分来看。
Hawk Portal
在用户使用 Hawk Portal 管理微服务应用和基础设施的配置以前,首选须要使用用户名与密码登陆。这是一个简单的 Form based login,目前展现不考虑与企业的认证与受权中心进行单点登陆,但须要可以容许用户经过存储在企业 LDAP 中的用户名和密码登陆。
Hawk Server
对于微服务应用经过 Hawk Client 向 Hawk Server 发起远程调用的时候,无需认证与受权过程,仅作必要的 TLS 对客户端进行身份认证。
当用户经过 Restful API 访问配置服务时,须要对用户的身份进行认证,用户的认证在 API Gateway 上完成而不是配置服务自己。
服务发现
etcd 同时也为 hawk 提供服务注册于发现的能力,Hawk Portal 与 Hawk Client 都经过 etcd 提供的能力发现和调用 Admin Service与 Config Service。
配置存储
企业基础设施与微服务应用的配置数据,以及 Hawk 配置中心自己的配置信息首先在 mysql 中落盘,仅当配置数据被激活后,才会同步到 Hawk Server,而后由 Sync Service 落盘到 etcd
领域模型。
集群管理
Hawk 能够同时管理多个配置集群,devops 用户能够把不一样的集群映射为不一样的执行环境,好比开发环境 DEV,功能测试环境 FAT,验收测试环境 UAT等等,使用一套配置中心同时支持多种环境,下降维护成本。
生产环境通常不会与上述环境部署在一块儿,此时用户能够把配置集群映射到不一样的部门,在物理上隔离不一样部门的配置数据。
配置集群也能够用于在物理上隔离不一样资源的配置,好比区分基础设施(消息中心,调度中心,微服务中心,存储中心)和微服务应用。
配置下发
微服务应用能够经过Hawk 提供的客户端 SDK Hawk Client 获取配置,也能够经过 Spring Cloud Zuul 服务网管来使用 Config Service 提供的兼容 Spring Cloud Config 的 Restful 接口。
Hawk 能够经过推送的方式把配置变动直接下发给 Hawk Client ,经过这种方式,配置能够实现实时更新。
Hawk Client
在获取配置信息的同时会链接到配置信息所在的 etcd 集群,并 watch etcd 中的配置配置数据。当 etcd 集群中的配置信息更新后,Hawk Client 将会收到通知。
Hawk Client 提供原生接口容许微服务应用注册监听器监听配置信息的变化
服务治理
配置中心的配置管理和动态配置下发能力,使得它能够承担服务治理中的 Control Plane 的职责,它能够把服务治理相关的配置下发给实际的执行模块,好比 dubbo,或者是 Spring Cloud 集成的 Netflix 治理工具库,好比 hystrix 以及 ribbon。
服务治理的主要功能包括
:
3
Hawk基于Spring Cloud的服务治理
系统目标
抽象与具体的服务框架隔离的治理的数据域模型,在系统中均用系统的域模型表示全部的服务治理参数信息,下发到客户端后,能转化成相对应的服务配制信息。
功能分类
数据流向场景
组件
服务治理的namespace命名: governance
负载均衡/路由(这里可让用户自由输入ribbon的配制)
参考:
http://support.huaweicloud.co...
https://github.com/ctripcorp/...
https://github.com/knightliao...
https://github.com/Qihoo360/Q...
4
问答环节
一、 Q:请问配置中心存储的是配置文件仍是key-value? 像数据库链接串之类的信息如何管理的?跟数据链接池怎么配合?
A:是key-value的,存储在etcd集群上,服务可经过hawk-client拉取配置到服务本地生成本地的配置或直接导入到本地环境变量,这些配置随着服务启动就会生效。
二、 Q:请问Hawk是一个产品吗?
A: Hawk将会是数人云推出的一个企业产品,同时也会做为一个开源项目发布在github上,具体的开源时间咱们还不肯定,相信很快。
三、 Q:为何要本身开发一个配置中心,而不是直接使用Spring cloud config?
A:其实很简单,单纯的spring cloud config没有办法充分地切合企业系统的生产须要。我这里有一个功能对比图,你们能够参考一下。
四、Q:请问这个配置中心只能应用于Java语音吗?
A:配置中心的代码是Java编写的,可是配置中心的使用方,即拉取配置的一方是不限制语言,由于配置拉取是基于http协议。
五、Q:请问数人云的官方网站有关于Hawk这个产品的详细功能介绍吗?今天讲得仍是比较快的,但愿能具体了解;谢谢。
A:有的, https://www.shurenyun.com/product-hawk.html
六、 Q:请问CI/CD流程控制是本身研发的仍是用的开源方案?
A:CI/CD持续集成,持续交互实际上是一个很大的概念,我理解你想问的是Hawk的操做流程以及所使用的技术栈的问题,最初咱们参考过其余的一些开源好比携程的appolo,百度的disconf等,结合他们的一些理念,咱们又本身总结思考了本身的需求,对CI/CD的业务作出概括,以达到简单直接的目标,技术方面,咱们主要用到spring boot, spring cloud以及etcd等技术,其中spring cloud主要适用于服务注册发现,服务治理等方面。
七、 Q:我想问下,关于配置中心部署问题,第一个,不一样环境或者不一样集群,大家配置中心是怎么部署的,还有,一些基础组件配置和应用配置放在一个配置中心吗?
A:配置中心经过不一样的存储集群,能够实现一个配置中心服务多个环境,可是原则上,建议测试,开发公用一个不熟而生产独立部署,配置中心的中心概念是基于微服务,因此从概念上说,咱们的配置是生效于一个服务下的实例级别,而不是组件级别,每一个实例下又分为不一样的命名空间,命名空间可划分为:应用层,环境变量和自定义的组件,可由客户自定义,因此原则上涵盖了组件与服务的概念。