目录
分布式调度(集群对集群、软负载)
分布式的通讯不是P2P,而是集群对集群。
服务提供者是一个集群,集群中的每个机器都具备提供服务的能力。
不会因为一个机器宕机而使得服务失效。(冗余高可用
)
服务使用者也是一个集群。
所以在服务的调度上,就会有许多的挑战。
注册中心:注册中心维护着服务的分发。
两个个体可以直接交流,但是两个群体就需要中介
介入。
服务提供者将自己拥有的服务和提供服务的具体机器(地址、端口)告诉中介。
服务使用者找到中介订阅服务并获取提供服务的具体机器信息(地址列表),进而请求、调用。
配置中心
动态的推送节点的配置信息,方便管理和使用。
加载隔离、模块化
容器的类加载器和隔离中间件的类加载器互相持有。
提供编译依赖,确定依赖引入导出优先级。
容器和隔离中间件的类加载器都互相优先加载对方的依赖配置。
软负载
在分布式场景进行服务调度的过程中,会面临许多场景,调度方式也需要随着场景而变化。实际上,也就是资源的有效划分
、合理安排
。
分组:区别对待,VPI客户服务优先供给。
两个服务使用者同时依赖一个服务提供者,其中一个服务(更重要)需求远大于另一个的时候,我们需要让服务提供者的资源得到合理的分配,可以采用分组的方式,将较好的、较多的机器分为一组,余下的分为另外一组,进而告知服务调用方分别调用不同组别内机器提供的服务。借助分组
,对服务资源进行划分
,进而在服务资源供给中因人而异,区别对待
。
路由规则:规则配置化。
通过配置将某些客户端流量导入到某些机器上。
路由配置的粒度划分到方法参数。比如:写操作分配到实体机,读操作分配到虚拟机。
同时,有一定的保护机制,即:当规则匹配不到的时候转全量调用,避免人为配置错误导致调用无效。
同机房规则:就近调度。
在阈值范围内,客户端优先调用同机房的服务端。
虚拟机房是对实体机器的划分。同空间下(同机房)划分到同一个虚拟机房。
ip前两段的方式也可以作为同机房的判别,前提是同机房的ip前两段相同。
阈值:防止过度使用。
同机房的机器优先调用的同时存在一个隐患,就是优先调用同机房机器的度的问题。
当同机房内的机器有宕机的情况发生,依然优先调用,会导致负载过高,有安全隐患。
所以,设定阈值,同机房机器数/总机器数=p,当p低于阈值的时候转为随机调用。
权重规则:提高某些机器被调用率。
(1+n)/(m+n) 如果服务调度分发机制是在地址列表中随机分发的,那么在地址列表中添加该机器的ip个数,就是增加其被调用的概率。
主动异步调用
服务使用者调用服务,然后去do other things.
服务提供者完成服务并反馈。
回调
由服务提供方负责call back.
线程池
有任务队列,且主动将任务队列中的任务推送给线程。
线程复用的时间设定。
日志打印。
通讯
一致性策略:BASE定理
Base?
- BASE其实是下面三个术语的缩写:
1. 基本可用(Basically Available)
2. 软状态(Soft state)
3. 最终一致(Eventually consistent)
产生背景:
- 由于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成相关指标,要想获得相关指标,必须采用另外一种方式来完成。BASE就是为了
解决关系数据库强一致性
面临的问题而提出的解决方案。
核心思想:让系统在紧张的时刻适当放松下,延缓一致。
- 让系统对某一时刻
放松下
,通过降低数据一致性的要求来换取系统整体伸缩性和性能上改观。