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

摘要

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

视频内容

基于Spring Cloud构建微服务

Netflix OSS- Eureka

Eureka服务启动注册的等待时间比较久,注销服务也需要等待,这是最终一致性。导致服务已经下线了,但是服务中心里还有,这时如果接到请求就会出现报错的情况。

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上。

十二要素

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

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

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

后端服务:把后端服务当作附加资源。

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

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

端口绑定:通过端口绑定提供服务。

并发:通过进程模型进行扩展。

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

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

日志:把日志当作事件流。

管理进程:后台管理任务当作一次性进程运行。

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服务尽可能是无损的。

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

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2017-09-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

【亲测】前端如何写满你的硬盘?

今天偶然在网上看到一篇文章,说是前端如何机智的搞坏电脑。大意就是通过node搞一个服务,然后以get请求的方式通过localStorage,大量的向用户浏览器缓...

15440
来自专栏张善友的专栏

Windows 7社区发布活动 -- Windows 7兼容性概述

今天在深圳的Windows 7社区发布活动讲了Session 2 -- Windows 7兼容性概述。今天参会的人员达到60多个,大家也非常积极的讨论。我的Se...

18160
来自专栏FreeBuf

点击一张图片背后的风险

* 本文原创作者:mscb,本文属FreeBuf原创奖励计划,未经许可禁止转载 你相信吗?仅仅是因为你点击了某个你一只在访问网站里的一张图片,导致你的用...

26270
来自专栏Guangdong Qi

根据友盟统计错误分析查找线上BUG(工具篇)

今天线上的版本出现了BUG,在启动APP的时候出现闪退情况,但是这种BUG在正常测试的时候没有测试到,怎么解决呢

94410
来自专栏菩提树下的杨过

biztalk 2010 dev版安装小记

曾经以为TFS是微软产品中比较难安装的产品了,当我接触biztalk之后,我承认:我错了! 安装准备: 一、网络环境 要能联网,且速度不能太慢(安装过程中会根据...

21290
来自专栏Small Code

XGBoost 在 Windows 10 和 Ubuntu 上的安装

关于什么是 XGBoost,我在这里不再解释,如果有时间的话再写一篇文章来解释,在数据科学里非常有用。大家可以参考 Tianqi Chen 的论文 XGBoos...

45370
来自专栏杨建荣的学习笔记

Datapump数据迁移前的准备工作(二)(r9笔记第59天)

之前写了一篇文章分析了Datapump迁移数据的一些准备总结,反响还不错。Datapump数据迁移前的准备工作,最近碰到一个场景,根据评估还是使用Datapum...

28940
来自专栏企鹅号快讯

专为渗透测试人员设计的 Python 工具大合集

如果你对漏洞挖掘、逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言。Python不仅语法简单上手容易,而且它还有大量功能强大的库和...

25880
来自专栏cloudskyme

批处理框架

什么是批处理? 在现代企业应用当中,面对复杂的业务以及海量的数据,除了通过庞杂的人机交互界面进行各种处理外,还有一类工作,不需要人工干预,只需要定期读入大批量数...

38070
来自专栏FreeBuf

老式后门之美:五种复古远程控制工具

目前,高级的rootkit技术可以帮助你在渗透中拿到一个shell后进行持久性控制。此外,还有供应商故意提供了一些植入后门,但那就是截然不同的故事了。尽管各式花...

26790

扫码关注云+社区

领取腾讯云代金券