14 SpringCloud
1.优点
在分布式的前提下,让项目”独立”运行.一切的部署都是全自动的实现,
配置管理,服务发现,断路器,智能路由,微代理,控制总线.
2 .SOA思想
说明
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。是微服务中的一种编程方式.
Eureka注册中心
1.1.1 注册中心介绍
概括:负责服务调度.内部有心跳检测,可以实时监听服务状态.同时会记录服务IP:端口.服务名称等信息.方便消费者调用.
实现原理:
步骤:
- 启动注册中心
- 服务提供者启动将自己的信息写入注册中心.
- 注册中心内部维护了服务列表.记录了服务的数据.
- 当消费者启动时,首先会链接注册中心,获取服务列表数据.并且保存到本地.方便以后调用.
- 因为提供者可能有多个,所以访问数据时,客户端内部有负载均衡策略.默认轮询.挑选其中的一个服务发起httpCleint调用.之后正常获取数据.
- 当服务的提供者宕机了.注册中心内部有心跳检测(1分钟).当发现服务提供者宕机.则动态的维护服务列表数据.添加down属性.
- 当服务列表发生变化,consumer将再次同步数据.最终实现数据的一致性.
Zookeeper:强一致性.当服务宕机时,要求立即同步数据,这时如果有消费者请求时,将陷入阻塞状态.
Ribbon
1.1.2 Ribbin介绍
Ribbon是SpringCloud中负载客户端负载均衡的组件.
服务端负载均衡问题:
- 如果服务端负载均衡器宕机,则直接影响整合服务项.
- 服务端负载均衡是一种集中式的响应,性能低.
客户端负载均衡说明:
- 客户端负载均衡在用户发起请求之前已经分配的服务器地址.请求速度快.
- 如果客户端宕机,则只影响单个客户.
Feign
1.1.3 Feign介绍
Feign是一种声明式、模板化的HTTP客户端。简化客户端编码,可以使用户直接通过接口的方式声明式的调用,内部集成了ribbon.内部实现负载均衡
Hystrix
1.1.4 Hystrix作用
Hystrix是断路器.是一个用于处理分布式系统的延时和容错的开源库.在分布式系统里许多依赖可能会调用失败.hystrix能够保证当服务单元发生故障后,通过断路器机制.返回一个满足预期处理条件的数据.而不是长时间的等待或者抛出异常.这样就能避免服务长时间没有响应或者报错等影响,提升了软件的可靠性.
说明:断路器机制是对后台的保护,配置时在服务的提供端.
断路器接口形式
1.1.5 说明
一般的将断路器配置到服务端,可以返回有效的数据.但是如果服务端程序宕机了.这时断路器机制将不能生效.为了让用户也能快速获取预期数据.所以将断路器配置到接口中.
服务降级
1.1.6 说明
当服务器资源不足时.先关闭部分服务.将更多的资源部署主要的系统.这种部署方式称之为服务降级.当请求并发过后,再次开启之前关闭的服务.
因为有了熔断机制.使得该操作成为可能.
DashBoard仪表盘监控
实现服务监控
监控状态信息
Success 请求成功次数
Short-Circuited发生断路次数
Bad Request错误请求次数
Timeout超时请求次数
Rejected拒绝请求次数
Failure请求失败次数
Error失效异常数
Zuul介绍
1.1.7 说明
Zuul是服务端的路由器.可以过滤 拦截无效的请求.同时实现了负载均衡效果.实现了请求的转发和响应.
Zuul 是用户访问微服务统一的入口
主要作用是对请求进行路由和过滤2个作用.
路由功能:
将外部的请求转发到具体的微服务实例上.
过滤功能:
对请求进行校验/拦截
Zuul与eureka进行整合,同时能够获取全部的服务信息.后自动跳转.
1、Nginx与Zuul的区别
相同点:Zuul和Nginx都可以实现负载均衡、反向代理(隐藏真实ip地址),过滤请求,实现网关的效果
不同点:Nginx--c语言开发 Zuul--java语言开发
Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡
Nginx负载均衡实现:采用服务器实现负载均衡
Nginx相比zuul功能会更加强大,因为Nginx整合一些脚本语言(Nginx+lua)
Nginx适合于服务器端负载均衡
Zuul适合微服务中实现网关