Ribbon与Nginx的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ribbon与Nginx的区别相关的知识,希望对你有一定的参考价值。

参考技术A

我们知道负载均衡有硬件负载均衡与软件的负载均衡方案

硬件负载均衡:比如 F5、深信服、Array 等; 软件负载均衡:比如 nginx、LVS、HAProxy 等; 硬件负载均衡或是软件负载均衡,他们都会维护一个可用的服务端清单,通过心跳检测来剔除故障的服务端节点以保证清单中都是可以正常访问的服务端节点。当客户端发送请求到负载均衡设备的时候,该设备按某种算法(比如轮询、权重、 最小连接数等)从维护的可用服务端清单中取出一台服务端的地址,然后进行转发。

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,是一个基于HTTP和TCP的客户端负载均衡工具。

Ribbon与Nginx的区别

Nginx是基于服务端的负载均衡,客户端所有请求统一交给 nginx,由 nginx 进行实现负载均衡请求转发,Nginx保持服务清单的同时,也负责负载均衡算法

Ribbon是从 eureka 注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略,Ribbon不负责出来服务清单,

Ribbon提供七种负载均衡策略

由于Spring Cloud Ribbon的封装, 我们在微服务架构中使用客户端负载均衡调用非常简单, 只需要如下两步:

在SpringCloud中 Feign中集成了Ribbon,会自动使用负载均衡。

fallback是自定义异常熔断类,声明后的接口出现异常时,会自动执行服务降级

SpringCloudEureka与Ribbon

一:主要内容

什么是注册中心,常见的注册中心有哪些,为什么需要注册中心,什么是Eureka注册中心,Eureka的快递Demo,Eureka的架构原理,Ribbon是什么,有哪些负债均衡策略,区别是什么,Ribbon的负载均衡策略设置。

一:Eureka注册中心学习目标

      Eureka服务注册中心,服务注册中心是服务实现化管理的核心组件,类似目录服务的作用,主要用来存储服务信心,譬如提供者url串,路由信息等,服务注册中心是被微服务架构中最基础的设施之一。

     在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中,Dubbo是一个在国内比较流行的分布式架构,被大量的中小型互联网公司多采用,它提供了比较完善的服务治理功能,而服务治理的实现主要依靠的就是注册中心。

目标:什么是注册中心,常见的注册中心有哪些,为什么需要注册中心,注册中心解决了什么问题,什么是Eureka注册中心,Eureka注册中心三种角色,Eureka安全认证,Eureka优雅停服,Eureka自我保护,CAP原则,Eureka架构原理,高可用Eureka注册中心。

1.什么是注册中心

          注册中心可以说是微服务架构中的通讯录,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。

举个现实生活中的例子,比如说,我们手机中的通讯录的两个使用场景:
当我想给张三打电话时,那我需要在通讯录中按照名字找到张三,然后就可以找到他的手机号拨打电话。——
服务发现
李四办了手机号并把手机号告诉了我,我把李四的号码存进通讯录,后续,我就可以从通讯录找到他。—— 服
务注册
通讯录 —— ?什么角色(服务注册中心)
          总结:服务注册中心的作用就是服务的注册和服务的发现
2.常见的注册中心
        Netflix Eureka  ,Alibaba Nacos ,HashiCorp Consul ,Apach ZooKeeper , CoreOS etcd ,CNCF CoreDns

 

 3.为什么需要注册中心

        了解了什么是注册中心,那么我们继续谈谈,为什么需要注册中心。在分布式系统中,我们不仅仅是需要在注册

中心找到服务和服务地址的映射关系这么简单,我们还需要考虑更多更复杂的问题:
服务注册后,如何被及时发现
服务宕机后,如何及时下线
服务如何有效的水平扩展
服务发现时,如何进行路由
服务异常时,如何进行降级
注册中心如何实现自身的高可用
这些问题的解决都依赖于注册中心。简单看,注册中心的功能有点类似于 DNS 服务器或者负载均衡器,而实际
上,注册中心作为微服务的基础组件,可能要更加复杂,也需要更多的灵活性和时效性。所以我们还需要学习更多
Spring Cloud 微服务组件协同完成应用开发。
       注册中心解决了什么问题
服务管理
服务的依赖关系管理
4.Eureka服务注册中心
        Eureka 是 Netflflix 开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud 将它集成在其子项目
Spring Cloud Netflflix 中,实现 Spring Cloud 的服务注册与发现,同时还提供了负载均衡、故障转移等能力。
5.Eureka注册中心的三种角色
Eureka Server
通过 Register、Get、Renew 等接口提供服务的注册和发现。
Application Service(Service Provider)
服务提供方,把自身的服务实例注册到 Eureka Server 中。
Application Client(Service Consumer)
服务调用方,通过 Eureka Server 获取服务列表,消费服务。

 

6.Eureka入门案列

①:创建父工程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 项目坐标地址 -->
    <groupId>com.example</groupId>
    <!-- 项目模块名称 -->
    <artifactId>eureka-demo</artifactId>
    <!-- 项目版本名称 快照版本SNAPSHOT、正式版本RELEASE -->
    <version>1.0-SNAPSHOT</version>
    <!-- 继承 spring-boot-starter-parent 依赖 -->
    <!-- 使用继承方式,实现复用,符合继承的都可以被使用 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
    </parent>
    <!--
        集中定义依赖组件版本号,但不引入,
        在子工程中用到声明的依赖时,可以不加依赖的版本号,
        这样可以统一管理工程中用到的依赖版本
     -->
    <properties>
        <!-- Spring Cloud Hoxton.SR1 依赖 -->
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>
    <!-- 项目依赖管理 父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息) -->
    <dependencyManagement>
        <dependencies>
            <!-- spring cloud 依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

 ②:创建子项目

 名字叫eurkea-server

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.xxxx</groupId>
  <artifactId>eureka-server</artifactId>
  <version>1.0-SNAPSHOT</version>


  <parent>
    <groupId>com.xxxx</groupId>
    <artifactId>eureka-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
     <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
           <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
           </exclusion>
       </exclusions>
     </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>2.2.4.RELEASE</version>
    </dependency>


  </dependencies>

</project>

 ③:创建一个启动类和一个yml文件

 

 配置yml文件

此时如果直接启动项目是会报错的,错误信息: com.sun.jersey.api.client.ClientHandlerException:
java.net.ConnectException: Connection refused: connect ,这是因为 Eureka 默认开启了将自己注册至注
册中心和从注册中心获取服务注册信息的配置,如果该应用的角色是注册中心并是单节点的话,要关闭这两个配置
项。
启动:
package com.xxxx;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer  //通过注册中心来启动这个应用
@SpringBootApplication
public class EurekaServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class);
	}

}

如果启动的时候出现错误的时候;

我们可以在这个加这个:

打开网页输入localhost:8761

 

 

 

以上是关于Ribbon与Nginx的区别的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud | FeignClient和Ribbon重试机制区别与联系

SpringCloud无介绍快使用,Ribbon负载均衡工具与OpenFeign的使用(十五)

sharding-jdbc学习

41 ribbon和feign

3.SpringCloud -- 服务调用负载均衡 RibbonOpenFeign

Ribbon 和 Feign 的区别