注册中心:zookeeper、eureka、nacos
服务调用/负载均衡:ribbon、nginx、feign、openFeign
服务熔断/降级:Hystrix(Netflix)、Sentinel(阿里中间件团队)
网关:zuul、gateway
配置中心:spring cloud config+spring cloud bus
怎么使用
基本所有的组件使用方法都是基于注解,开启+使用的模式,在使用组件的地方加上对应注解,如@FeignClient 注解,然后在启动类上加EnAble***注解,如EnAbleFeignClient 注解
注册中心
以eureka为例,eureka分为服务端和客户端,客户端每30秒向eureka服务器发送心跳连接,以此来表明本服务还存活,若服务端连续三个心跳周期(90秒)没有收到某客户端发来的心跳链接,则会将其从服务列表剔除;客户端和服务端通过json/xml进行通讯,服务端会每30秒去服务端更新一次服务列表;底层使用restTemplate;
eureka使用:
添加依赖->增加yml配置->主启动类增加eureka注解(eureka服务器EnableEurekaServer,eureka服务EnableEurekaClient)
eureka集群:
负载均衡/服务调用
以ribbon为例,ribbon为负载均衡组件,跟nginx不同,nginx运行在服务端,将所有请求集中起来进行负载均衡;ribbon运行在消费端,算法和nginx相似但更强大,除了有nginx的轮询、加权轮询(10轮若还没结果就返回null),还支持随机策略、重试策略,默认轮询;ribbon只能做负载均衡,不能服务调用(依然得用restTemplate,先new restTemplate对象,调用postForObject方法传入请求url、入参、返回结果类型.class,postForObject只需要传入请求url+入参,和返回结果),显然ribbon太麻烦,所以有了feign和openFeign(在feign基础上增加对springMVC注解的支持),用@FeignClient 注解服务提供者的名称,在controller层即可像调用service一样调用服务;
ribbon:把注册中心的服务列表缓存到本地,discoveryClient.getInstances(“CLOUD-PAYMENT-SERVICE”);
ribbon不需要额外添加依赖也可以使用,因为eureka和ribbon有一腿,eureka客户端依赖自带了ribbon的引用,ribbon的负载均衡算法有好几种,最常用的是轮询,具体算法实现就是
当前请求次数%服务端对应服务列表数量
@Component
public class MyLB implements LoadBalancer {
private AtomicInteger atomicInteger = new AtomicInteger(0);
//坐标
private final int getAndIncrement(){
int current;
int next;
do {
current = this.atomicInteger.get();
next = current >= 2147483647 ? 0 : current + 1;
}while (!this.atomicInteger.compareAndSet(current,next)); //第一个参数是期望值,第二个参数是修改值是
System.out.println("*******第几次访问,次数next: "+next);
return next;
}
@Override
public ServiceInstance instances(List serviceInstances) { //得到机器的列表
int index = getAndIncrement() % serviceInstances.size(); //得到服务器的下标位置
return serviceInstances.get(index);
}
}
openFeign有个超时访问时间,需要在yml文件里面配置,默认为一秒,如果消费者端一秒内没得到服务提供者的响应,直接返回大白页(服务超时)
最后
既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?
就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。
如果觉得图片不够清晰,也可来找小编分享原件的xmind文档!
且除此份微服务体系大纲外,我也有整理与其每个专题核心知识点对应的最强学习笔记:
-
出神入化——SpringCloudAlibaba.pdf
-
SpringCloud微服务架构笔记(一).pdf
-
SpringCloud微服务架构笔记(二).pdf
-
SpringCloud微服务架构笔记(三).pdf
-
SpringCloud微服务架构笔记(四).pdf
-
Dubbo框架RPC实现原理.pdf
-
Dubbo最新全面深度解读.pdf
-
Spring Boot学习教程.pdf
-
SpringBoo核心宝典.pdf
-
第一本Docker书-完整版.pdf
-
使用SpringCloud和Docker实战微服务.pdf
-
K8S(kubernetes)学习指南.pdf
另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!
转存中…(img-22nA776O-1721154492890)]
另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!
[外链图片转存中…(img-uUHOPJsW-1721154492891)]