基于Spring Cloud及K8S构建微服务应用


摘要

广发证券蔡波斯先生经过三个大方向来为咱们分享基于Spring Cloud及K8S构建微服务应用。node

内容来源:2017年6月10日,广发证券蔡波斯在“Spring Cloud中国社区技术沙龙-深圳站”进行《基于Spring Cloud及K8S构建微服务应用》演讲分享。IT 大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。
nginx

阅读字数:1565 | 3分钟阅读docker

嘉宾演讲视频及PPT: t.cn/RTo2OTX

基于Spring Cloud构建微服务

Netflix OSS- Eureka

Eureka服务启动注册的等待时间比较久,注销服务也须要等待,这是最终一致性。致使服务已经下线了,可是服务中内心还有,这时若是接到请求就会出现报错的状况。
json

Netflix OSS- Ribbon

Ribbon基于客户端的负载。传统的负载分为不少种,好比服务端的负载、客户端的负载、在host上统一的喷发等等。而基于客户端的负载好处就是分部,但本地的服务注册必需要和远程保持同步的状态。后端

Ribbon还提供了动态路由。有些用过其它框架的用户会质疑,Netflix默认提供的路由rule里,为何不提供基于权重的路由方式呢?因为每一个团队的开发背景不一样,Netflix的服务基本上都附属在亚马逊云上,因此对于不少云端的服务强调无状态,在无状态的状况下基于权重的路由方式就没有什么意义了。安全

基于meta/tag可使用Ribbon对server instance进行过滤,而后再选择。并发

Netflix OSS- Feign

Feign是在Ribbon的基础上对HTTP的加强。框架

Feign有一个默认的重试次数设置。错误重试一次,第一次等待100毫秒重试,最大等待1秒重试。微服务

还有一个超时设置。超时设置分为连接超时和读超时,能够在代码里设置。它默认的connectTimeout为10秒,readTimeout为60秒,默认的retry为4次。外部nginx的proxy_connect/read_timeout设置要大于Feign的配置,才能起到fallback的效果。工具

Netflix OSS- Hystrix

Hystrix是由Netflix提出的对业界很重要的一个概念。

若是使用rest分隔进行微服务开发的话,对于Hystrix来讲是服务调用失败的,这时就必需要标注Hystrixbadrequest,否则它会把这些异常计算在内,致使整个接口服务的熔断。

Hystrix还能经过线程组达到隔离的效果。

Netflix OSS- Gateway

Zuul的提出在当时是为了适配不一样的协议格式,给移动端或PC端带来统一的入口。Gateway是有些相似微服务的概念。

做为网关,它能够添加或修改请求参数、header,修改响应body,经过zuul对动态路由进行操做。zuul负责网关层面的统一安全校验,虽然在每一个微服务里作了数据权限,可是登陆权限仍是在网关层作的。而服务聚合若是在网关层作会致使业务逻辑紧密耦合,须要找其它更好的方案去作。

Spring Cloud

SpringCloud要有动态推送能力,不然手工作refresh太麻烦。

Yaml配置容易由于忽略重复key而出错,须要一个更加友好的工具,进行编辑、校验。

要有更丰富的格式在config的配置,好比json。

Slack alert

集成报警的好处就是在持续集成的时候直观地了解到服务部署的状况并传达出来。

基于docker及kubernetes部署微服务

万物docker化

非关键的服务或设备均可以跑在docker上。

十二要素

1. 基准代码:一份基准代码,多份部署。

2. 依赖:显式声明依赖关系。

3. 配置:在环境中储存配置。

4. 后端服务:把后端服务看成附加资源。

5. 构建,发布,运行:严格区分构建和运行。

6. 进程:将应用程序做为一个或多个无状态进程运行应用。

7. 端口绑定:经过端口绑定提供服务。

8. 并发:经过进程模型进行扩展。

9. 易处理:快速启动和优雅终止可最大化健壮性。

10. 开发环境与线上环境等价:尽量的保持开发,预发布,线上环境相同。

11. 日志:把日志看成事件流。

12. 管理进程:后台管理任务看成一次性进程运行。

Kubernetes Cluster

由于咱们相信google的能力,因此咱们选择了Kubernetes。Kubernetes有本身的master,能够在master下面的每一个node里跑docker。

对pod的服务发现机制

经过虚拟的ClusterIP地址、虚拟端口号,动态负载分发到后端pod。

SpringCloud vs k8s

SpringCloud和k8s有不少功能是重复的,k8s没有熔断功能,也能够经过附加的组件把它加进去。

BUILD+TEST+DEPLOY+MONITOR

Code review

Codereview是一个很是必要的过程,避免代码腐化。

自动化测试

自动化测试能够大大提升和保证质量。

对于线上来讲,每隔几分钟就跑一下服务,以保证线上服务正常。

蓝绿部署

蓝绿部署和docker紧密结合。在云端空间足够的状况下,能够利用docker容器进行大规模部署。部署一个green并检查,而后生产流量指向进行canary测试,完成后再把流量导过来。

若是服务有bug,还能够趁blue没有销毁,把负载指向blue,尽可能避免部署失败。

Netflix-OSS红黑部署

经过 Eureka实现服务的下线和上线。

K8s-rolling update

整个部署自动化,经过参数控制,保证rolling update服务尽量是无损的。

我今天的分享就到这里,感谢聆听!

相关文章
相关标签/搜索