0%

Ribbon

基于 Netflix Ribbon 实现的一套客户端负载均衡的工具。负载均衡(Load Balance - LB)就是将用户请求通过特定策略分配到多个服务上,从而达到系统的高可用(HA)。

与 Nginx 的不同之处

Nginx 是服务器负载均衡,客户端所有请求都会交给 Nginx,然后由 Nginx 实现请求转发。即负载均衡是由服务端实现的。
Ribbon 则是本地负载均衡,在调用微服务接口时,会在注册中心上获取注册信息服务列表,然后缓存到本地 JVM,从而在本地实现远程服务调用。

集中式 LB

阅读全文 »

Consul

一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。

运行

官方下载地址:https://www.consul.io/downloads,下载完之后解压,并在解压目录下运行下面的命令以开发者模式启动 Consul。

1
consul agent -dev
阅读全文 »

服务信息显示优化

1
2
3
4
5
6
7
8
9
10
eureka:
client:
register-with-eureka: true
#是否从 Eureka Server 抓取已有的注册信息,默认为 true。单节点无所谓,集群必须设置为 true 才能配合 ribbon 使用负载均衡。
fetchRegistry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
instance:
instance-id: payment8001 #前缀一般会是公司缩写或项目名称
prefer-ip-address: true #鼠标移动到 eureka 页面下的服务时会在浏览器左下角出现 ip 地址

服务发现 Discovery

注册进 eureka 的微服务,可以通过服务发现来获得服务的信息。

阅读全文 »

Eureka

在传统的 RPC 远程调用框架中,管理每个服务之间的依赖关系比较复杂,管理也就比较复杂,所以需要使用服务治理,管理服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前服务器的信息,比如服务地址和通讯地址以别名方式注册到注册中心上。消费者以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地 RPC 调用。

Eureka 采用了 CS 的设计架构,Eureka Sever 作为服务注册功能的服务器,它是服务注册中心。而系统中的其它微服务,使用 Eureka Client 连接到 Eureka Server 并维持心跳连接。这样就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

搭建 Eureka Server

阅读全文 »

支付模块(服务生产者)

准备工作

创建一个 Module,一个空的 Maven 项目。并导入下面的依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

在 resources 文件夹下创建 application.yaml 配置文件,并加入下面的配置。

阅读全文 »

SpringCloud = 分布式微服务架构的一站式解决方案,是多种微服务架构技术的集合体,俗称微服务全家桶。

SpringCloud Alibaba 和 SpringCloud 和 SpringBoot 的版本以及各组件版本兼容性选择请查看下面的版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

组件说明

SpringCloud 的组件有很多,在学习的时候需要抓住重点,并不是所有组件在一个项目中都会用到,很多时候我们需要的只是其中必要的部分,有了这些必要的东西就能完成所需要的功能。

Netflix 在 SpringCloud 项目中占着重要的地位,Netflix 公司提供了包括 Eureka、Hystrix、Zuul 等在内的很多组件,在微服务架构中至关重要,而 Spring 在 Netflix 的基础上,进一步封装了这些组件。但是因为一些原因,Netflix 提供的很多组件已不再维护,但并不是不能用了,所以还是需要学习其中的思想,而替代它们的新组件也要进行学习。

阅读全文 »