Uninote
Uninote
用户根目录
工作日志

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,微服务应该按照业务拆分还是按照功能模块拆分呢?

Seata踩坑

me

点赞(0) 阅读(18) 举报
目录
标题