● 做事例如 Kafka、RabbitMQ;优点是松耦合,提高可用性,支持很多通信机制,例如关照、发布/订阅。 缺陷是中间件有额外的繁芜性,使系统整体变的繁芜。
REST和RPC的差异RPC 的隐蔽了远程调用这一动作,让用户觉得在调用本地方法。 可以选择多种协议,性能每每比 REST 要好,吐量比较大,相应韶光小。适宜内部做事之间的通信。 REST 是标准的 HTTP协议,相对来说更标准,更通用,天然支持所有措辞,很适宜对外开放的 API,而且调用及测试都很方便。
● 客户端创造模式客户端卖力确定做事供应者的地址和负载均衡策略,客户端访问做事注册表,定时同步目标做事的实例地址列表,然后选择目标做事的一个可用实例地址发送要求。优点:可以实现去中央化的通讯,避开入口造成的性能瓶颈;客户端可以自己制订负载均衡策略,相比拟较灵巧。 缺陷:做事客户端与做事注册表耦合;SDK 对客户端代码存在入侵。

● 做事端创造模式客户端通过负载均衡器访问目标做事,负载均衡器卖力查询做事注册表并转发要求。Docker 和 K8S 都具有内置的做事注册表和做事创造机制。 优点:支配平台供应做事创造功能,做事和客户端都得到简化;做事创造功能的更新对客户端是无感知的。缺陷:后端增加了一次要求转发,增加了运维难度,负载均衡器可能成为性能瓶颈;如果做事创造功能不可用,会导致全体系统瘫痪。
分布式系统面临的问题繁芜的分布式做事之间有很多依赖关系,从而引发多种问题:
● 做事雪崩fanout(调用关系:A->B->C)中的一环相应缓慢拖慢下贱做事,导致资源越占越多,引发做事雪崩。
● 级联故障某个依赖做事故障导致其他做事崩溃。
办理方案是:
做事熔断某个微做事不可用或者相应韶光太永劫,则会熔断该节点,快速返回客户端能够处理的”缺点”的相应信息做事降级在系统层面熔断某个或某一组做事,将资源留给更主要的业务。做事限流 限流可以认为是做事降级的一种,通过限定输入和输出流量达到保护系统的目的。做事降级与做事熔断的差异● 触发缘故原由不大一样。做事熔断一样平常是某个下贱做事发生故障引起,而做事降级一样平常是从整体负荷考虑。
● 管理目标层次不一样。熔断是一个框架级的处理,每个做事都须要,无层级之分,而降级一样平常须要对业务有层级之分。
做事限流的方法● 计数器法: 限定每秒或每分钟的要求数量。缺陷是禁绝确,随意马虎涌现 在两个韶光点交界处的过量要求。
● Leaky Bucket: 要求进入一个被限定大小的容器中,超出容量的要求被丢弃,容器按一定速率将要求发放给运用进行处理。
●Token Bucket: 系统按一定速率,向容器中存入 token,要求获取 token 后才能被处理,如果要求过多,容器被取空时,要求将被丢弃。
什么是幂等性幂等性是能够以同样的办法做两次,而对系统的影响保持不变,就彷佛它只做了一次的特性。
如何实现幂等性● token机制要求前获取token,并存入 redis 中;要求时将带上 token,业务接口检测 token 是否存在redis 中,存在表示第一次,不存在表示重复提交,直接返回重复标记给客户端。实行完毕后业务接口删除 redis 中的 token.● 版本号机制数据库写操作是原子性的,加上版本号即可实现幂等。
1
update `user` set point = point + 20, version = version + 1 where userid=1 and version=1
分布式事务办理方案
● 二阶段提交 一个事务折衷者管理多个参与者的提交和回滚,分为准备阶段和提交阶段。
● 准备阶段:折衷者给参与者发送准备命令,参与者准备资源,但不提交。
● 提交阶段:折衷者等待所有参与者相应完成后进入第二阶段,如果所有参与者返回成功,则折衷者向所有参与者发送提交命令;如果第一阶段中有任何参与者返回失落败则向所有参与者发送回滚命令,然后等待参与者相应之后,事务实行完毕。如果第二阶段实行失落败,则不断重试,直到成功为止。二阶段提交的优点是强同等性,缺陷是二阶段提交是同步壅塞协议,性能较差;折衷者存在单点故障问题;基本上只有数据库支持。
● TCC 补偿机制 TCC指的是 Try - Confirm - Cancel 三种操作:
● Try:预留资源,这一阶段须要将事务须要的资源进行预留和锁定。
● Confirm:实际实行操作,利用资源。
● Cancel:撤销操作,回退资源,解除锁定 调用者首先实行各做事的 try 动作,如果所有做事返回成功,则调用 confirm,如果有任意做事返回失落败,则对所有做事调用 cancel。 TCC的优点是不局限于数据库,可以跨业务系统实现事务;非壅塞协议,性能较好。缺陷是对业务代码入侵较大;confirm 和 cancel 操作可能须要重试机制,必须实现幂等性,许可空回滚;不担保强同等性,而是追求终极同等性。
● 事务表事务表是一张存储业务操作状态的表,可以用数据库实现。当事务实行时,提交的每一个业务的状态都存储在表中,当有某个业务实行失落败,则由后台定时任务读取事务表不断重试,一样平常会有一个最大重试次数,超过最大次数后发出关照,让人工处理。优点是实现起来比较大略,缺陷是必须实现幂等性;不担保强同等性。
● Saga事务模型 saga 事务模型分为多个小型事务,每个事务提交成功后,会发布一条关照来触发下一个事务实行。如果有一个事务失落败,则实行之条件交成功的 所有事务的补偿操作进行回滚。saga 的实现办法分为两种:
● 基于事宜每个事务提交之后都会像系统派发一个事宜,其他事务监听事宜来决定是否实行或回滚。优点是各参与者之间完备解耦;缺陷是在参与者很多的情形下会变得难以掩护,还随意马虎造成环形监听。
● 基于命令单独创建一个做事作为折衷者,折衷者通过发送命令,吸收回答的办法与其他做事进行交互,折衷者根据各做事的回答决定提交或回滚。优点是避免了环形依赖;事务逻辑清晰,随意马虎掩护。缺陷是增加了一个折衷者做事。
什么是蓝绿发布https://blog.csdn.net/lijiaocn/article/details/84276591
什么是金丝雀布https://blog.csdn.net/lijiaocn/article/details/84276591http://www.mabiji.com/wiki/canary.html
开始时,利用HTTP Header匹配指定测试职员的流量到新版本上,然后当新版本内部测试通过后,可以再按百分比,将用户流量一点一点导入到新版本中不雅观察一下运行情形,直到将流量全部导入到新版本上,末了完成升级;创造问题就立即取消升级,将流量切回到老版本。
什么是滚动发布每次只升级一个或多个做事(非全部),加入生产环境;不断实行这个过程,直到集群中的全部旧版本完成升级。 优点:节约资源,用户无感知。 缺陷:支配韶光慢,发布策略较繁芜,不好验证做事,不宜回滚
A/B测式和金丝雀发布的差异金丝雀是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患。 A/B测试是效果测试,同一韶光有多个版本的做事对外开放,这些做事都达到了上线标准,A/B测试关注的是不同版本的做事效果(业务上的)。
做事的拆分原则● 单一职责
● 避免环形依赖双向依赖
● 做事粒度适中- 演进式拆分
● 只管即便避免分布事务
总体原则:当一个业务不依赖或极少依赖其他做事,有独立的业务语义,为超过两个其他做事供应接口,那就该当拆分为独立做事,还应该与业务职员协同事情。 项目前期避免依赖履历法则拆分,该当等业务稳定下来,业务边界明确后再做拆分。
JWT 的验签办法和优缺陷数字署名是通过散列算法,从 header 和 payload 部分天生择要数据并进行加密得到。加密办法分为:
● 对称加密 通过唯一密钥进行对称加密,验签时须要将 token发送到授权中央进行校验,优点是大略,适宜单块系统;缺陷是每个要求都要通过授权中央。
● 非对称加密通过授权中央的私钥加密,其他做事可以保存公钥,直策应用公钥验签即可。优点是可以通过公钥验签,减少授权中央压力;缺陷是署名操作实行的比较慢,性能不高。