快速入门
Tesla是什么
Tesla是向日葵平台架构组基于SpringCloud技术开发的微服务治理平台,Tesla并不是一个框架,而是一套完整的微服务治理解决方案,主要包括:
- 服务注册与发现
- 负载均衡
- 断路器
- 智能路由网关
- 服务状态监控
- 服务鉴权
- 分布式日志追踪
模块目录结构
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| xrk-tesla ├─ tesla-admin (微服务治理管理后台) ├─ tesla-auth (授权服务中心) ├─ tesla-common (系统公共模块) ├─ tesla-gate (智能路由网关) ├─ tesla-module (微服务模块) │ ├─ server-provider (服务提供者示例) │ ├─ server-consumer (服务消费者示例) │ └─ xxx ├─ tesla-monitor (监控中心) │ ├─ tesla-admin-server (服务状态监控) ├─ tesla-registry (服务注册与发现中心) │ ├─ tesla-eureka-server (Eureka服务发现) │ ├─ tesla-consul-server (Consul服务发现) ``` ### 访问地址 |服务名|描述|测试环境访问地址|线上环境访问地址| |:----|:---|:-----|-----|---| |tesla-eureka-server|服务注册中心|[192.168.6.200:8761](http://192.168.6.200:8761)| |tesla-admin-server|服务状态监控|[192.168.6.200:9000](http://192.168.6.200:9000)|
### 为什么选择SpringCloud
* SpringCloud来源于Spring,质量、稳定性、持续性都可以得到保证 * SpringCloud天然支持SpringBoot,方便业务快速落地 * SpringCloud是Java领域最适合做微服务的框架
> SpringCloud是微服务架构的最佳落地方案
### 如何使用SpringCloud
#### Spring Boot 与Spring Cloud版本对应关系 |Spring Boot|Spring Cloud| |:-----|:------| |1.2.x|Angel版本| |1.3.x|Brixton版本| |1.4.x|Camden版本| |1.5.x|Dalston版本、Edgware版本| |2.0.x|Finchley版本|
!> 1. 版本不对应可能造成maven编译项目时报错。 2. Spring Cloud 版本采用命名的方式,使用伦敦地铁站名。其中SRx为该版本的一个Service Release版本,x为一个递增的数字。例如:Dalston SR4。
#### 集成SpringCloud 在项目中添加SpringCloud的Maven依赖
|
<dependencyManagement>
<dependencies>
<!-- spring boot 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<!-- spring版本依赖管理-->
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 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>
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| ?> 1. 版本不对应可能造成maven编译项目时报错。 2. Spring Cloud 版本采用命名的方式,使用伦敦地铁站名。其中SRx为该版本的一个Service Release版本,x为一个递增的数字。例如:Dalston SR4。
## 微服务治理
### 什么是微服务 微服务是将一个大型的单体应用架构拆分为多个**细粒度**服务的架构
### 传统架构演进发展史
#### 单体架构
#### 垂直架构
#### 服务化架构
### SOA和微服务架构区别 其实服务化架构已经可以解决大部分企业的需求了,那么我们为什么要研究微服务呢?先说说他们的区别:
* 微服务强调业务系统需要彻底的组件化和服务化,一个组件就是一个产品,可以独立对外提供服务 * 微服务不再强调传统SOA架构里面比较重的ESB企业服务总线 * 微服务强调每个微服务都有自己的独立运行空间,包括数据库资源 * 微服务更多诞生在互联网时代演进而来, * 微服务的切分粒度会更小
> 总的来说,微服务架构是SOA架构思想的一种扩展,更加强调服务个体的独立性、拆分粒度更小。
### 微服务拆分原则
## 注册中心
### Eureka 简介 Eureka是Netfilx开源的一款提供服务发现和注册的产品,它提供了完整的Service Registry和Service Discovery实现,也是SpringCloud体系中最重要的核心组件之一。

上图可以看出主要由三个角色组成
* Eureka Server: 提供服务注册与发现。 * Service Provider:服务提供者,将自身服务注册到Eureka,从而使消费方能够找到。 * Service Consumer: 服务消费者,从Eureka获取服务列表,进行消费服务。
### 工作原理
Eureka包含两个组件:Eureka Server和Eureka Clinet,它们的作用如下:
* Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。 * Eureka Server提供了服务发现的能力,各个微服务节点启动时,会通过Eureka Client向Eureka Server注册自己的信息,Eureka Server会存储所有可用的服务节点的信息。 * 微服务启动后,会在一定的周期内向Eureka Server发送心跳(**默认为30秒**)以续约自己的信息,如果Eureka Server在一定的时间内没有收到心跳(**默认为90秒**),则会从服务注册列表中剔除该服务的节点信息 * Eureka Server也是一个Eureka Client,多个Eureka Server之间通过复制的方式进行服务注册信息的同步 * Eureka Client会缓存Eureka Server中的信息(默认为30秒),即使所有的Eureka Server节点宕机后,服务消费者依然可以从缓存信息中找到服务提供者。
综上所述,Eureka通过心跳检测、健康检查、客户端缓存等机制,提高了系统灵活性、可伸缩性、可用性。
### 服务提供者
项目pom.xml中添加依赖
```java <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-eureka-client</artifactId> </dependency>
|
添加@EnableEurekaClient注解
1 2 3
| @EnableEurekaClient public Class Application{ }
|
在application.yml或application.properties中添加配置项
1 2 3 4 5 6 7 8 9 10 11
| #注册到eureka中心,获取到配置服务 eureka.client.service-url.defaultZone=http://localhost:7000/eureka/
# 心跳时间,即服务续约间隔时间(缺省为30s) eureka.instance.lease-renewal-interval-in-seconds=5
# 发呆时间,即服务续约到期时间(缺省为90s) eureka.instance.lease-expiration-duration-in-seconds=10
# 开启健康检查(依赖spring-boot-starter-actuator) eureka.client.healthcheck.enabled=true
|
自我保护机制

上图为Eureka自我保护模式界面
默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳信息,将会注销此节点信息(默认90秒),但是当网络分区发生故障时,微服务与Eureka Server之间无法正常通信,因为微服务是健康的,此时就不应该注销这个微服务。
自我保护机制的工作原理是当15分钟内超过85%的客户端节点服务不可用,那么Eurekajiu认为客户端与注册中心出现了网络故障,此时将进入Eureka Server的自我保护机制,出现以下情况:
- Eureka不再从服务注册列表中移除因为长时间未收到心跳而应该过期的服务
- Eureka仍然可以接受新服务的注册和查询请求,但是不会同步到其他节点上(即保证当前节点依然可用)
- 当网络稳定时,会退出自我保护模式,当前实例新注册的信息会同步到其他节点中
自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
1 2
| 禁用自我保护模式(默认打开状态,建议生产环境打开此配置) eureka.server.enable-self-preservation = false
|
服务状态监控
Spring Boot Admin