分布式:多个微服务(springboot)组成完整项目,之间通过注册中心互相调用
集群:开多个springboot容器,多个端口
Nginx对多个tomcat进行负载均衡,讲请求均匀发送到各个节点
Web服务器:Nginx,apache,IIS,//tomcat,jetty,jboss
CAP理论也就是说在分布式存储系统中,最多只能实现以上两点。而由于当前网络延迟故障会导致丢包等问题,所以我们分区容错性是必须实现的。也就是NoSqL数据库P肯定要有,我们只能在一致性和可用性中进行选择,没有Nosql数据库能同时保证三点。(==>AP 或者 CP)
(SpringCloud+eureka),(Dubbo+zookeeper/)
Eureka(保证AP),Zookeeper(保证CP)。
Eureka使用***@FeignClient***
在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有时候某些依赖服务出现故障也是很常见的。
Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时的 fallback 降级机制。
总而言之,Hystrix 帮助提升分布式系统的可用性和稳定性。
避免请求排队和积压,采用限流和 fail fast 来控制故障。
提供 fallback 降级机制来应对故障。
举个例子:
一个分布式系统,服务A依赖服务B,服务B依赖服务C/D/E。最多只有100个线程资源。正常情况下,40个线程并发调用服务C,各30个线程并发调用 D/E。
调用服务 C,只需要 20ms,现在服务C故障了,此时线程会吊住2s左右。40个线程全部被卡住,由于请求不断涌入,其它的线程也用来调用服务 C,同样也会被卡住。这样导致服务B的线程资源耗尽,无法接收新的请求,甚至可能因为大量线程不断的运转,导致自己宕机。服务A也挂了。
Hystrix可以对其进行资源隔离,比如限制服务B只有40个线程调用服务C。当此40个线程被hang住时,其它60个线程依然能正常调用工作。确保整个系统不会被拖垮。
RPC框架,远程过程调用
SOA,面向服务架构
数据库读写分离-》分库分表
SpringCloud Alibaba
Sentinel限流和降级
Seata分布式事务
都是两阶段实现,四种模式:AT,TCC,Saga,XA
AT模式无入侵,可以不改造业务
TCC对于特务代码有入侵性,但无AT的全局行锁,性能比AT高
Saga长事务解决,适用于业务流程长
XA分布式强一致性