(1)相同点:
分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标。
(2)不同点:
分布式是指将业务系统进行拆分,即分布式的每一个节点都是实现不同的功能。而集群每个节点做的是同一件事情。
(1)微服务是一种架构风格。
(2)思想:
(1)灵活,扩展性极强。
(2)易于协同开发,责任划分明确。
(3)符合“高内聚,低耦合” 的编程思想。
(4)不受技术栈限制,方便系统迭代。
(1)运维成本增加。(容器docker)
(2)跟踪问题复杂了。(统一的日志,链路追踪)
(1)维度:时间,空间,成本,地域,业务….
(2)简单实用:横向提取,纵向切割。
(1)目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。
(2)RESTful通讯协议HTTP,经常写的RestController就是RESTful风格,特点是比较灵活,通常用于微服务架构。
(3)RPC通讯协议一般使用TCP,性能较好,不如RESTful灵活,通常用于SOA架构。
Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接,我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。
(1)Consistency(一致性)
数据一致更新,所有数据的变化都是同步的
(2)Availability(可用性)
在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求
(3)Partition tolerance(分区容忍性)
(1)CAP目标:某个节点的故障,并不影响整个系统的运行
(2)CAP原理:任何分布式系统只可同时满足二点,没法三者兼顾,既然一个分布式系统无法同时满足一致性、可用性、分区容错性三个特点, 所以我们就需要抛弃一样;
(1)Eureka(注册中心)、Nacos
(2)Zuul(网关)、Gateway
(3)Fegin(远程调用)、OpenFeign
(4)Ribbon(负责均衡)
(5)Hystrix(熔断器)
(1)Nacos(配置中心与注册中心)
(2)Sentinel(熔断与限流)
(3)Seata(分布式事务)
(1)目的是一致的:都是从可用性和可靠性出发,为了防止系统崩溃;
(2)用户体验类似:最终都让用户体验到的是某些功能暂时不可用;
触发原因不同:
(1)服务熔断一般是某个服务(下游服务)故障引起;所以熔断是被动的。
(2)服务降级一般是从整体负荷考虑,并发太大,先保证整体的可用;所以降级是主动。
Zuul:
使用的是阻塞式的 API,不支持长连接,比如 websockets。
底层是servlet,Zuul处理的是http请求
没有提供异步支持,流控等均由hystrix支持。
依赖包spring-cloud-starter-netflix-zuul。
Gateway:
Spring Boot和Spring Webflux提供的Netty底层环境,不能和传统的Servlet容器一起使用,也不能打包成一个WAR包。
依赖spring-boot-starter-webflux和/ spring-cloud-starter-gateway
提供了异步支持,提供了抽象负载均衡,提供了抽象流控,并默认实现了RedisRateLimiter。
相同点
(1)底层都是servlet
(2)两者均是web网关,处理的是http请求
(1)内部实现不同
(2)是否支持异步