公司想切换到spring cloud上所以我找了本书看看 大致上知道了spring cloud的各部分组件 也算是用的比较熟练了
但是好记性不如烂笔头 所以写一波笔记 防止遗忘
####目录
- 综述
- 注册中心(eureka、consul、zk)
- 微服务服务端、客户端(feign)
- 容错、负载均衡(ribbon、hystrix)
- 配置中心(config)
- 网关(zuul)
- 消息总线(bus、stream)
- 定时任务调度(qz)
- 分布式调用链日志(sleuth:基于zipkin的)
- 搭建个人基于spring cloud 的脚手架遇到的问题
####综述
spring cloud 提供一整套分布式微服务的解决方案
联系到云原生(cloud native)这个概念
我个人觉得 他是把微服务的架构+容器+自动化运维整合到一起提出的概念
在基于docker+k8s这样的或者类似的平台下 快速开发、切入到已有的分布式环境中的应用
####注册中心
在微服务架构中 较为核心的应该就是注册中心了 服务的治理、使用都需要注册中心的协助
spring cloud支持比较好的注册中心 大致有三种 eureka、consul、zookeeper
这三个 各有各的好 不过现在来说 consul可能功能更加齐全 更加好用一点 这个在后续的详细的笔记详说
####微服务的服务端、客户端
######服务端:
这个就是很普通的http接口 莓什么好说的 现在http大部分还是使用1.0。或者1.1 性能说实话一般 不过差不多够用 如果有特殊需求 完全可以选择其他协议
例如我北京的有个大佬朋友 他们也是spring cloud +docker +k8s技术栈 他们就要把http协议切换到tcp协议 照样刚
但是后续http2.0出来后 我觉得性能差别应该不会太大了 毕竟 http2.0也是基于二进制 还有其它的功能 我比较看好 http2.0
######客户端:
简陋点直接用restTemplate也是可以访问调用的 但是不好管理 而且麻烦 建议使用feign去申明接口即可调用
但是这个也有点坑
举个例子 在spring mvc 4.3 之后 是提供GetMapping这样的封装RequestMapping的接口 但是feign不支持的 还有其他的坑 到详细的笔记细说
####容错、负载均衡
######容错:
spring cloud 是基于hystrix来做容错的 容错其实就是 发现错误 马上关闭停止对错误的节点的访问、有相应的降级措施情况下 进行服务降级 保证服务的可用
当然也提供请求缓存、请求合并 turbine也可以基于hystrix、dashboard来进行集群的状态监控
######负载均衡:
spring cloud 是基于ribbon来做客户端负载均衡的 首先 会去注册中心找到注册列表 通过轮寻方式 去负载均衡 当然可以重写负载均衡器(LoadBalancerClient) 也是可以使用其他更加优越的算法的 毕竟spring cloud 只是提供基础实现
####配置中心
国内的话 各个大公司基本都有各自的配置中心的实现 我们公司用的是baidu的disconf 用起来也就那回事吧 不如spring cloud config
config 是使用 git 或者svn 来做配置仓库 这天生站在巨人肩膀上
config 可以实现集中管理各个集群的配置 而且安全性较高 访问安全、数据的加密解密(对称加密需要替换jre、还支持rsa这种非对称加密)
还可以通过配合bus组件 进行动态修改集群配置 这一点是很重要的 因为很多参数根据实际情况进行微调是非常需要的
####网关
就是统一对访问进行管理的地方 例如鉴权、限制等等
网关 说实话 如果实力强劲 就不会选择这个来用zuul
nginx+lua功能不比这个东西强?
####消息总线
说的这么高端其实就是一个mq的使用 bus主要是消息传递 stream主要是发布订阅事件没什么特别的
spring cloud bus 或者stream 天然支持 rabbit或者kafka 都差不多吧 看具体情况选择 个人比较倾向rabbit
####定时任务调度
定时任务 是每个系统必须的一个模块
一般也就三种方式
1:基于jdk的timer timerTask方式 这种方式简单粗暴 但是需要自己实现一些复杂的功能
2:基于spring 的 scheduled task 这个也是不太适合企业级使用
3:qz(quartz)功能多 支持集群环境下调度 但是需要数据库支持 不用说 肯定qz的 不然要写死
####分布式调用链日志
sleuth 是基于zipkin的一套分布式调用链跟踪组件
说起这个 公司的zipkin还是我们组负责的 老大带我们去引入zipkin 搞死人了
调用链呢 是跟踪每个请求从发起 到调用各个服务 一直到db操作一整链
记录这些日志 方便优化、跟踪错误
这个到详细笔记细说 这个和业务日志、操作日志是不同的
####遇到的问题
这个说实话还是遇到很多问题的 因为我基于公司已有的架构 使用spirng cloud 从新整合 还是有点坑的 详细笔记再说
####总结:spring cloud 基本上就这些组件 spring cloud + docker + k8s 这一套可以说是现在做微服务 云原生的标准套路了