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

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

动机

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

问题

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

在这里插入图片描述

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值