前 言 云计算在2008年中期变成了一个热门话题,到2009年中期时达到它最流行的状态。作为其受欢迎的证据,2009年8月中旬在搜索"cloud computing"返回了9200万条结果。在全球的各地每周至少会召开一个云计算的会议。主流商业杂志 在本质上,Windows Azure的本质……会使人们以尽可能少的变动来包装现存的Windows Server工作负荷,以在公共或私人云环境中有所提升。它展现的程序设计模式和结构--正是一个完美的云计算结构该有的样子,这也是您如何能以可度量的扩展能力构建程序,…… 当Steven Levy问"有几个公司可以构建大云?"时,Ozzie回答: 不太多。作者不知道Amazon的情况。他们是领导。他们做了令人惊喜的工作。但是用于企业部署的Windows 服务器水平是很可靠的。我们有很多公司,他们正在使用Exchange和SharePoint步入这个基础设施……它是一笔很大的投资。 Amazon Web Service是今天云计算中"800磅的大猩猩"(喻指危险的垄断者),已经凭借其2006年3月发布的弹性计算云(Elastic Computing Cloud,EC2)在这个基础设施即服务(Infrastructure as a Service,IaaS)的市场中存在3年了,并在2006年3月开始简单存储服务(Simple Storage Services,S3)运营。Goole以其Python动力Google 应用程序引擎(GAE)成为平台即服务(Platform as a Services,PaaS)商业模式的最早参与者之一,GAE现在支持Java作为程序设计语言。2008年4月上旬以前GAE限制10 000个开发人员,2008年5月28日已经对所有人开放。根据维基百科2009年中软件即服务(Software as a Service,SaaS)的典范总共有55 400个客户关系管理(Customer-relationship management,CRM)用户和超过150万订户。2009年6月Verzon是第一个宣布进入基于云的计算即服务(Computing as a Service,CaaS)业务的电信公司。在编写本书时,Sun Microsystems正被Oracle收购,IBM是Windows Azure潜在的PaaS竞争者。 Ozzie用下面的列表来回应Levy的问题"对于云计算,什么是你们胜过其他公司的竞争优势?" (1) 技术:Microsoft研究院已经做出了巨大的努力。 (2) 操作系统。 (3) 由搜索带来的存储投资。 (4) 开发优势:500~700万开发人员在Microsoft的平台上工作。这是一个非常大的市场机会。如果我们能向他们证明我们有非常好的基础设施以承载他们的软件,他们就会部署。还有与合作伙伴的机会--对于合作伙伴这里将提供很多机会,像硬件合作伙伴一样赚钱。 (5) 企业:Exchange 和 SharePoint是省钱的好方法。 本书集中于前面列表的第4项。Microsoft在云计算上的竞争优势取决于使用Visual Studio(VS) 2008和2010的骨干。NET体系结构设计人员和开发人员的技巧,以将本地应用程序和服务移动到Azure WebRoles、WorkerRole和。NET服务。从VS的Solution Explorer发布到托管的Staging状态的Azure云中只需要单击几下鼠标。从Staging状态到产品部署只是一次单击操作,就高可用性的自动创建两个数据副本。当流量拥塞时提供额外的服务实例,并在使用减少时自动退出。 SQL Server数据库管理员和数据库体系结构设计人员可以基于SQL Azure 数据库(SADB)、Microsoft Synchronization架构和最新的Data Hub(以前编码名为Project Huron)来利用他们的Transact-SQL。Data Hub在内部、移动和Azure 数据库间同步数据库模式和表行。您开发计算机上的SQL Server Management Studio可以简单地通过修改登录对话框上的服务器DNS名称连接到SQL Server数据库。基于。NET的SqlClient类通过TCP的1433端口,管理SADB在SQL Server的传统传输数据流(Transport Data Stream,TDS)协议上运行T-SQL。或者可选用ADO.NET数据服务以前的Project Astoria)通过HTTP[S]提供对REST风格的SADB数据的访问。 本书的前面章节主要讨论了把一些IT业务移动到云中并处理棘手的云安全问题的商业可行性。但本书的重点在于关注实际动手编程Windows Azure存储服务--表、Blob和队列--和Web应用程序(WebRole和WorkerRole),除此之外还有。NET服务,包括访问控制服务、服务总线队列和路由器以及Workflows。Azure团队决定在这场游戏的晚些时候从SQL Server Azure数据库的Authority-Container-Entity(ACE)数据模型迁移到SADB的完全的Account-Server-Database模型,但到本书最后印刷期限为止并没有发布SADB 的社区技术预览版(CTP)。因此本书的最后两章关于管理和编程SADB和Data Hub,以及示例代码一起是可以从Wrox Web站点下载的。Microsoft团队在2009年发布的CTP版的。NET服务中移除了工作流服务,因为。NET架构4将对工作流引擎进行实质上的改进。工作流服务将随。NET 4的最终发布而重新启动。 本书读者对象 .NET开发人员、软件体系结构设计师和开发经理是本书的主要读者,但IT主管和经理更倾向于找到对于Windows Azure服务有用的关于审计管理和安全的详细内容。例如,第5章注意到了云管理和安全审计的需要,然后描述了Microsoft数据中心在2009年中接收的审计准则公告(Statement of Auditing Standards,SAS) 70 I型和II型证据和ISO/IEC 27001:2005认证。 Microsoft是首家为它的数据中心同时获得SAS 70 I型和II型证据和ISO/IEC 27001:2005认证的主要PaaS云服务提供商。 本书主要内容 本书涉及服务器端和客户端在本地Azure Development Fabric下的Visual Studio 2008、。NET Framework 3.5、Windows Azure软件开发包(Software Development Kit,SDK)、。NET服务SDK、SQL Azure SDK和 ADO.NET数据服务编程。示例程序演示了基于Azure Blob、表和队列的数据存储与检索,基于ASP.NET成员资格和Azure访问控制服务的用户身份验证和授权,用服务总线和它的队列与路由实现服务端与客户端的相互连接,用。NET服务和VS的图形界面的工作流设计器植入工作流。大部分示例代码使用示例StorageClient库以简化传统。NET对象编程而不是生硬的HTTPS请求和响应。 当编写本书时,。NET 4和VS 2010还在测试阶段并且Azure Fabric不支持需要。NET 4特性的项目。对于作者,使用VS 2010和VS 2008部署Azure项目或服务并没有明显的区别。 本书结构 本书分为4个部分,每部分2~5章。大部分章节的知识建立在您所获得的前面章节知识之上。因此,建议您按章节的顺序学习。下面是每部分及其每章的内容。 第Ⅰ部分:Windows Azure平台简介 第Ⅰ部分致力于一般的云计算话题,包括Windows Azure基础设施和Azure存储服务。 ●第1章以云计算定义和其市场规模开始,讨论了从迁移应用程序和服务到云的原因,简要介绍了云计算的历史和原型,例如Oracle的Network Computer,随后继续描述了各种各样的*aaS变体,例如,数据存储即服务(Data storage as a Service,DaaS)、软件即服务(Software as a Service,SaaS)和Microsoft的软件+服务。除此之外,还有云计算本体论。该章末尾详细描述了国家标准与技术研究所(National Institute for Standards and Technology,NIST)的"Draft NIST Working Definition of Cloud Computing v13"和"Presentation on Effectively and Securely Using the Cloud Computing Paradigm v22" ●第2章首先描述了Windows Azure 平台的组件、管理托管的应用程序和服务的Azure开发门户和Azure开发平台,它的工具Developer Fabric和Developer Storage在开发人员计算机上模拟云基础服务。然后介绍了Windows Azure SDK和通过Visual Studio的Windows Azure工具添加到VS 2008的模板,还详细介绍了。NET 服务、服务总线、工作流服务和在Azure云部署解决方案。 ●第3章深入探讨了Azure Fabric Controller,它负责处理应用程序/服务的部署、负载均衡、操作系统/数据复制和资源管理。然后继续阐述了物理节点和逻辑节点间的关系,以及它们托管的服务,除此之外,还有如何为新的生产项目创建宿主和客户虚拟机(Virtual Machine,VM)。然后讨论了更新域角色,它支持服务软件更新和为Windows Azure操作系统打补丁,以及用于高可用服务的默认域,随后是构造(fabric)如何在多用户环境下维护个人隐私。该章最后详细介绍了用于Azure的虚拟Windows Server。 ●第4章讲解了如何创建Azure存储账户,叙述了如何使用Fiddler2 Web调试器代理查看HTTP请求和响应消息,分析了示例C# StorageClient类库如何简化对存储的编程,然后深入讲解了使用Azure表和Blob作为WebRole数据源的详细编程技术。源代码包含了部署到云的表(oakleaf.cloudapp.net)和Blob(oakleaf2.cloudapp.net)的示例C#解决方案。 第Ⅱ部分:在企业中利用云服务 第Ⅱ部分展现了通过传输和存储加密的数据、基于云的身份验证和授权技术、改善Azure表的可扩展性并启用其事务,以及使用Azure队列和WorkerRole并行处理计算操作来克服企业级商业应用程序中的问题。 ●第5章首先讨论了加利福尼亚大学伯克利分校的"Above the Clouds: A Berkeley View of Cloud Computing"白皮书中的"Top 10 Obstacles to and Opportunities for Growth of Cloud Computing"、服务级协议(Service-level agreements,SLA)和NIST的IT相关风险定义。除此之外,还有用于云服务开发的联邦代理计划。接下来是需要审计的法规的分析,如《Gramm-Leach-Bliley(GLB)法案》、《Sarbanes-Oxley法案》、《Health Insurance Portability and Accountability 法案》(HIPAA)和《Foreign Corrupt Practices法案》,以及《Payment Card Industry-Data Security Standard标准》 (PCC-DSS)。后面是利用安全套接字层(Secure Sockets Layer,SSL)为WebRole进行传输加密的源代码,以及用于Azure数据服务的TLS以及在Azure存储服务中加密个人信息。该章最后讨论了有关审计与规章和业界标准的一致性。 ●第6章说明了如何利用AspProviders类库和TableStorageMembershipProvider、 TableStorageRoleProvider、TableStorageProfile- Provider及TableStorageSessionProvider类使得ASP.NET用户验证和角色管理适用于Azure WebRoles。该章最后介绍了ASP.NET成员服务与Azure服务相集成的细节。 ●第7章描述了如何选择最适合的PartitionKey和RowKey值,它相当于关系表的复合主键,处理关联(子或父)实体和利用Azure团队在Windows Azure 2009年5月CTP版中介绍的实体组事务。随后给出了一个用ADO.NET数据服务上载同构(父或子实体)和异构(父和子实体)表的性能比较实例。该章最后显示了ASP.NET DataGrid控件中关联的异构父子实体的代码。 ●第8章解释了下载计算服务到一个或多个WorkerRole的益处,并描述了如何使用QueueStorage、 MessageQueue、QueueProperties和 Message类以及MessageReceivedEventHandler代理创建和处理Azure队列。该章还描述了如何增强Thumbnail.shl示例解决方案和当轮询Blob更新时减少网络流量。最后位于oakleaf5.cloudapp.net/的示例项目Photo Gallery Azure Queue Test Harness包含用队列从本地图形文件添加图形Blob的GridView控件。 第Ⅲ部分:使用Azure服务高级技术 第Ⅲ部分介绍了利用Microsoft .NET服务SDK对访问控制服务(Access Control Service,ACS)、。NET 服务总线(Service Bus,SB)和工作流服务(Workflow Services,WF)几种。NET服务成员的编程。 ●第9章描述了ACS作为托管在Windows Azure中的安全令牌服务基础设施验证凭证并发布令牌。该章说明了如何提供和创建一个。NET 服务解决方案,使用Microsoft的FederatedIdentity.net站点来创建联合信息卡凭证,用Geneva Server beta 2为您自己的组织创建信息卡,以及用CardSpace信息卡和ACS为用户进行身份验证和授权。 ●第10章解释了如何使用SB和它的各种信息传递模板,在互联Windows Azure和其他通过网络的应用程序时穿越防火墙和网络地址转换(Network Address Translation,NAT)设备。编程话题包括使用SB传递消息、使服务被Atom 源公开发现,以及使用配置文件来指定WSHttpRelayBinding。 ●第11章解释了在服务总线队列(Service Bus Queues,SBQ)中使用QueueManagement Client类持久化消息和使用服务总线路由器(Service Bus Rouers,SBR)分发消息。在。NET 4发布后会提供该章的在线版本(即第12章和第13章),会通过CheckScoreWorkflow.sln示例项目介绍WF云应用程序结构和。NET服务门户的工作流管理界面页面。 第Ⅳ部分:使用SQL Azure服务 Microsoft SQL Server团队宣布有意用完全关系SQL数据服务(SQL Data Service,SDS),也称为"云中的SQL Server",替换原来的SQL Server数据服务(SQL Server Data Service,SSDS)实现无模式的实体-特性-值(Entity-Attribute-Value,EAV)数据模型,并受2009年7月CTP邀请介绍了SDS。SDS团队在2009年7月早期将SDS的名称改成了SQL Azure 数据库。第一个(2009年8月)SADB CTP对于本书的首次印刷来说有些迟了,不能包含到本书中,所以第Ⅳ部分对应的英文的章节将允许从源代码和工作流的同一位置下载,本书的页面在Wrox的Web站点()上。 从后面关于"源代码和在线章节"的内容中可以得到关于下载示例源代码和这两章的详细内容。 0.8 源代码 读者在阅读本书提供的代码时,既可以亲自输入所有代码,也可以使用随书提供的代码文件。本书所有代码均可以从/或www.tupwk.com.cn/downpage网站下载。进入该网站后,读者可以根据本书的书名查找本书(既可以使用搜索框,也可以使用书名列表进行查找),然后单击本书详细内容页面上提供的Download Code链接,就可以下载本书提供的所有代码。 注意: 由于许多书籍名称与本书类似,读者也可以通过ISBN进行查找,本书的ISBN为:978-0-470-50088-0。 另外,读者可以从前面提到的CodePlex网站下载本书或其他Wrox书籍的代码,也可以从Wrox的代码下载页面和http://www.Tupwk.com.cn/downpage下载本书或其他Wrox书籍的代码。 源代码下载成功后,读者用任一解压工具将其解压即可。 0.9 勘误表 为了避免本书文字和代码中存在错误,我们已经竭尽全力。然而,世界上并不存在完美无缺的事物,所以本书可能仍然存在错误。如果读者在我们编写的某本书籍中发现了诸如拼写错误或代码缺陷等问题,那么请告诉我们,我们对此表示感谢。利用勘误表反馈错误信息,可以为其他读者节省大量时间,同时,我们也能够受益于读者的帮助,这样有助于我们编写出质量更高的专业着作。 如果读者需要参考本书的勘误表,请在网站中用搜索框或书名列表查找本书书名。然后,在本书的详细内容页面上,单击Book Errata链接。在随后显示的页面中,读者可以看到与本书相关的所有勘误信息,这些信息是由读者提交、并由Wrox的编辑们加上的。通过访问/misc-pages/booklist.shtml,读者还可以看到Wrox出版的所有书籍的勘误表。 如果读者没有在Book Errata页面上找到自己发现的错误,那么请转到页面,针对您所发现的每一项错误填写表格,并将表格发给我们,我们将对表格内容进行认真审查,如果确实是我们书中的错误,我们将在该书的Book Errata页面上标明该错误信息,并在该书的后续版本中改正。 0.10 关于网站 如果读者希望能够与作者进行讨论,或希望能够参与到读者的共同讨论中,那么请加入论坛。该论坛是一个基于Web的系统,读者可以在论坛发表与Wrox出版的书籍及相关技术的信息,并与其他读者和技术用户进行讨论。论坛提供了订阅功能,可以将与读者所选定主题相关的新帖子定期发送到读者的电子邮箱。Wrox的作者、编辑、业界专家,以及其他读者都会参与论坛中的讨论。 读者可以在参与多个论坛的讨论,这些论坛不仅能够帮助读者更好地理解本书,还有助于读者更好地开发应用程序。如果读者希望加入论坛,那么请按照以下步骤执行: (1) 进入页面,单击Register链接。 (2) 阅读使用条款,然后单击Agree按钮。 (3) 填写必要的信息及可选信息,然后单击Submit按钮。 (4) 随后读者会收到一封电子邮件,邮件中说明了如何验证账户并完成整个加入过程。 读者无须加入P2P论坛即可阅读论坛消息,但如果需要发表主题或发表回复,那么必须加入论坛。 成功加入论坛后,读者就可以发表新主题了。此时,读者还可以回复其他用户发表的主题。读者在任何时间都可以阅读论坛信息,如果需要论坛将新的信息发送到自己的电子邮箱,那么可以单击论坛列表中论坛名称旁的Subscribe to this Forum图标完成这项功能设置。 如果读者需要获得更多与Wrox P2P相关的信息,请阅读P2P FAQs,这样可以获得大量与P2P和Wrox出版的书籍相关的具体信息。阅读FAQs时,请单击P2P页面上的FAQs链接。