SpringCloud(一)
服务架构
微服务
"微服务”一词源于 Martin Fowler的名为 Microservices 的博文,可以在他的官方博客上找到[(http://martinfowler.com/articles/microservices.html)]
微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间一般通过 HTTP 的 RESTfuL API 进行通信协作。
被拆分成的每一个小型服务都围绕着系统中的某一项或些耦合度较高的业务功能进行构建,并且每个服务都维护着白身的数据存储、业务开发自动化测试案例以及独立部署机制。
由于有了轻量级的通信协作基础,所以这些微服务可以使用不同的语言来编写。
Spring Cloud 是一系列框架的有序集合。
Spring Cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来。
通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、 断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud项目官方网址:[https://spring.io/projects/spring-cloud ]
Spring Cloud 版本命名方式采用了伦敦地铁站的名称,同时根据字母表的顺序来对应版本时间顺序,比如:最早的Release版本:Angel,第二个Release版本:Brixton,然后是Camden、Dalston、Edgware,Finchley,Greenwich,Hoxton。
目前最新的是Hoxton版本。
Spring Cloud 与 Dubbo 的区别
Spring Cloud 与 Dubbo 都是实现微服务有效的工具。
Dubbo 只是实现了服务治理,而 Spring Cloud 子项目分别覆盖了微服务架构下的众多部件。
Dubbo 使用 RPC 通讯协议,Spring Cloud 使用 RESTful 完成通信,Dubbo 效率略高于 Spring Cloud。
总的来说:
微服务就是将项目的各个模块拆分为可独立运行、部署、测试的架构设计风格。
Spring 公司将其他公司中微服务架构常用的组件整合起来,并使用 SpringBoot 简化其开发、配置。称为 Spring Cloud
Spring Cloud 与 Dubbo都是实现微服务有效的工具。Dubbo 性能更好,而 Spring Cloud 功能更全面。
Spring Cloud服务治理
Eureka
Eureka 是 Netflix 公司开源的一个服务注册与发现的组件 。
Eureka 和其他 Netflix 公司的服务组件(例如负载均衡、熔断器、网关等) 一起,被 Spring Cloud 社区整合为
Spring-Cloud-Netflix 模块。
Eureka 包含两个组件:Eureka Server (注册中心) 和 Eureka Client (服务提供者、服务消费者)。
1、搭建 Provider 和 Consumer 服务。
2、使用 RestTemplate 完成远程调用。
3、搭建 Eureka Server 服务。
4、改造 Provider 和 Consumer 称为 Eureka Client。
5、Consumer 服务 通过从 Eureka Server 中抓取 Provider 地址 完成 远程调用
Spring提供的一种简单便捷的模板类,用于在 java 代码里访问 restful 服务。
其功能与 HttpClient 类似,但是 RestTemplate 实现更优雅,使用更方便。
一、
创建 eureka-server 模块
引入 SpringCloud 和 euraka-server 相关依赖
完成 Eureka Server 相关配置
启动该模块
二、
引 eureka-client 相关依赖
完成 eureka client 相关配置
启动 测试
Eureka – 相关配置及特性
eureka 一共有4部分 配置
1、server : eureka 的服务端配置
2、client : eureka 的客户端配置
3、instance : eureka 的实例配置
4、dashboard : eureka 的web控制台配置
Eureka – 相关配置及特性 - instance
eureka:
instance:
hostname: localhost # 主机名
prefer-ip-address: # 是否将自己的ip注册到eureka中,默认false 注册 主机名
ip-address: # 设置当前实例ip
instance-id: # 修改instance-id显示
lease-renewal-interval-in-seconds: 30 # 每一次eureka client 向 eureka server发送心跳的时间间隔
>
lease-expiration-duration-in-seconds: 90 # 如果90秒内eureka server没有收到eureka client的心跳包,则剔除该服务
Eureka – 相关配置及特性 - server
eureka:
server:
#是否开启自我保护机制,默认true
enable-self-preservation:
#清理间隔(单位毫秒,默认是60*1000)
eviction-interval-timer-in-ms:
计算是(4+1)20.85=8.5 直接舍去后边的数取整得到结果8
式子中的2表示每分钟两次即30秒一次
eureka:
instance:
lease-renewal-interval-in-seconds: 30 # 每一次eureka client 向 eureka server发送心跳的时间间隔
lease-expiration-duration-in-seconds: 90 # 如果90秒内eureka server没有收到eureka client的心跳包,则剔除该服务
Eureka – 相关配置及特性 - client
eureka:
client:
service-url:
# eureka服务端地址,将来客户端使用该地址和eureka进行通信
defaultZone:
register-with-eureka: # 是否将自己的路径 注册到eureka上。
fetch-registry: # 是否需要从eureka中抓取数据。
****Eureka – 相关配置及特性 - dashboard ****
eureka:
dashboard:
enabled: true # 是否启用eureka web控制台
path: / # 设置eureka web控制台默认访问路径
Eureka – 高可用
1、准备两个Eureka Server
2、分别进行配置,相互注册
3、Eureka Client 分别注册到这两个 Eureka Server中
****Consul ****
Consul 是由 HashiCorp 基于 Go 语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件。
用于实现分布式系统的服务发现与配置。
使用起来也较 为简单。具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署 。
官网地址: [https://www.consul.io ]
Consul – 快速入门
1、搭建 Provider 和 Consumer 服务。
2、使用 RestTemplate 完成远程调用。
3、将Provider服务注册到Consul中。
4、Consumer 服务 通过从 Consul 中抓取 Provider 地址 完成 远程调用
Ribbon 客户端负载均衡
Ribbon 概述
Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。
Ribbon主要有两个功能:
简化远程调用
负载均衡
服务端负载均衡
负载均衡算法在服务端
由负载均衡器维护服务地址列表
客户端负载均衡
负载均衡算法在客户端
客户端维护服务地址列表
Ribbon 远程调用
Ribbon 可以与 简化 RestTemplate 的远程调用
`/**
* 使用 Ribbon 简化restTemplate调用
* 1. 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
* 2. 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的 应用名称
* @param id
* @return
*/
@GetMapping("/goods2/{id}")
public Goods findGoodsById2(@PathVariable("id") int id) {
String url = "http://eureka-provider/goods/findOne/" + id;
// 3. 调用方法
Goods goods = restTemplate.getForObject(url, Goods.class);
return goods;
}`
Ribbon 负载均衡
Ribbon 负责均衡策略:
1、随机 :RandomRule
2、轮询 :RoundRobinRule
3、最小并发:BestAvailableRule
4、过滤:AvailabilityFilteringRule
5、响应时间:WeightedResponseTimeRule
6、轮询重试:RetryRule
7、性能可用性:ZoneAvoidanceRule
设置负载均衡策略
1. 编码
2. 配置
直接在消费者一方的yml文件中配置信息
user-service: # 生产者服务名称
ribbon:
NFloadBalancerRuleClassName: XxxRule # 负载均衡策略类