摘要

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

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

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

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

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

十二要素

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

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

基于Spring Cloud及K8S构建微服务应用相关推荐

  1. 手把手教你用Spring Cloud和Docker构建微服务

    什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接 ...

  2. iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构

    原文:https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do作者:Alexander Lukyanc ...

  3. Spring Cloud Sleuth+Zipkin 构建微服务链路跟踪系统

    什么是链路跟踪系统? 在微服务中,多个服务分布在不同物理机器上,各个服务之间相互调用.如何清晰地记录服务调用过程,并在出现问题的时候能够通过查看日志和服务之间的调用关系来定位问题,这样的系统就叫做链路 ...

  4. 基于spring cloud的阿峰微服务0到0.5历程

    ===================Happy Start!!!=================== 市面上很流行微服务架构这东西,所以我对这块也比较感兴趣.去年到今年一直就在做这块的东西.现在闲 ...

  5. 用IDEA创建基于Spring Cloud的Feign的微服务:服务接口、服务提供者、服务使用者分离

    IDEA社区版本2019.3 , 用来创建接口包时需要做些额外操作.这里使用Eureka作为服务注册中心,整个系统结构如下: 业务层与逻辑服务层 业务层 VA-DICTATION-RT-BUS 引入接 ...

  6. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  7. 【Spring Cloud】03_SpringCloud Alibaba 微服务解决方案

    微服务简介 背景分析 讲微服务之前,我们先分析以下单体应用.所谓单体应用一般是基于idea/eclipse,maven等建一个工程,然后基于SpringBoot,spring,mybatis框架进行整 ...

  8. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  9. 用Spring Cloud和Docker搭建微服务平台

    This blog series will introduce you to some of the foundational concepts of building a microservice- ...

最新文章

  1. 对于数据库连接池的一些思考和MyBatis的集成与使用
  2. java实践源码--哈弗曼树
  3. jquery 手型 鼠标穿过时_JS实现的鼠标跟随代码(卡通手型点击效果)
  4. Result Maps collection already contains value for ***的问题
  5. sklearn.decomposition.FastICA实现FastICA算法
  6. pip install flask-mongoengine报错
  7. p40_数据交换方式
  8. [debug] “ImportError DLL load failed 找不到指定的程序”的解析和解决办法。
  9. 1 0 .2 用于监视的工具和技术
  10. Git - 命令行 - 使用 Tag 标记你的代码
  11. python tfidf特征变换_2 python 文本特征提取 CountVectorizer, TfidfVectorizer
  12. 从零开始学Qt(一)前言
  13. 群晖linux怎么进入u盘,超级简单,群晖系统的U盘制作和安装指导,实现家庭云...
  14. 状态转移矩阵 matlab,状态转移矩阵计算.PPT
  15. idea快速创建包快捷键大全_idea快捷键大全
  16. 怎样用计算机画太极,用CorelDRAW X4快速绘制太极八卦图形
  17. Liunx 安装redis
  18. 迪信通机器人_迪信通要做机器人:玩票还是另有深意?
  19. LeetCode838. 推多米诺
  20. Codeforces Round #548 (Div. 2) C. Edgy Trees(并查集+快速幂)

热门文章

  1. 生成证书密钥RequestsDependencyWarning:Old version of cryptography ([1, 2, 3]) may cause slowdown.
  2. CentOS64位下python2.6升级到2.7的详细教程
  3. Qt:Windows编程—代码注入
  4. python - 基础算法题1- 使用while循环输入1 2 3 4 5 6 8 9 10
  5. SQL SERVER数据库的简单介绍
  6. Luogu P1122 最大子树和 树形DP
  7. Linux Kernel File IO Syscall Kernel-Source-Code Analysis(undone)
  8. 【读书笔记】设计模式沉思录
  9. JavaEE实战班第18天
  10. JavaEE实战班第三天