1. 什么是服务端负载均衡,什么是客户端负载均衡
服务端负载均衡:nginx
用户访问时,不知道 实际访问的真实路径(由nginx反向代理 分流器实现)
客户端负载均衡:ribbon
内部互相调用应用时,知道真实路径(去注册中心拉到清单,然后策略分配)
负载均衡面试点:
Ribbon :负载均衡分为两种类型:客户端负载均衡和服务端负载均衡
客户端负载均衡: 调用方知道被调方的地址 我们使用的Ribbon属于客户端负载均衡,拦截器在拦截到请求之后,会去服务中心去拉取被调方的地址
服务端负载均衡:调用方不知道被调方的服务地址,举例:Nginx属于服务端负载均衡,反向代理
nacos实例面试点
实例的临时性和非临时性:
临时性的需要实时上报自己的状态,如果不上报,注册中心就直接干掉
非临时性的是nacos主动去拉取服务看是否存活,即使没有存活,nacos也会保存不会删掉,如果设置为临时的一定要保证服务的高可用,不然用户访问会报错
1.Nacos配置管理
集中管理微服务的配置,实现热更新
从微服务拉取配置(java程序中)
是从nacos拉取配置,并且与本地配置进行合并(nacos配置优先级更高)
spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取
一般如果不使用配置中心 ,配置文件是application.yml 但是如果使用了配置中心,必须加入bootstrap.yml配置文件 此时会有两个配置文件,为了简约,可将application中的内容放在bootstrap 在删除application文件
所以只保留bootstrap文件
并引入nacos-config依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置热更新
(不需要微服务宕机,直接在配置中心修改配置就叫热更新)
多环境支持
配置共享:在配置中心 配置一个公共配置
持久化配置
nacos对于服务的配置信息保存到了自己内部的数据库:derby,一般在开发环境下需要让nacos读取外部数据库配置信息,方便后期的维护
Feign替代RestTemplate
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Feign使用优化
场景: 连接数是一定的,当前微服务一次最大可处理200个连接数,此时如果调用a服务给了200个连接数,那么b服务则无链接发过去,优化目的 ,雨露均沾,a,b各得100个链接去处理
方案:提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。
这里我们用Apache的HttpClient来进行优化
1)引入依赖
在order-service的pom文件中引入Apache的HttpClient依赖:
<!--httpClient的依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
2)配置连接池
在order-service的application.yml中添加配置:
feign:
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 100 # 每个路径的最大连接数
Gateway服务网关
为什么需要网关
Gateway网关是我们服务的守门神,所有微服务的统一入口。
网关的核心功能特性:
1.请求路由和负载均衡:请求经过网关,网关不处理,根据一定的规则,请求转发给某个微服务,当路由的目标微服务有多个时,还需要负载均衡
2.权限控制 :校验用户是是否有请求资格,如果没有则进行拦截。
3.限流