分布式系统

1.分布式系统是什么?

A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages.----Distributed System concepts and design 

由此可以看到几个重点,一是组件分布在网络计算机上,二是组件之间仅仅通过消息来通信并协调行动。


上图是一个分布式系统示意图,从用户来看,只有一台服务器,实际上背后有众多服务器组成一个分布式系统来提供服务。事实上,平时通过浏览器访问某个网站(如淘宝),在对浏览器发出请求的背后是一个大型分布式系统在我我们提供服务,整个系统中,有负责请求处理,有负责存储,有负责计算,最终通过相互协同把我们的请求变成了最后的结果返回给浏览器,并呈现个我们。

2.网络IO实现方式

(1)BIO方式,即Blocking IO,采用阻塞的方式实现,一个socket套接字需要使用一个线程进行处理。


(2)NIO方式,Noblocking IO,基于事件驱动思想,采用的是Reactor模式,


(3)AIO方式,即AsynchronousIO,采用Proactor模式,AIO与NIO差别是,AIO在进行读写操作只需要调用响应的read/write方法,并需要传入CompletionHandler(动作完成处理器)


3.如何把应用从单机扩展到分布式

计算机一共5部分组成:输入设备,输出设备,计算器,控制器,存储设备。从使用者来看,分布式系统就像一个超级计算机,那么这个超级计算机也是由5部分组成吗?

(1)输出设备的变化

分布式系统通过网络连接的多个节点组成,那么输入设备可以分为两类:一种是互相连接的多个节点,在接收其他节点传来的信息时,该节点可以看做输入设备,另一种就是传统意义上人机交互的输入设备了。

(2)输出设备的变换

与输入设备相仿,看做为两种,一种是系统中节点传递信息时,该节点可以看做输出设备,另一种是传统意义上的,例如用户的屏幕。

(3)控制器的变换

单机中,控制器就是cpu中的控制器,在分布式中,控制器不是像cpu中的控制器那样具体电子元件,而是分布式系统中控制方式。

分布式系统是由多个节点通过网络连接在一起并通过消息传递进行协调的系统,控制器的作用就是协调或者控制节点之间的动作和行为。


上图是在请求发起和请求处理中间有一个硬件负载均衡设备,所有请求都要经过这个负载均衡设备来完成请求转发的控制,这是一种控制方式。其中中间的负载均衡设备可以是硬件也可是软件,



上面的方式与透明代理区别是,在请求发起方和请求处理方这两个集群中间没有代理服务器这样的设备存在,而是请求发起发和请求处理方直接相连,在二者直接连接的外部,有个“名称服务”的角色,作用有两个:一个是收集请求处理的服务器的地址信息,另一个是提供这些地址信息给请求发起方。名称服务知识一个地址交换的作用,在发起请求的机器上,需要根据从名称服务得到的地址进行负载均衡的工作,即原来在透明代理做的工作被拆分到了名称服务和发起请求的机器上了。


与上一种很像,请求发起的一方如何选择请求处理的机器呢?这就要靠规则服务器给的规则了,所以在请求发起的机器上,会有对规则进行处理从而进行请求处理服务器选择的代码逻辑,与名称服务方式不同在于,名称服务是通过跟请求处理的机器交互来获得这些机器的地址的,规则服务器中,规则服务器本身并不和请求处理的机器进行交互,只是负责把规则给请求发起的机器。



该控制方式是存在一个Master节点管理任务,由Master把任务分配给不同的Worker去进行处理。

(4)运算器的变换

单机中运算器时具体的电子元件,在分布式系统,运算器是由多个节点来组成的,单机计算能力有限,分布式系统中的运算器是运用多个节点的计算能力来协同完成整个的计算任务。


两台服务器一起完成工作,那么用户该访问哪个服务器呢?



第一种通过DNS服务器进行调度和控制,在用户解析DNS时候,就会被给予一个服务器的地址,类似名称服务或者规则服务器的方式,中间没有代理设备,用户直接指导提供的服务器地址。


第二种是增加了负载均衡设备(纯硬件或LVS软件都可以),DNS返回的永远是负载均衡的地址,用户访问的都是通过负载均衡到达后面的网站服务器。

再来看另外一个经典的场景--日志处理


当一台日志服务器从多台(例子中是3台)服务器手机日志并处理,随着应用服务器的增多,单台日志处理服务器一定会遇到问题。


5、存储器的变化

单机中存储器一般分为内存和外村,内存在断电重启时,数据会丢失,外存则是用于长久的保存数据的。在分布式系统中,我们需要把承担存储功能的多个节点组织在一起,使其看起来是一个存储器。




该代理服务器作为控制器转发来自应用服务器的请求,一般根据请求的key进行划分。


名称服务用于管理在线的kv存储服务器,并把地址传到应用服务器这边,应用服务器会和KV存储服务器直接联系。


规则服务器的规则不仅写明如何对数据做sharding,还包含了具体的目标KV存储服务器的地址。假如规则是用户编号为奇数的数据全保存在第一台,用户编号为偶数数据保存在第二台,那么在规则服务器中会有规则来描述这个状况,会把具体符合某个规则后需要访问的KV存储服务器的地址(可能是ip,也可能是域名)写在规则中。如果KV存储器出现故障或增加了,没有名称服务的感知,怎么让应用服务器知道呢?后续。。。


与前面规则服务器和名称服务的图看起来很像。这个结构是应用服务器直接访问KV存储服务器的,不同的是,Master是根据请求返回目标KV存储服务器地址,然后由应用服务器直接去访问对应的KV存储服务器的。与名称服务相比,Master是根据请求返回对应的KV存储服务器地址,而不是返回所有的地址。所以具体的KV存储服务器选择工作在Maste就完成了,应用服务器不需要有更多的逻辑,规则服务器时把规则传给具体应用服务器,再由应用服务器去解析并完成规则下的路由选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值