本系列将系统地介绍Windows Azure,包括基本名词、编程以及Windows Azure的应用,并探讨Windows Azure可能给我们现行模式带来的变化。
先把晦涩的关于云计算的概念放到一边,来看看我们在“平步青云”之前的一些处境。
- 大量数据实时处理、计算时,用户不得不等待,我们不得不在编码中考虑是否采用缓存并通过性能测试,同时我们还要编写一些代码保证缓存的更新与擦除;
- 采用异步编程去解决用户等待问题;
- 各种应用程序、Web Service统一的集成平台与五花八门的交互方式,每一次发布都让你头痛;
- 海量数据存储的问题;
- 公共模块如日志记录。
然后我告诉你,Windows Azure为我们提供了上面五个问题的解决方案,也许你就有兴趣来了解它了。
这就是Windows Azure的一个典型应用:它在Windows Data Center的一台机器上运行,以服务的方式为用户提供商业应用程序的使用和数据存取。

Windows Azure能做什么
- 软件服务商可以在Windows Azure上为特定的商业公司创建应用程序,然后以SaaS的方式提供给商业公司。
- 软件服务商可以为特定用户创建应用程序,如需要扩大市场为顾客创建的商业站点,Windows Azure都能够支持。
- 企业为内部员工创建应用程序,Windows Azure也是一个好的选择。
接下来,让我们看看Windows Azure的组成:

计算服务(Compute service)负责运行应用程序,存储服务(Storage service)提供数据存储。第三个组件,Fabric,是一个管理和监控云平台上应用程序的工具。本文中将介绍第一个组件。
计算服务(Compute service)
Compute service支持多种多样的应用程序,它的首要任务就是,解决大量用户并发请求的瓶颈问题:此前我们采用硬件不断升级的方式,而现在Compute service支持应用程序以多个相同代码版本的实例运行在多个服务器上,并且,还支持虚拟机,我们可以通过Hyper-V的操作界面对每个虚拟机进行管理。需要运行程序时,开发人员从浏览器使用Windows Live ID登录,然后自定义应用程序的托管帐户以及数据存储的帐户。拥有托管帐户的开发人员就可以在Windows Azure平台上上载他的程序并定义其配置了。
Windows Azure提供了两种运行应用程序实例的方式:Web role实例和Worker role实例。

如名称所示,Web role实例可以接收HTTP和HTTPS请求,它必须运行在IIS 7中。开发人员可以创建ASP.NET、WCF或其它可运行在IIS上的.NET应用程序;也可以创建非.NET的应用程序,如PHP和部署在Tomcat上的Java程序。图三中我们可以看到,Windows Azure内置了硬件负载均衡(load balancing),以为每个服务器上相同的应用程序实例分配Web请求,并管理这些实例的生命周期。因为Windows Azure并未为应用程序的每个实例建立关联,所以无法保证同一用户的一系列请求只被发送到唯一的一个实例上。因此,Web role实例是无状态的,所有客户端特定的状态都会被写入到Windows Azure存储上并在请求完成时发回客户端。
Worker role实例与Web role实例的不同之处在于,它不需要配置也不运行在IIS中,大多数时候,他们是以后台工作的方式运行。我们还可以在Worker role中运行Web server,如Apache Web server。
开发人员可以只使用一个Web role实例、一个Worker role实例,或将两者结合起来使用。如果应用程序的性能下降,他可以通过Windows Azure增加Web role实例,或增加Worker role实例,或两者同时增加。如果性能超过要求标准,他可以降低这些实例的数目,开发人员可以通过关闭所有的实例来停止应用运程的运行。Windows Azure还提供了API,允许通过编程方式动态改变Web role、Worker role实例的数目,但无法自动关闭应用程序。
进行Windows Azure开发时,开发人员并不需要在自己的机器上运行云平台,而是向运行的云平台上载、配置和调试自己开发的程序,可以使用日志API对平台上的应用程序进行调试,也可以使用配置工具来监控应用程序,如性能计数器、CPU占用、存储错误等等。这些应用程序都是以用户模式(User mode)运行,Windows Azure自己管理自身的系统更新,所以不必担心应用程序带来系统级(System level)的破坏,这在目前的企业平台上,是经常发生的:一些应用程序集成之后,影响到众多其它程序,甚至给平台造成破坏。
光是运行代码功能,显然不是Windows Azure的全部,在下一篇,我们将讲讲存储服务(Storage service)。
根据大家的反馈,我发现在第一版中对优秀程序员的定位有一些偏差,因此作出改进,希望大家继续拍砖!并慎重声明:此处是讨论如何招到优秀的程序员,如果你认为自己是优秀的,请说出你自认为优秀的地方,这会给HR的工作带来帮助。大多数程序员抱怨公司不识泰山,这不正好是可以改善双方选择的方式方法吗?
笔试考察
- 模式和架构的掌握:根据所给出的业务场景和系统架构图,简单阐述你的理解和认为有待改进的地方。
- 功能实现能力:根据现有的系统架构图,选择一个最能表现你编程能力的项目,说明你的实现方案和预计花费工时,试画出一组类的静态视图。
- 代码规范的掌握:重新考虑第二题中类的名称,试为其中一个类写出最能表现你编码风格的二至三个完整代码的方法。
- 代码审查能力:审核几个类文件,找出所有你认为不合适的地方。
- 笔试时间为一个小时。
面试考察
- 现行项目特点方面:你如何理解和实施对于现有系统的重构?如有类似经历,请简述,考察求职人员的描述是否连贯、清晰有条理。
- 业务技术理解和目标方面:是否有过BPM(业务流程管理)方面的工作经历,请简述;对此类项目是否有兴趣?
- 合作稳定性方面:求职人员自身的发展目标。
业务场景举例
一家健身俱乐部将推出自己的电子商务系统,系统满足会员管理、健身场地展示、教学示例视频付费点播、多种在线支付手段(可与银行或第三方支付接口)、教员管理、课程安排和在线选课几个模块。在未来,该电子商务系统可能还会实现与健身器材提供商和维护商的系统协作,但在此期规划中可以不实现功能。
会员分为两种,购买一种或多种健身课程的会员,他们可以在营业时段免费使用俱乐部的所有器材和在指定时间参与健身教练举办的课程;另一种是按季度或年支付会员费的会员,他们也可以在营业时间免费使用俱乐部器材。
对于课程管理和在线选课功能,包含了场地管理和时间管理子模块,每个课程对应一个或多个场地,但仅对应一个时间段,参与课程的学员在课程时间范围内可能使用健身房的其它与课程无关的器材,这将会影响到未参与课程的会员对器材的使用。针对每个课程,根据场地所能容纳的人数,作为课程最大参与人数,但课程最大报名人数是不限的。
