SpringCloud微服务
文档中心:https://springcloud.cc/spring-cloud-dalston.html SpringCloud中国社区:http://springcloud.cn SpringCloud中文网:https://springcloud.cc
1,什么是微服务
将单一的应用程序划分为一组小的程序,每个服务运行在一个独立的进程中,服务之间互相协调,互相配合,为用户提供最终价值,这就是微服务。
2,dubbo和SpringCloud的区别
dubbo | SpringCloud | |
---|---|---|
服务注册中心 | Zookeeper/Nacos | SpringCloud Netflix Eureka |
服务调用方式 | RPC | RESTful API |
服务监控 | Dubbo-Monitor | Srping Boot Admin |
断路器 | 不完善 | Spring Cloud Netfilx Hystrix |
服务网关 | 无 | Spring Cloud Netflix Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
3,微服务和微服务架构的区别
微服务是关注点,比如医院的口腔科,骨科等等,这就是一些小小的微服务,但是微服务架构,它是将所有的微服务组合起来,所有的微服务之间相互配合调用组成一个完整的系统。举个例子:中国有56个名族,这就是一个微服务架构,而每一个名族就是一个微服务。
4,Eureka比Zookeeper好在哪儿
所有的分布式系统都不能同时满足C(一致性),A(高可用), P(分区容错性),最多只能3选2,不能一致的原因就是要么等待服务器正常我才给你返回数据,这就是一致性,要么我马上可以给你返回数据,但是数据不一定是最新的,这就是可用性。 Zookeeper保证CP:它的架构是采用主从的,它的问题在于如果zk Master节点服务宕机,但是它的集群节点的选举时间太久了,30~120S,这个时间太长了,引文很有可能有很多人正在访问,但是这个时候就访问不了了。 Eureka保证AP:它没有采取主从架构,是每个节点平等,几个节点挂掉不会影响正常的节点工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端再向服务端发起注册或者连接失败,这个时候会自动切换到其他节点上面,保证服务的可用。
5,Ribbon客户端负载均衡
Ribbon使用方式, 使用 @LoadBalanced
@Configuration public class ConfigBean { @Bean //负载均衡器 @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
负载均衡算法有7种
- 1,RoundRobinRule(轮询)
- 2,RandomRule(随机)
- 3,AvailabilityFilteringRule(会优先过滤掉由于次数访问过多处于断路器跳匝状态的服务,还有并发连接超过伐值的服务,然后对剩余列表按照轮询的形式分发)
- 4,RetryRule(先按照RoundRobinRule的策略获取服务,如果在获取服务失败则在指定时间内进行重试,获取可用的服务)
- 5,WeightedResponseTimeRule(根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大,被选中的几率越高,刚启动是如果统计信息不足,会使用RoundRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule)
- 6,BaseAvailableRule 会过滤掉多次访问故障而处于断路器状态的服务,然后选择一个并发量最小的服务
- 7,ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
6,Feign负载均衡
Ribbon主要是使用RestTemplate来实现负载均衡,但是Feign是使用面向接口的方式来完成负载均衡,和Dubbo有点相似
@FeignClient(value = "http://MICROSERVICECLOUD-PROVIDER-DEPT") public interface DeptClientService {
@PostMapping(value = "dept/add") public boolean add(@RequestBody Dept dept);
@GetMapping(value = "dept/get/{id}") public Dept get(@PathVariable("id") Long id);
@GetMapping(value = "dept/list") public List<Dept> list(); }
使用@FeignClient完成服务注册,值是服务提供者的的应用名称
7,Hystrix熔断器
熔断机制:熔断机制是对应雪崩效应的一种微服务链路保护机制
多个服务之间进行调用的时候会出现相互依赖的问题,A依赖B依赖C依赖D,这个过程叫做扇出,为了防止中间有某个节点因为访问量过大,或者断电断网等情况造成宕机的问题,Hystrix就出现了,它的出现就是为了解决这个问题
对于高流量的应用来说,单一的后端依赖可能会导致服务器上的所有资源都在几秒内饱和。这些程序还可能导致服务之间的延迟增加,备份队列,线程和其他资源紧张,从而导致整个系统发生级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。
?疑问:
- 1,微服务应该按照业务拆分还是按照功能模块拆分呢?