你好,游客 登录 注册 搜索
背景:
阅读新闻

开源IaaS ZStack 的伸缩性秘密之异步架构(1)

[日期:2015-08-31] 来源:开源中国  作者: [字体: ]

  ZStack 核心架构设计使得 99% 的任务异步执行,因此确保了单个的管理节点能够管理十万级的物理服务器,百万级的虚拟机,数万级的并行任务。

  架构的创新动力

  对于要管理大量的硬件和虚拟机的公有云,伸缩性是IaaS软件要解决的主要问题之一。一个中等规模的数据中心,可能会有50.000台物理服务器,大约 1,500,000的虚拟机,举例来说,同时分属于10000用户。虽然,用户不太可能象刷新Facebook页面一样开/关虚拟机,但是IaaS 系统还是会在某个时刻被数千任务拥塞,这些任务有来自API的,还有来自内部组件的。在某些更糟糕的情况下,一个用户可能会等一个小时才能创建虚拟机,就是因为系统线程池只有1000,而等待处理的任务有5000个。

  问题

  首先,我们明确反对某些文章中的观点,针对 IaaS 伸缩性问题归结于,其声称 “支撑基础,特别是数据库和消息代理是 IaaS 伸缩性的问题的罪魁祸首”。 这完全是错误的!首先,就数据库的规模来讲,其顶多算是小型和中型;像 Facebook 和 Twitter 这样的互联网巨头,还在拥 MySQL 作为其主数据库。IaaS 的数据难道超过了 Facebook 或 Twitter 吗?完全不可能,他们是十亿级,IaaS 只有百万级(超级数据中心)。其次,相较与 Apache Kafka 或者 ZeroMQ 此类的消息代理服务器,ZStack 所应用的 RabbitMQ 只能算是一个中等伸缩性的代理。但是,其依然可以保持每秒 50.000 的消息处理量。(参考,RabbitMQ 性能测试 , part 2)。难道这在 IaaS 软件系统中做通信还不够吗?完全足够。

  其实,IaaS 伸缩性问题的根源在于:任务处理慢。确实是,在 IaaS 软件系统中任务处理非常慢,慢到要有几秒甚至是几分钟才能完成。因此,当系统中全是这种慢慢处理的任务时候,当然就带来了新任务的巨大的延迟。而这种慢处理的任务源于任务路径过长。举例说明,创建虚拟机,一般要经过以下路径 身份服务(service)-->规划器(scheduler)-> 图象服务(service)->存储服务->网络服务->系统管理(Hypervisor); 每个服务都会花费几秒甚至几分钟来操作外部硬件,这就导致了超长的任务处理时长。

  同步 vs 异步

  传统的 IaaS 软件系统同步处理任务;其往往是基于线程池机制。在此机制下,线程分配给每一个任务,只有当前任务结束后,下一个任务才能被处理。因为,任务处理缓慢,在遇到并行任务的峰值时, 系统由于超过了线程池的极限所以变的很慢,新来的任务只能缓存排队。

  解决之道,直观的认为要增加线程池的容量;不过,现在操作系统虽然可以允许程序启动数万的线程,但是调度效率很低。因此,人们就开始做横向扩展,把处理任务分布在类似软件程序上,这些程序驻留在不同操作系统上;因为每个程序拥有其独有的线程池,从而最终增加了整个系统的线程池的容量。但是,以上横向扩展的方案带来了成本问题,其加大了管理的难度,并且,从软件设计的角度讲,集群软件本身也还是不小的挑战。最后,虽然其他的包括数据库,消息代理和外部系统(例如,成千的物理服务器)在内的基础设施有足够的能力来服务于更多的并行任务,但是IaaS软件系统本身变成了云系统的瓶颈。

 

  ZStack 通过异步架构来解决这个问题。如果,我们考虑 IaaS 软件系统和数据中心其他设施的关系,IaaS 软件系统其实是一个中间人的角色。其协调外部系统但不做时实的任务;例如,IaaS 不作具体工作,而是存储系统创建物理卷,镜像系统下载模板,虚拟机由虚拟管理系统创建。那么,IaaS 实际的工作任务就是决定如何分发子任务(sub-tasks)给外部系统。例如,对 KVM,子任务就包括了准备逻辑卷,网络和创建虚拟机,这些子任务都是 KVM 主机实施的;这个过程可能花费5秒钟,其中 IaaS 软件 0.5s, 其余 4.5s 被 KVMz 主机占用。根本上,ZStack 的异步架构确保了不用等这 4.5s,而是仅仅用0.5s 来选择执行的 KVM 主机,然后把任务分发出去。一旦,KVM 主机完成了指定的任务,它就会通知 IaaS 管理软件。以异步架构的方式,一个 100 线程的线程池就能轻松处理数千的并行任务。





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款