Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的。web
Monolith(单体应用)架构(最终部署的时候只有一份war包,其余的以jar包的方式依赖来):在项目很小的状况下这种单体应用比较简单。算法
Monolith(单体应用)架构存在的缺点(项目较大时):spring
使用微服务架构就能够解决单体项目缺点springboot
1.优点:服务器
2.使用场景架构
Dubbo:中国各互联网公司在用。并发
Spring cloud:dubbo曾经确实很牛逼,可是Spring Cloud是站在近些年技术发展之上进行开发,所以更具技术表明性。负载均衡
Spring cloud是微服务架构中服务治理工具集,有不少产品组成。核心为五大神兽。相较于dubbo更加靠谱框架
等19个框架,开源的随时在增长。运维
1.Eureka是netflix的一个子模块,也是核心模块之一 。
2.使用eureka的客户端链接到eureka server并维持心跳链接,经过eureka server来监控系统中各个微服务是否正常运行。
三大角色
Eureka server提供服务注册和发现:Eureka Server提供服务注册服务。
Service Provider服务提供方 :将自身服务注册到Eureka,从而使服务消费方可以找到。
Service Consumer服务消费方:从Eureka获取注册服务列表,从而可以消费服务。
单机注册中心搭建
1.建立项目
建立一个普通maven项目
2.导入jar,pom.xml
<!--springboot支持--> <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> </dependency> <!--Eureka服务端支持--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
3.yml配置
server: port: 7001 eureka: instance: hostname: localhost client: registerWithEureka: false #是否要注册到eureka fetchRegistry: false #表示是否从Eureka Server获取注册信息 serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置
4.主类
@SpringBootApplication @EnableEurekaServer //标识是eureka服务端 public class EnrekaServerApplication_7001 { public static void main(String[] args) { SpringApplication.run(EnrekaServerApplication_7001.class); } }
为何须要?
为了提供并发量,有时同一个服务提供者能够部署多个。这个客户端在调用时要根据必定的负责均衡策略完成负载调用。
Ribbon负载均衡:
提供客户端负载均衡算法
集成原理
内置负载均衡规则类 | 规则描述 |
---|---|
RoundRobinRule(默认) | 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。 |
AvailabilityFilteringRule | 对如下两种服务器进行忽略: (1)在默认状况下,这台服务器若是3次链接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,若是再次链接失败,短路的持续时间就会几何级地增长。 注意:能够经过修改配置loadbalancer.<clientName>.connectionFailureCountThreshold来修改链接失败多少次以后被设置为短路状态。默认是3次。 (2)并发数太高的服务器。若是一个服务器的并发链接数太高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发链接数的上线,能够由客户端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。 |
WeightedResponseTimeRule | 为每个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。 |
ZoneAvoidanceRule | 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone能够理解为一个机房、一个机架等。 |
BestAvailableRule | 忽略哪些短路的服务器,并选择并发数较低的服务器。 |
RandomRule | 随机选择一个可用的服务器。 |
Retry | 重试机制的选择逻辑 |
Feign负载均衡(经常使用):
Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单
Feign具备以下特性:
可插拔的注解支持,包括Feign注解和JAX-RS注解;
支持可插拔的HTTP编码器和解马器;
支持Hystrix和它的Fallback;
支持Ribbon的负载均衡;
支持HTTP请求和响应的压缩。
Feign是以接口方式进行调用,而不是经过RestTemplate来调用,feign底层仍是ribbo,它进行了封装,让咱们调用起来更加容易。
当对同一个服务部署多个时,就要涉及负载均衡调用了,这是能够选择Ribbon和Feign。