应用云平台的可用性——从新浪SAE看云平台设计
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
该内容已经被标记书签!
标记书签错误,请重试!

作者 Dingze Zhu 译者 崔康 发布于 2009年8月21日
本文的灵感来自于Max Bruning对Solaris、BSD和Linux的看法。准Unix系统之间优缺点的比较已经是老生常谈了。不过,本文探讨了三种最新发布的操作系统 ——OpenSolaris、Windows Vista和Linux kernel 2.6的内核子系统。之所以选择它们是因为它们在商业环境和开发社区中使用最广泛、最受欢迎。
评价一种操作系统存在很多标准,但是毫无疑问,操作系统在计算机科学领域的角色始终不变。我们可以从以下三个目标来分析:
显然,操作系统需要各种功能,如进程/线程管理(以特定的调度机制分配和调用线程)、内存管理和文件管理。我们依次比较这些子系统。(用户友好性不在本文讨论之列,我们将关注于内核。)Linux和OpenSolaris之间有些概念类似,但Windows Vista则差别很大。
OpenSolaris实现了多层次的线程支持,以便灵活地利用处理器资源。下面四种概念来自于OpenSolaris。
如图 0所示,ps -Lec命令显示了系统进程和线程。

图 0 Solaris 10 update 6输出
图1 显示了四种实体的关系

图1 Opensolaris线程模型1
OpenSolaris三种层次的线程结构(ULT、LWP、内核线程)有利于操作系统管理线程,并为应用程序提供了清晰的接口。
用户线程接口是一个标准线程库。ULT映射到LWP上,LWP由操作系统管理,定义了执行的状态。LWP被绑定到内核线程上,在执行状态中一一对应。因此,并发和执行在内核线程层面上管理。
此外,应用程序可以通过应用程序接口(API,由系统调用构成)访问硬件。API支持用户调用内核服务执行特权任务,例如读写文件、对设备发出控制指令、创建新进程或线程、为进程分配内存,等等。
线程模型的变化造成了进程数据结构的修改。OpenSolaris保留了基本的结构,去掉了进程状态块,取而代之的是包含每一个LWP的数据块结构。
LWP 数据结构包含以下元素:

图 2 Solaris进程结构和传统Unix进程结构的区别
Vista进程的设计目标是支持若干操作系统环境。相应的,由Windows内核提供的原生进程结构和服务相对简单和通用,支持各个操作系统子系统实现特定的进程结构和功能。以下是Windows进程的重要特征:
图32展示了一个进程如何与它控制或者使用的资源关联。每一个进程被赋予一个安全访问令牌,称为进程的主令牌。

图3 Windows进程和它的线程
当用户首次登陆时,Vista创建一个访问令牌,包含用户的安全ID。该用户创建或者运行的每一个进程都有该访问令牌的拷贝。Windows使用该令牌验证用户访问安全对象或者在系统和安全对象上执行受限函数的合法性。该访问令牌控制着进程能否改变自己的属性。在本例中,进程没有指向访问令牌的句柄。如果进程尝试打开这样一个句柄,安全系统将决定这是否合法和进程是否可以改变自己的属性。
同时,与进程关联的还有一系列定义虚拟地址空间的数据块。进程不能直接修改这些结构,只能依赖于虚拟内存管理器,它提供了进程的内存分配服务。
最后,进程包含了一个对象表格,记录了进程所知的其他对象的句柄。每一个对象包含的每一个线程都有一个句柄。
此外,进程可以访问一个文件对象和定义共享内存的节对象。
Windows面向对象的结构有利于通用进程函数的发展。Windows Vista利用两种进程相关的对象:进程和线程。在OpenSolaris中,进程是对应用户任务或者应用的实体,拥有内存、文件等资源。线程是工作任务的一个可分发单元,可中断,因此处理器能够切换到另一线程。
Windows Vista支持进程之间的并发,因为不同进程里的线程可以并发执行。而且,同一进程里的多线程可以被并发的分配给各个处理器执行。多线程进程无需使用多进程即可实现并发。同一进程内的线程可以通过它们的通用地址空间交换信息和访问进程的共享资源。不同进程内的线程可以通过两个进程搭建好的共享内存交换信息。
面向对象的多线程进程可以有效的实现服务器应用。例如,一个服务器进程可以伺候多个客户端请求。
在Linux中,进程或者说任务由task_struct数据结构表示。 task_struct包含了一系列信息:
Linux并不区分线程和进程,使用了类似OpenSolaris的轻量级进程的机制,用户级线程被映射到内核级进程上。单个用户级进程里的多个用户级线程被映射到共享组ID的内核进程上。这确保了这些进程可以共享资源,如文件、内存,避免了同一组内部进程之间调度切换时的环境切换。
Solaris和Windows都已经存在了几十年,Linux却很年轻,还有很长的路要走。很明显,三种操作系统实现了流行的操作系统理论。对我们来说最大的障碍是访问内存实现和调试。由于知识的局限,我没有办法调试或者跟踪Windows Vista的线程和进程,不过OpenSolaris提供了足够的工具来查看内核线程。
在下一篇中,我们将探讨内存管理和文件系统。
1 Richard McDougall, Jim Mauro ,Solaris internals 2005 Pearson Education
2 Russinovich, M., and Solomon, D. Microsoft Windows Internals: Microsoft Windows Server(TM) 2003, Windows XP, and Windows 2000. Redmond, WA: Microsoft Press, 2005.
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011。
2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。
12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011。
篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。
随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。
8 条回复
关注此讨论 回复