分布式系统介绍

大型网站系统与JAVA中间件实践笔记

第一章——分布式系统介绍

分布式系统的定义
  1. 组件分布在网站计算机上
  2. 组件之间仅仅通过消息传递来进行通信并协调行动
为什么要有分布式系统呢?分布式系统给我们带来了什么?
  1. 升级单机处理能力的性价比越来越低
  2. 单机处理能力存在瓶颈
  3. 出于稳定性和可用性的考虑
线程与进程的执行模式
互不通信的多线程模式

多个线程各自完成各自的工作,互不干涉

基于共享容器协同的多线程模式

多个线程之间对共享的数据进行处理,例如生产者-消费者模式,我们有一个队列用于生产-消费,多个线程会并发的访问这一个队列,此时我们需要对此队列的数据提供保护和控制以达到数据正确访问。对于线程不安全的队列,一般可以通过加锁或者copy on write控制并发访问。

通过事件协同的多线程模式

线程间存在协调的需求,例如A,B两个线程,线程B需要等待某个状态或事件发生后才能继续执行,而这个状态或事件是通过线程A触发。
这种情况注意避免死锁情况,何为死锁?线程A,B,线程A,B均进入加锁的方法A,方法B,方法A中线程A拿着方法A的锁去访问方法B,试图获取方法B的锁失败,进入等等状态,而此时线程B在方法B中拿着方法B的锁同时在获取方法A的锁,也一直失败,两个线程之间相互等待,造成了死锁。
比较简单的解决死锁的方法有,上述情况下,方法A和方法B应该都先获取它们两其中一个方法的锁,获取到后再给本方法上锁。在上述情况中,线程B获取 方法A的锁失败,就不会锁住方法B。

网络IO的实现方式
  1. BIO
    Blocking IO,即阻塞IO。通过单线程处理Socket套接字。如果是Server端,那么在支持并发的连接时,就需要更多的线程来完成工作了。
  2. NIO
    Nonblocking IO,即非阻塞IO。基于事件驱动思想,这是在JAVA服务端采用比较多的一种方式。
    NIO有一个Reactor,有多个Handle,Reactor把出现的事件交给相应的handle处理
  3. AIO
    即异步IO,AIO与NIO的差别是,AIO在进行读写操作时,只需要调用对应的read/write方法,并且需要传入completionHandle(动作完成处理器);在动作完成后,会调用completionHandle。NIO的通过是发生在动作之前,是在可读,可写的时候,Selector发现这件事件后调用Handle处理
分布式系统对应计算机的五大部件
输入设备

分布式系统中,一个节点向其它节点传输数据时,这个节点可以看做其它节点的输入设备

输出设备

分布式系统中,一个节点向其它节点传输数据时,这个节点本身可以看作一个输出设备

控制器

分布式系统中的控制器,其实指的是分布式系统之间相互调用的控制方式。主要的方式有:负载均衡设备(硬负载和软负载、名称服务器、规则服务器)下面来一一介绍
负载均衡设备:请求方和接收方中间有一个负载均衡设备(硬负载如F5,软负载如nginx,apache)代码服务。请求方请求负载均衡设备,由负载均衡设备根据不同的配置算法来发给接收方。从请求方的视角来看,不需要知道真实的接收设备,只需要知道把请求发给负载均衡设备而已。而对于接收方,也只知道负载均衡设备给自己发送请求。
名称服务器:请求和接收方中间没有代理提供服务,而是通过直连的方式发送数据。具体步骤为请求方从名称服务器里拿到接收方的地址,然后在自己的代码逻辑里做负载均衡,直接请求接收方

运算器

分页式系统的运算并不是一个节点可以完成的,需要N个节点一同协作才能完成最终的计算。从外面来看,像是一个运算完成的,但其实一是运算经过了好几个节点。

存储器

分布式中的存储器,也是由多台单个的存储器(文件服务器)集群的。而具体的存储规则则中间的代理来制定(这里指kv存储器,其中key根据不同规则存储在不同的节点上)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值