ZStack--可拓展性秘密武器3:无锁架构

ZStack采用基于队列的无锁架构,解决了分布式系统中任务串行化和并行化的难题。通过工作队列,ZStack能够在不依赖锁和信号量的情况下,实现任务的细粒度控制,既支持串行执行,又允许并行任务以预设的并行度执行。这种方式避免了传统锁机制带来的复杂性和性能损失,提高了系统的可拓展性。
摘要由CSDN通过智能技术生成

很多IaaS软件中的任务需要按照顺序执行,例如,当一个启动虚拟机的任务正在运行时,关闭同一台虚拟机的任务必须等候前面开启虚拟机的任务完成。另一方面,一些任务应该支持并行完成;例如,20个在同一台主机上创建虚拟机的任务可以同时运行。在一个分布式系统中同时实现串行化和细粒度的并行化并不容易,这通常需要借助分布式调度软件。面对挑战,ZStack提出基于队列的无锁架构,使得任务本身可以简单的控制他们的并行化等级为1(串行的)…N(并行的)。

动机

好的IaaS软件应该能对任务的串行化和并行化进行细粒度的控制。通常,因为任务之间有依赖关系,任务希望以特定的序列被执行。比如,如果当一个对某个磁盘进行快照的任务正在运行时,那么删除该磁盘的操作不能被执行。有些时候,为了提升性能,任务应该被并行地执行;比如,在同一台主机上有十个创建虚拟机的任务,这些任务可以同时运行并不会产生任何问题。然而,如果不进行合理的控制,并行化会对系统造成一定的伤害;比如,1000个在一台主机上创建虚拟机的并发任务,将毫无疑问的摧毁整个系统,或者导致整个系统长时间没有任何回应。这种并发编程问题在多线程的环境中是复杂的,并且在分布式系统环境中将更加复杂。

问题

教科书教导我们解决同步和并行问题的答案锁(lock)和信号量(semaphore)。在分布式系统中为了解决此问题,一个直接的想法是使用一些类似Apache ZooKeeper的分布式调度软件或一些基于Redis的类似软件。拿ZooKeeper来举例子,使用分布式调度软件的概览如下:

在这里插入图片描述

问题在于,当使用锁和信号量的时候,一个线程需要去等待其他线程释放他们所持有的锁或者信号量。在“ZStack可拓展性秘密武器1:异步架构”中我们阐述了ZStack是一个异步的软件,没有线程将因为等待其他线程的完成而被阻塞,所以使用锁和信号量并不是一个可行的方案。我们也关注使用分布式调度软件后,系统的复杂度和可拓展性。假设一个系统充满了10000个需要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值