上次详细介绍了基于Joyent技术的风起亚洲(Fengqi.Asia)公共云。那些对Amazon EC2有兴趣,但又因为EC2未进入中国而烦恼的用户们,不妨考虑用用这个风起亚洲公共云。其实 Joyent 本身也是以Amazon EC2的最佳替代品的身份加以宣传,不过不可否认,EC2有其他公共云暂时无法匹敌的市场份额。
这次谈谈风起亚洲最引以为傲的 SmartOS 系统(风起亚洲公共云也提供CentOS、Ubuntu、Windows等操作系统,但性能最好的还是SmartOS)。严格来说,SmartOS 并非Solaris,但也保留了一些Solaris的特性。所以说 SmartOS 和 Linux 是有一定区别的,这个学习需要一点时间,但是值得你去付出,因为 SmartOS 中很多杀手级特性都是 Linux 不具备的。
SmarOS 是基于 Illumos 核心(注:第一个字母是i,后面两个才是l),之后大牛们还将KVM移植了进去。而 Illumos 基于 OpenSolaris 项目的(已不复存在)。实际上,Oracle 收购 Sun 后,对 OpenSolaris 态度很冷淡,毫无兴趣,关闭源码。大多数Sun最优秀的工程师转投入 Illumos 旗下。现在他们大多数都在 Joyent 和 Nexenta。具体的故事我就不详述了,有兴趣的可以看看这两篇文章:
Illumos 提供了一个通用内核和一些基础的系统工具。基于 illumos 的发行版软件都有一些很赞的体验,这里提几个让人印象深刻,最具创新的distributions(参考链接):
其实illumos还出了一些很好的书,这些书现在网上都有电子版,链接是:http://illumos.org/books/ ,详细介绍附在文章末尾。
回过头来,继续说说SmartOS。风起亚洲采用Joyent技术基于底层硬件和操作系统之上为客户提供一个坚实的基础云平台。
Joyent SmartOS与SmartMachine、SmartDataCenter以及物理机紧密集成,在各个层面保证云平台的安全性。与其他的云服务供应商不同,风起亚洲的虚拟资源驻留在SmartOS中,而不是在虚拟机本身。这种包容性的虚拟化架构避免了Web应用层和操作系统之间接口的潜在漏洞。在网络层,Joyent的SmartDataCenter支持动态的虚拟局域网(vLAN),使客户在任何时候都可以有效隔离云平台上的不同用户。风起亚洲和Joyent的安全保障架构图如下所示:
SmartOS简单可以解释为:“illumos-derived OS that is the foundation of both Joyentʼs public cloud and SmartDataCenter product”。 既然作为是illumos的衍生产品,那么它具备几个上篇《风起亚洲(Fengqi.Asia)公共云详细介绍》里提到过的关键特性:
接下来,主要讲这么几部分有关虚拟化内容,主要内容来源于此链接。对于需要详细了解虚拟化技术的技术人员来说,蒋清野老师的文章《虚拟化、云计算、开放源代码及其他》、弯曲评论的《从半空看虚拟化》VMWare发表的白皮书《Understanding Full Virtualization, Paravirtualization, and Hardware Assist》都是很好的参考资料。
- 未虚拟化的计算机
- 客户机-服务器环境中的虚拟化
- 主机虚拟化(Hosted Virtualization)
- 裸金属硬件虚拟化(Bare-Metal Hardware Virtualization)
- 半虚拟化(Paravirtualization)
- 操作系统虚拟化(Operating System Virtualization)
这是一个基本的电脑结构示意图,比如我们一般用的台式机或者笔记本电脑。最下面一层显示了系统的硬件资源:CPU,内存,存储和网卡。
操作系统直接运行在硬件层之上,操作系统层又分为两个部分:
需要指出的是,尽管这个图显示所有的应用程序都是同样的“尺寸”,但是某些应用程序会比其他程序需要更多的资源,而且一个应用程序所使用资源也会根据运行情况而变化。操作系统会根据系统的资源情况来管理(调度)程序们的需求。
数据中心通常是一个服务器上运行一个应用程序,主要是有以下原因:
这种一个程序一个服务器的模式在20世纪80年代到90年代都运行得不错,特别是当某个程序对服务器的资源利用率很高的时候。但是,莫尔定律意味着更多的高性能服务器很快就会利用率很低,一般来说在8%到15%之间。显然,这是对设备,设施、电力和IT管理资源等低效率的使用。虚拟化正是为此而来的解决方案。
在主机虚拟化模式中,hypervisor(管理程序)运行在操作系统层之上,用于仿真模拟(emulate)真正的硬件资源,来创建和管理一或多个虚拟机。
(其实,硬件虚拟化可以分为:全虚拟化和基于主机的虚拟化。全虚拟化不需要修改主机操作系统。它依赖于二进制翻译来陷入和虚拟化一些敏感、不可虚拟化的指令的执行。客户操作系统和它们的应用由非临界和临界指令构成。在基于主机的系统中,主机操作系统和客户操作系统同时存在,虚拟化软件层处于两者之间。)
因为hypervisor在宿主OS(Host OS)之上,而hypervisor之上是客户OS(Guest OS),所以这种叫做“主机虚拟化(hosted virtualization)”。(注:注意英文单词便能理解,中文的翻译不太准确)这种也被认为是“应用程序级虚拟化(application-level virtualization)”,因为hypervisor在Host OS上运行应用程序。
主机虚拟化用来整合服务器资源,使得多台服务器能在一台物理机上实现,并能保持相互的独立性(isolation)。任何运行在虚拟机上的Guest OS会认为它自己就是运行在独立的,真的计算机,但实际上它是在访问一组有限的硬件资源(由系统管理员设定)。
操作系统也会被认为是个管家(“supervisor”),所以我们用术语“hypervisor”来表示管理这些管家的管理人。Hypervisor 在运行时(runtime)通过“二进制翻译”(binary translation)来修改操作系统,操作系统调用硬件时就被陷入(intercepted / “trapped”)或重定向(redirected)。由于引入了非常耗时的二进制翻译,主机虚拟化的性能可能并不理想。特别对I/O密集型应用更是一个大的挑战。二进制翻译通过利用代码缓存存储已经翻译过的热指令来改进性能,但却增加了内存的消耗。
主机虚拟化引入了一些其他基础设施管理的优点:
这种虚拟化方式提高了资源利用率,但是还是有很大的不足:
裸金属虚拟化解决了一部分 hypervisor 和 Host OS 带来的问题。Host OS 被剥离,剩下VMM(Virtual Machine Monitor)来运行hypervisor。为了此目的,VMM经过优化,hypervisor嵌入其中(最开始说到的操作系统中的userland级也被剥离,只剩虚拟化厂商的一些工具软件)。当然裸金属虚拟化也有缺点:
半虚拟化类似于裸金属虚拟化,但它移除了虚拟机硬件仿真(对比上面两图即能发现区别)
hypervisor直接与“特权Guest OS”(privileged guest OS)沟通,来访问下层的硬件。hypervisor管理操作系统们就像操作系统管理应用程序们那样:允许一个操作系统访问下层的硬件资源,同时阻止其他操作系统在同一时间访问同一资源。但是,为了达到此目的,操作系统必须经过修改以让它运行在一个“为操作系统们服务的操作系统”(OS for OSes)上面。这种情形的硬件虚拟化,操作系统是被“愚弄”(在runtime经过binary translation)以以致于它认为它是直接运行在硬件之上,就象最初设计操作系统时那样。
特权Guest OS与硬件资源(驱动)沟通访问:
好处在于:
缺点在于:
此外,随着2006年发布了支持虚拟化的CPU(Intel VT 和 AMD-V),相比其他形式的虚拟化技术,半虚拟化技术失去了它的一些优势:
解决虚拟化最高效的方式是在操作系统层。好处在于:
不足之处在于:
它们带给我们:
Zones virtualization 是在2005年加入到Solaris 10系统中。
其实,SmartOS的虚拟化技术也就是蒋清野老师的文章《虚拟化、云计算、开放源代码及其他》中提到的“软件层面的虚拟化”——往往是指在同一个操作系统实例的基础上提供多个隔离的虚拟运行环境,也常常被称为容器技术。他在下面这段文字清晰叙述了基于软件层面/容器技术的虚拟化技术的优点。
蒋老师说到:"硬件虚拟化也往往被称为重量级虚拟化,在同一宿主机上能够同时运行的虚拟机数量是相当有限的。在软件虚拟化的层面,同一宿主机上的所有虚拟机共享同一个操作系统实例,不存在由于运行多个操作系统实例所造成的性能损耗。因此,软件虚拟化也往往被称为轻量级虚拟化,在同一宿主机上能够同时运行的虚拟运行环境数量是比较宽松的。以Solaris操作系统上的Container为例,一个Solaris操作系统的实例理论上可以支持多达8000个Container(实际能够运行的Container数量取决于系统资源和负载)。与此类似,Linux操作系统上的LXC可以轻松地在同一宿主机上同时支持数量可观的虚拟运行环境。”
他还说到:“在虚拟化这个领域,国内的公司对硬件虚拟化的兴趣较大,在研发和生产环境中也大都采用硬件虚拟化技术。…… 至于在一个实际的应用场景中到底应该选择硬件虚拟化还是软件虚拟化,则应该重点考虑最终用户是否需要对操作系统的完全控制权(例如升级内核版本)。如果最终用户仅仅需要对运行环境的控制权(例如PaaS层面的各种App Engine服务),软件虚拟化可能性价比更高。对于为同一应用提供横向扩展能力的应用场景,软件虚拟化也是比较好的选择。”
操作系统虚拟化可很好的满足支持SmarOS的应用程序的运行。但是我们很多现有的程序只能运行在Windows或Linux之上,比如针对Windows,Active Directory,Windows的视频解码等。那我们该如何处理它们呢?基于Joyent技术的风起亚洲(Fengqi.Asia)公共云使用了主机虚拟化来提供解决方案。
如果你还记得的话,你应该知道如果没有了Host OS,那么你将失去它提供的任何有价值的功能特性。VMware的解决方案是将这些放到了设备驱动中,所以驱动程序可以将这些功能嵌入到hypervisor,bare-metal 硬件虚拟化,丰富其内涵。
上图的QEMU (有些人称为“Quick Emulator”)提供了硬件仿真,它是一个VMM(virtual machine monitor,虚拟机监控程序)。它并不是一个严格意义上的hypervisor层。每个QEMU是独立的——每个Guest OS有一个QEMU对应,而不是一个QEMU支撑多个VM。因为这里它将VM和VMM结合到了一起。
KVM(Kernel Virtual Machine)利用CPU虚拟化扩展技术提高系统性能,没有大量二进制翻译(硬件仿真)。QEMU也可以脱离KVM运行,但需要做二进制翻译,所以性能会比加上KVM要来的低。
至于有人在质疑移植KVM到SmartOS中是否会影响许可证的相关冲突问题。我想这下面一段话,也许能解答你的疑问。(原始链接:http://lwn.net/Articles/459754/)
Of course some questions arose about thelicense: Joyent has copied the GPL-ed KVM code from Linux, while theillumos kernel uses the CDDL (Common Development and DistributionLicense). However, according to Cantrill this doesn't pose any problems. Onhis blog he answersa question from a reader about the issue:
OurKVM port remains GPL and its own work (and lives in its own repo) - theillumos kernel is CDDL but is in no way a derived work of our KVMport.
And on Hacker News he clarifies that theirKVM port doesn't use the hooks that Linux KVM has into the Linux kernel(which are marked as EXPORT_SYMBOL_GPL in the Linux kernel):"Actually, our port does not use these hooks –there were zero mods to the illumos kernel to support KVM per se."So, although there seem to be some questions about the legality of theKVM module in illumos, the developers are fairly confident that theproblems don't apply because the illumos kernel (CDDL-licensed) is not aderived work of the illumos KVM module (GPL-licensed).
介绍完SmartOS及其软件层面的虚拟化技术,我们再回到公共云平台上来。
其实基于Joyent的风起亚洲(Fengqi.Asia)公共云支持的操作系统不只是SmartOS,其支持的OS列表有:
CentOS ,Debian FreeBSD,Joyent SmartOS,openSUSE,Red Hat ,EnterpriseSolaris,
Ubuntu,Windows Server Enterprise ,Windows Server HPC ,Windows Server Standard 等
支持的硬件有:
Arista ,Cisco ,Dell ,Force10,HP, IBM, Intel ,Juniper ,Oracle 等
支持的语言有:
C / C++ ,Erlang ,Haskell ,Java ,JavaScript ,Lua ,Node.js ,PHP ,Python ,Ruby 等
支持的Web服务器/容器:
Abyss,Apache ,HTTP, Tomcat ,GlassFish,IIS ,JBoss ,
Jigsaw ,Klone ,Lighttpd ,Mongrel ,nginx ,WebLogic ,WebSphere 等
支持的数据库:
Cassandra ,CouchDB ,Hadoop ,HBase ,Hypertable ,
MongoDB ,MySQL ,Oracle ,Percona ,PostgreSQL ,Riak 等
(附上Riak在 Joyent 平台上的性能测试报告,http://joyent.com/blog/riak-smartmachine-benchmark-the-technical-details)
由于SmartOS包含的资料很多,除了SmartOS Wiki 或使用Google等搜索引擎外,我们再介绍几个渠道来学习。
1. SmartOS 搜索引擎
SmartOS给出了一个Google自定义搜索引擎(http://smartos.org/search/),可以搜索以下域名下的所有信息:
2. SmartOS 相关视频及PPT
Deirdré Straughan 是 SmartOS 的 Community Architect,LinkedIn链接是:http://www.linkedin.com/in/deirdrestraughan
她的博客链接里列出了几乎所有的SmartOS及相关组件/技术的培训视频:http://www.beginningwithi.com/2013/01/22/whole-lotta-videos/
总共有531个视频,有的很久了,都是youtube的视频,有兴趣的就供参考吧。(作者原话:This is not all the videos I’ve made to date (for both work and fun), but … it’s 531 of them, some as old as 10 years (recovered from various sources).)
附送一个Bryan Cantrill (VP)做的有关 SmartOS 的 PPT : http://wiki.smartos.org/download/attachments/753667/smartos-modernOS.pdf
3. SmartOS 沟通渠道
Email:
最好的沟通方式便是订阅SmartOS社区的邮件列表:SmartOS Mailing List 目前就一个,从用户帮助到开发等都有,提供了很多信息。
如果想要更多信息,Illumos 提供了大量的 mailing lists 。
IRC:
所有的IRC沟通都通过 Freenode 有如下几个频道:
Dynamic Tracing Guide
DTrace is a comprehensive dynamic tracing framework for the illumos Operating System. DTrace provides a powerful infrastructure to permit administrators, developers, and service personnel to concisely answer arbitrary questions about the behavior of the operating system and user programs. The illumos Dynamic Tracing Guide describes how to use DTrace to observe, debug, and tune system behavior. This book also includes a complete reference for bundled DTrace observability tools and the D programming language.
Modular Debugger Guide
The Modular Debugger (MDB) is a highly extensible, general purpose debugging tool for the illumos Operating System. The Modular Debugger Guide describes how to use MDB to debug complex software systems, with a particular emphasis on the facilities available for debugging the illumos kernel and associated device drivers and modules. It also includes a complete reference for and discussion of the MDB language syntax, debugger features, and MDB Module Programming API.
Writing Device Drivers
Writing Device Drivers
Writing Device Drivers provides information on developing drivers for character-oriented devices, block-oriented devices, network devices, SCSI target and HBA devices, and USB devices for the illumos Operating System (illumos). This book discusses how to develop multithreaded reentrant device drivers for all architectures that conform to the illumos DDI/DKI (Device Driver Interface, Driver-Kernel Interface). A common driver programming approach is described that enables drivers to be written without concern for platform-specific issues such as endianness and data ordering.
Additional topics include hardening illumos drivers; power management; driver autoconfiguration; programmed I/O; Direct Memory Access (DMA); device context management; compilation, installation, and testing drivers; debugging drivers; and porting illumos drivers to a 64-bit environment.
Memory and Thread Placement Optimization Developer's Guide
The Memory and Thread Placement Optimization Developer's Guide
The Memory and Thread Placement Optimization Developer's Guide provides information on locality groups and the technologies that are available to optimize the use of computing resources in the illumos operating system.
最后,如果有任何问题,欢迎与我联系:michaelcxw(AT)gmail.com