分布式系统的本质-队列

所有分布式系统或者说高性能分布式系统的本质只有两个字——队列
简单吧,换句话说,只要掌握了队列,就掌握了分布式系统构件方式。所有的分布式系统,不管规模大小,都是不同类型队列的堆砌而已。
什么是队列?
我们从一个网站举例:
从宏观上来说它包含一个web服务器的消息处理队列,http消息到达服务器后是要排队处理的,这就是一个fifo队列;更进一步,如果这个网站的业务比较复杂,需要分布式部署,还需要像rabbitmq,kafka这样的队列服务器来分担应用层的压力,这也是一种高级的队列形式,提供的算法就不只是fifo可能还有广播,主题等特性。
我们进一步往下,下面就是操作系统了,操作系统跟队列有啥关系?或者跟并发有啥关系?可以说,一个系统的并发能力很大程度取决于os的设计。从网络协议栈的处理到进程线程的调度,到cpu cache相关的锁同步都直接或者间接跟os关系,毕竟程序写了千万条,最终在os才能执行。
os的队列有哪些呢?
tcp协议的三次握手,在服务器等待客户端最后一次握手回复之前会吧socket结构放入一个队列,回复一个,就从中移除一个,形成所谓的连接套接字对象,这个队列也会影响性能,有的半连接攻击也会利用。epoll机制中如果把红黑树看做一个队列的话也算一个,这个机制对高性能至关重要。同时,在linux内核中,网络协议的读写并不直接写入设备,而是有队列做缓冲,用于屏蔽缓慢的io与超快的cpu内存读写性能差距,不至于网络设备被堵死。而,这些队列都是ring-buffer,即循环队列,这样更能发挥cpu的缓存能力(cache line),同时,数组链表组成的队列性能也会优于链表。
到了进程管理模块,每个进程都要执行自己的代码,一个os几百上千个进程,怎么执行?排队呗!在linux进程调度模块中,每个核心会为不同优先级的任务建立队列,以及一颗时间片红黑树,调度算法根据拥挤程度,优先级把合适的任务放入cpu运行。而,队列中的优先级队列,或者堆是做优先级运算的非常合适的动态数据结构。
同样,在磁盘io,内核虚拟文件系统与驱动程序之间也有队列,来解决速度与拥塞。在进程通信,管道这些内核对象中也大量使用队列来做消息存储与路由,以达到进程通信的目的,这跟rabbit,kafka的理念如出一辙。
另外,在编程语言中,很多锁对象也是用队列来实现,如java的reentrylock系列同步机制,就是将等待的线程对象放入一个队列中排队来实现的。
所以,在分布式环境中,队列从上到下都广泛使用,掌握好队列对构件好的分布式系统至关重要!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值