《Ribbon负载均衡策略+Feign+GZIP压缩》 |
您所在的位置:网站首页 › 算法策略有哪些 › 《Ribbon负载均衡策略+Feign+GZIP压缩》 |
什么是Ribbon及作用什么是Ribbon? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。 Ribbon解决了什么问题?解决并提供了微服务的 负载均衡的问题。 集中式负载均衡与进程式的负载均衡区别负载均衡方案有哪些分类?目前业界主流的负载均衡方案可分成两类: 第一类:集中式负载均衡 第二类:进程内负载均衡 什么是集中式负载均衡?在 consumer 和 provider 之间使用独立的负载均衡设施(可以是硬件,如 F5, 也可以是软件,如 nginx), 由该设施负责把 访问请求 通过某种策略转发至 provider; 什么是进程内负载均衡?将负载均衡逻辑集成到 consumer,consumer 从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的 provider。 Ribbon 就属于进程内负载均衡,它只是一个类库,集成于 consumer 进程,consumer 通过它来获取到 provider 的地址。 二者之间有什么区别?Ribbon的入门案例Ribbon中默认的负载均衡策略是什么策略?默认为:轮询策略 LoadBalancerClient对象得作用是什么?ribbon 负载均衡器 Ribbon常见负载均衡策略Ribbon的负载均衡策略有哪些?每一种负载均衡的特点是什么? 如何更换其他负载均衡策略阐述更换其他负载均衡策略的步骤。方式一:在启动器内使用@Bean注解进行配置: 方式二:在application.properties配置文件中配置: Ribbon的点对点直连什么情况下需要配置Ribbon的点对点直连?一般在项目的开发过程中,会有多个开发人员同时启动项目,比如有张三,李四,王五,同时提供了这个服务,那么根据ribbon的负载均衡算法,比如轮询,本来消费方是要和张三联调,结果请求第二次发给了李四,第三次发给了王五,这样就会影响李四王五的工作,而且也不利于消费方和张三的联调。所以这时就需要点对点直连,让消费方只和张三联调,不影响其他人 配置Ribbon点对点直连的步骤是什么?1.去掉 Eureka 的坐标添加 Ribbon 坐标 org.springframework.cloud spring-cloud-starter-ribbon 2. 修改配置文件去掉与 Eureka 配置,添加新配置项 #禁用 eureka ribbon.eureka.enabled=false #指定具体的服务实例清单 eureka-provider.ribbon.listOfServers=192.168.70.137:9090 3.启动类中删除@EnableEurrkaClient注解 什么是Feign及作用什么是Feign?Feign 是一种声明式、模板化的 HTTP 客户端(仅在 consumer 中使用)。 什么是声明式服务调用?声明式调用就像调用本地方法一样调用远程方法;无感知远程 http 请求。 声明式服务调用有什么作用?1,Spring Cloud 的声明式调用, 可以做到使用 HTTP 请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。 2,它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规的Http Client 构造请求再解析返回数据。 3,它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发 声明式服务调用解决了什么?它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。 Feign入门案例-创建product-service创建服务的API项目。修改POM文件添加相关依赖坐标。4.0.0 com.bjsxt springcloud-ego-product-service 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-parent 1.5.13.RELEASE
UTF-8 UTF-8 1.8 org.springframework.cloud spring-cloud-dependencies Dalston.SR5 pom import org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-starter-config org.springframework.cloud spring-cloud-starter-eureka 编写查询所有商品的接口。/** * Product 服务接口 * @author Administrator * */ @RequestMapping("/product") public interface ProductService { //查询所有商品 @RequestMapping(value="/findAll",method=RequestMethod.GE T) public List findAll(); } Feign入门案例-创建product-provider创建实现服务API的Provider。修改POM文件添加相关依赖坐标。4.0.0 com.bjsxt springcloud-ego-product-provider 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-parent 1.5.13.RELEASE
UTF-8 UTF-8 1.8 org.springframework.cloud spring-cloud-dependencies Dalston.SR5 pom import org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-starter-config org.springframework.cloud spring-cloud-starter-eureka com.bjsxt springcloud-ego-product-service 0.0.1-SNAPSHOT org.springframework.boot spring-boot-maven-plugin 配置文件:spring.application.name=ego-product-provider server.port=9001 #设置服务注册中心地址,指向另一个注册中心 eureka.client.serviceUrl.defaultZone=http://user:123456@eur eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/ 创建Controller实现服务API的接口,并实现接口中的抽象方法。/** * Product-Provider 服务 * @author Administrator * */ @RestController public class ProductController implements ProductService { @Override public List findAll() { List list = new ArrayList(); list.add(new Product(1, "电视")); list.add(new Product(2, "电脑")); list.add(new Product(3, "冰箱")); list.add(new Product(4, "手电筒")); return list; } } Feign入门案例-创建product-consumer@RestController注解的作用是什么?@RestController是@ResponseBody和@Controller的组合注解 @FeignClient注解的作用是什么?FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 @EnableFeignClients注解的作用是什么?注解@EnableFeignClients告诉框架扫描所有使用注解@FeignClient定义的feign客户端。它又通过注解@Import导入了类FeignClientsRegistrar( feign客户端注册器), @EnableDiscoveryClient注解的作用是什么?@EnableEurekaClient上有@EnableDiscoveryClient注解,可以说基本就是EnableEurekaClient有@EnableDiscoveryClient的功能,另外上面的注释中提到,其实@EnableEurekaClient注解就是一种方便使用eureka的注解而已,可以说使用其他的注册中心后,都可以使用@EnableDiscoveryClient注解,但是使用@EnableEurekaClient的情景,就是在服务采用eureka作为注册中心的时候,使用场景较为单一。 Feign传递单个参数阐述Feign传递单个参数的原理。/** * Product 服务接口 * @author Administrator * */ @RequestMapping("/product") public interface ProductService { //查询所有商品 @RequestMapping(value="/findAll",method=RequestMethod.GE T) public List findAll(); //根据商品 ID 查询商品 @RequestMapping(value="/getProductById",method=RequestMe thod.GET) public Product getProductById(@RequestParam("id") Integer id); } Feign传递多个参数-方式一使用GET使用Feign基于GET请求传递多个参数的原理是什么?/** * Product 服务接口 * @author Administrator * */ @RequestMapping("/product") public interface ProductService { //查询所有商品 @RequestMapping(value="/findAll",method=RequestMethod.GE T) public List findAll(); //根据商品 ID 查询商品 @RequestMapping(value="/getProductById",method=RequestMe thod.GET) public Product getProductById(@RequestParam("id") Integer id); //添加商品传递多个参数 方式一 :GET 方式 @RequestMapping(value="/add",method=RequestMethod.GET) public Product addProduct(@RequestParam("id") Integer id,@RequestParam("name") String name); } Feign传递多个参数-方式二使用POST使用Feign基于POST请求传递多个参数的原理是什么?/** * Product 服务接口 * @author Administrator * */ @RequestMapping("/product") public interface ProductService { //查询所有商品 @RequestMapping(value="/findAll",method=RequestMethod.GE T) public List findAll(); //根据商品 ID 查询商品 @RequestMapping(value="/getProductById",method=RequestMe thod.GET) public Product getProductById(@RequestParam("id") Integer id); //添加商品传递多个参数 方式一 :GET 方式 @RequestMapping(value="/add",method=RequestMethod.GET) public Product addProduct(@RequestParam("id") Integer id,@RequestParam("name") String name); //添加商品传递多个参数 方式二 :POST 方式 @RequestMapping(value="/add",method=RequestMethod.POST) public Product addProduct2(@RequestBody Product product); } Gzip介绍及Http协议中的传输规则什么是Gzip?gzip 介绍:gzip 是一种数据格式,采用用 deflate 算法压缩 data;gzip 是一种流行的文件压缩算法,应用十分广泛,尤其是在 Linux 平台。 gzip 能力:当 Gzip 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少 70%以上的文件大小。 gzip 作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是 Gzip 与搜索引擎的抓取工具有着更好的关系。例如 Google就可以通过直接读取 gzip 文件来比普通手工抓取 更快地检索网页。 HTTP协议中关于压缩传输的规定是什么?第一:客户端向服务器请求中带有:Accept-Encoding:gzip, deflate 字段,向服务器表示,客户端支持的压缩格式(gzip 或者 deflate),如果不发送该消息头,服务器是不会压缩的。 第二:服务端在收到请求之后,如果发现请求头中含有 Accept-Encoding 字段,并且支持该类型的压缩,就对响应报文压缩之后返回给客户端,并且携带 Content-Encoding:gzip 消 息头,表示响应报文是根据该格式压缩过的。 第三:客户端接收到请求之后,先判断是否有 Content-Encoding 消息头,如果有,按该格式解压报文。否则按正常报文处理。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |