Spinnaker第二节-微服务设计

本篇详细介绍一个spinnaker项目的微服务设计,这里之所以叫微服务设计,而不是叫微服务架构,是因为spinnaker是由Netflix和Google多个开源产品搭建的微服务节点组合成的一个微服务组群,里面掺杂了Go、Groovy、Node.js各种语言,并没有采用流行的Spring Cloud这样的架构

 

我们理解的传统的微服务架构包括以下部分:

我们先不说具体的细节,我们可以看得出从大体方向上微服务架构是具备一定方法论的,需要配套一系列辅助和管理节点来帮助我们完成服务的治理。

 

Spinnaker虽然没有这种治理的理念,我仍认为它是微服务设计,是因为很多节点项目在2012年就启动了,那个时候还没有SpringCloud,很多Spring Cloud的雏形代码都是从这些开源项目里获取的灵感。我对微服务的理解是,只要对功能的拆分做的好,节点职责明确,每个节点间通过ResfFul松耦合调用,节点内部也具备高扩展性,就可以称之为微服务设计。

 

具体看下Spinnaker每个服务节点的能力职责

 

Deck—前端UI

这个节点是node.js开发的一套前端的UI界面,为操作人员提供可视化的界面,唯一对接的后端接口是gate。

 

Gate—服务网关

与SpringCloud中zuul一样,Gate节点负责对后端端口进行路由转发和鉴权,只不过这里的鉴权并不是由Gate自己提供的,还调用了另一个叫“Fiat”的服务节点。Fiat和Gate互相配合完成鉴权,关于如何鉴权我们在Fiat节点中详细说明。

 

Fiat—服务鉴权

Spinnaker关于账号的安全限制分为两个方面:鉴权Authentication和授权Authrization。鉴权是对账号合法性的认证,授权是授予这个账号什么样的权力。spinnaker先交给了Fiat这个微服务节点来处理鉴权,得到登陆账号后把用户名和是否合法传给gate,gate再去调用fiat的授权接口。Spinnaker的账号密码是非侵入性的,也就是说它没有独立的用户仓库,完全靠LDAP、github、SAML和自定义文件配置等方式直接集成到企业系统中。

 

Front50

Spinnaker中专门负责存储的地方,对接的是AWS中的S3、Redis、minio(可以理解为本地的一个S3桶)、Google的Storage和微软的Storage,可以说把国外主流的云存储都支持了一边,

 

CloudDriver

Spinnaker的三大核心之一,负责对接云平台API的微服务节点,看似功能比较单一,只是调用云平台SDK而已,但是要知道每接入一种云就要将这个云的所有SDK几乎都要对接一遍,这可是个十分庞大的工作量。原生版本支持OpenStack、AWS、Google云、微软云、K8s,2019年6月份腾讯云接入了进来,成为国内首位支持spinnaker的云厂商,2019年8月阿里云将会接入,京东云华为云已经开始制定接入计划。

 

Rosco

Spinnaker中负责制作镜像的微服务节点,理论上它应该也属于clouddriver的一部分,但是由于制作云平台的镜像是个独立而复杂的功能,而且需要引入packer这样的专业工具,所以spinnaker将它专门拆分了出来。

 

Echo

这是spinnaker中负责跑堂的店小二,从字面意思看是负责通知的微服务,其实它还干了很多其它的辅助工作,例如定时任务、事件监听等,用dota的话说是标准的5号位,打信息的,没啥技术含量,专干体力活。

 

Igor

这是spinnaker中的外交官,负责对接一切CI/CD领域流行的工具,例如Jenkins、github、travis等,就像一个插排转接头,负责与外面工具进行集成。

 

Kayenta

这也是spinnaker三大核心之一,负责金丝雀分析的微服务节点。它对接了Stackdriver、Atlas、 Prometheus、Datadog这些主流的监控工具,可以让我们抛开业务层面直接拿新版本镜像与在网版本镜像进行CPU、内存、磁盘、IO、网络请求等各种维度的比对,并赋予一定权重,最终给出0-100之间的一个参考分数,辅助我们判断新版本的可用性。

 

Orca

Spinnaker三大核心之首,负责整个微服务的“编制”工作。Spinnaker将一些串行的任务指定为一个个的stage,而前台UI提供了可视化的界面将这些stage串联起来形成一个个的pipeline。Orca就是负责这些Pipeline中stage的调度的。举个例子要发布一个软件包首先要经过baker这个stage,orca会去调用rosco进行处理;然后有了镜像后经过deploy这个stage去highlander部署,orca会去调用clouddriver创建伸缩组、创建伸缩配置、创建伸缩规则、监听实例状态、缩容在网伸缩组、切换LB的流量、销毁在网伸缩组等一些列接口,一旦中间发生异常需要通知echo进行告警。

 

Halyard

有点像Spring Config+Spring Bus的组合体,是spinnaker为了操作方面开发出的命令方式管理工具,按照spinnaker的hal命令操作手策输入不同的命令和参数,halyard就会将这些配置更新到对应的微服务yml配置中去。

 

Spinnaker整个设计就像积木一样,每个节点都可以独立运转并具备独当一面的功能,而做为混合云持续部署平台,Orca、CloudDriver、Rosco、Front50、Gate、Deck这6个是必选的,如果需要安全加固就引入fiat,如果需要通知机制就引入echo,如果需要金丝雀分析就引入kayenta,如果要跟其它工具集成就引入igor。Halyard也不是必须的,因为一旦熟练后完全可以直接修改对应服务的yml配置文件。

 

所以微服务设计的产品,重在功能的拆分,而且每个节点也具备独立的服务能力和高扩展性。

发布了168 篇原创文章 · 获赞 184 · 访问量 41万+

猜你喜欢

转载自blog.csdn.net/yejingtao703/article/details/93633349
今日推荐