3. Ribbon(负载均衡)
提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以在通过客户端中配置的ribbonServerList
服务端列表去轮询访问以达到服务均衡的作用。
当Ribbon和Eureka联合使用时,Ribbon的服务实例清单RibbonServerList
会被DiscoveryEnabledNIWSServerList
重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing
来取代IPing,它将职责委托给Eureka来去定服务端是否已经启动
在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端的清单来自于服务注册中心(比如Eureka)。在客户端负载均衡中也需要心跳去维护服务端清单的健康性,只是这个步骤需要与服务注册中心配合完成。
通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用只需要如下两步:
-
服务提供者只需要启动多个服务实例并且注册到一个注册中心或是多个相关联的服务注册中心
-
服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用
4. Hystrix(熔断保护器)
熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
提供线程池不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务器雪崩的问题。
在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定。为了解决这样的问题,产生了断路器等一系列的服务保护机制
在分布式架构中,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延
Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能
Hystrix使用舱壁模式实现线程池的隔离,它会为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响,而不会拖慢其他的依赖服务。
5. Feign(REST转换器)
基于动态代理机制,根据注解和选择的机器,拼接请求url地址,发起请求。Feign的关键机制是使用了动态代理
-
首先,对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
-
接着调用接口的时候,本质就是调用Feign创建的动态代理
-
Feign的动态代理会根据在接口上的@RequestMapping等注解,来动态构造要请求的服务的地址
-
针对这个地址,发起请求、解析响应
Feign是和Ribbon以及Eureka紧密协作的
-
首先Ribbon会从Eureka Client里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些机器上,在监听哪些端口
-
然后Ribbon就可以使用默认的Round Robin算法,从中选择一台机器
-
Feign就会针对这台机器,构造并发起请求
6. Config(分布式配置)
配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。
注册中心与API网关的分析
微服务网关更多是在前后端分离,或者说涉及到独立的类似手机APP等前端应用的时候使用的最多,即把内部各个微服务组件模块的API接口能力统一注册和接入到网关,对于APP也只需要访问网关暴露的接口即可,同时通过网关还可以进一步的实现安全隔离。
也就是说在这种场景下,网关更多的是实现了接口服务的代理和路由转发能力,更多的是向外的一种能力发布。
-
一个独立的开发团队,为保证独立自治,以及内部多个微服务模块间的交互集成,最好启用独立的服务注册中心实现服务注册,发现能力。即开发团队内部多个微服务模块间的集成,不需要通过网关,只需要通过服务注册中心进行集成即可。
-
开发团队需要暴露能力给外部,包括暴露能力给其它的开发团队,需要考虑将该API接口注册到外部的网关上。在这里建议是拆分两个独立网关,一个是内部API网关,一个是放置到DMZ区面对公网访问的API网关。对于服务如果同时涉及到内部和外部使用,则两边注册。建议不要通过两次网关去路由,一个是影响性能,一个是不方便后续问题排查。
-
构建在开发团队之外的API网关必须具备负载均衡能力,可以配置多个IP地址。通过该API网关也最好具备和Docker容器扩展后的服务自动注册和地址加入扩展能力。
Eureka 的竞品分析:Nacos、ZooKeeper、Etcd
服务发现是一个古老的话题,当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有一个独立的IP地址,那么服务发现基本上都是通过某种方式获取到服务所部署的IP地址。
DNS协议是最早将一个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本可以满足所有的RESTful服务的发现,此时服务的IP列表通常配置在Nginx或者LVS。后来出现了RPC服务,服务的上下线更加频繁,人们开始寻求一种能够支持动态上下线并且推送IP列表变化的注册中心产品。
0. Eureka
-
Spring Cloud Eureka所选择的是AP,采用的是去中心化结构,放弃了强一致性。也就是说Eureka集群中的各个结点都是平等的,没有主从的概念。通过互相注册的方式来进行消息同步和保证高可用。并且一个Eureka Server结点挂掉了,还有其他同等的结点来提供服务,并不会引发服务的中断
-
Eureka只能当注册中心,想搞配置中心的话,还得搭配Spring Cloud Config+Spring Cloud Bus。其中后者支持Rabbiimq和Kafka两种模式。
-
使用Java语言来开发的,并且也是Spring Cloud的子项目,所以可以直接通过引入jar包的方式来集成Eureka,这点非常方便
1. ZooKeeper
这是一款经典的服务注册中心产品(虽然它最初的定位并不在于此),在很长一段时间里,它是国人在提起RPC服务注册中心时心里想到的唯一选择,这很大程度上与Dubbo在中国的普及程度有关。
-
Apache Zookeeper所选择的是CP,也就是放弃了高可用性。Zookeeper集群在进行消息同步的时候,必须有一半以上结点完成了同步才会返回;而当Master结点挂了或者集群中有过半的结点不能工作了,此时就会触发故障恢复,重新进行Master选举。在这个过程中,整个Zookeeper集群无法对外提供服务,从而实去了A(可用性)
-
为了达到C,Zookeeper采用的是自己的ZAB协议。
2. Nacos
Nacos是阿里巴巴旗下的开源项目,在2018年开源,携带着阿里巴巴大规模服务生产经验,试图在服务注册和配置管理这个市场上,提供给用户一个新的选择。
-
Nacos一大特性是即支持CP,也支持AP。可以根据需要灵活选择。
-
Nacos除了注册中心之外,也能充当配置中心的作用。且配置中心可以按照namespace,group等维度来进行数据隔离,来达到不同环境之间配置隔离的功能。
值得一提的是,Nacos作为配置中心的持久化机制可以依赖于
Mysql
来完成(默认依赖于内置数据库)。只需要将Nacos目录下的sql脚本放到mysql中执行(会生成11个表),然后在nacos配置文件里面配一下mysql的账号密码即可。这样使用mysql作为数据源的方式相比于nacos内置数据库来说更容易管理
3. Consul
Consul是HashiCorp公司推出的一个开源工具。
-
Consul是用Go语言编写的,所以无法像Eureka那样直接引入jar包就能集成,它还需要去服务器中进行额外的安装。
-
除了注册中心的功能之外,Consul还能起到配置中心的作用。
Consul它保证的是CP,使用raft协议,要求必须有过半的结点都写入成功才算是注册成功了,并且它也有Master和Follower的概念,在Master挂掉后,也需要自己内部进行
4. Etcd(待续)
对比SpringCloud,Kubernetes也提供完整的分布式微服务管理框架,几乎所有组件都有对应的产品,其中Etcd也可以提供类似Eureka的注册中心。
在 Go 生态中,还可以选择基于 Etcd 作为注册中心,Etcd 是由 CoreOS 团队维护的、高可用分布式键值存储数据库,可用于为集群提供配置和服务发现功能,Google 开源的容器管理工具 Kuberbetes 就是基于 Etcd 的。
和 Consul 一样,Etcd 也是基于 Raft 协议作为分布式一致性算法来解决领导者选举和日志复制问题,同样也是基于 Go 语言编写。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。
因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!
由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频
如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
存中…(img-lvRMZS0T-1712582618911)]
[外链图片转存中…(img-7IBlFTDL-1712582618911)]
既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!
由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频
如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
[外链图片转存中…(img-OpkU8HiV-1712582618912)]