代码改变世界

实战第一个云程序

2010-09-08 05:07  圣殿骑士  阅读(22075)  评论(191编辑  收藏  举报

一. 摘要

  首先圣殿骑士很高兴云计算系列能得到大家的关注和支持,这个系列准备了几个月,终于在今天发布第一篇了(由于文章太长,拆成了两篇,这是其中一篇)。在这几个月中通过不断的使用和实践,对云计算总算有了一个较粗浅的认识,所以也希望能够和大家一起分享。在发布这篇文章之前也考虑了很久,因为一开始就讲概念的话,势必会得不到很好的效果,毕竟大家都不太熟悉这个新事物。与其“人云亦云”还不如先来一个简单的实例,所以我就先选择一个实践应用来看到底云计算能给我们带来什么好处,从开发者角度,随着这个概念的引入,究竟它需要做哪些改变才是我们最关心的问题。

  本篇文章在安排上大致如下:首先回顾前面的基础知识,这样大家就可以有一个大概的认识;接着介绍开发工具,正所谓“工欲善其事,必先利其器”;再接着就是开发第一个简单程序,通过这个简单程序来看一下其开发过程;开发完毕之后就需要部署,在讲部署之前我们必须要有账户来完成此操作,所以紧接着就依次讲解账户申请和部署流程;大家一直在用程序+数据库模式来开发我们的应用,所以接下来我们就讲SQL AZURE和经典的程序+数据库模式,这样大家就可以避免生疏感,从而使理解也变得更加容易一些。通过这篇文章,我们对云计算有了一个较清晰的认识,了解了它究竟是什么、究竟能做什么以及如何做。如果大家清楚了这些问题,也就达到了本篇预期的效果,同时也为系列后面的文章打下了基石,所以希望对大家能有所帮助。

二. 本文提纲

· 1.摘要

· 2.本文提纲

· 3.云计算基础回顾

· 4.开发工具

· 5.第一个简单程序

· 6.账户申请

· 7.部署

· 8.SQL AZURE

· 9.经典的程序+数据库模式

· 10.本文总结

· 11.系列进度

三. 云计算基础回顾

在前面几篇文章中,我们讲了很多概念,那么这里就简单回顾一下(更多细节看前面几篇文章):

一,行业发展趋势

纵观软件行业的发展过程与趋势可以看出一共经历了以下几个阶段:

◆ 面向机器语言(Monolithic)的开发模式:根据不同平台的机器语言来定制化开发代码,所以开发出来的代码通用性和可重用性比较差,但这也是当时和硬件和软件环境决定的。

◆ 面向过程(Procedure)的开发模式:独立于机器的程序语言(如C、Pascal等)使得开发过程逐渐变得简单了,用过程来描述我们的需求、用函数来封装我们的代码。面向过程的开发模式是对可重用代码的封装,这样相对于前面的面向机器语言开发模式又进了一步;

◆面向对象(Object)的开发模式:用更接近现实的对象来描述和绘制一个相对完整的事物。面向对象的语言(C++、C#、Java等),提供了更抽象的封装和重用模式。面向对象的开发强调从现实世界问题直接映射成我们的程序,所以就更接近人类的自然思维方式。面向对象的开发模式是对可重用对象的封装,所以比前面的面向过程开发模式又进了一步;

◆ 面向组件(Component)的开发模式:面向对象在很多方面都改善了开发模式,但是随着软件开发规模的逐渐扩大,在涉及分布式、异步架构等复杂环境中,代码级别的重用性差,可维护性差,效率低的弱点就变得尤为突出,因此人们以架构运行环境 (如.Net,J2ee等)来提供完善的支撑平台,从而把开发者解放出来,更专注于业务核心的开发。而这些业务功能以组件的形式(如DCOM, EJB等)发布运行在架构运行环境中。软件开发的重用模式也上升到业务组件的级别。面向组件的开发模式在异步架构、分布式等的系统中应用尤为突出,这种模式对面向对象开发模式进行了很好的补充;

◆ 面向服务(SOA)的开发模式:当软件的使用范围扩展到更广阔的范围,往往会面对更加复杂的IT环境和更加灵活多变的需求。服务(Service)的概念出现了,人们将应用 (Application)以业务服务(Business Service)的形式公布出来供别人使用,而完全不需要去考虑这些业务服务运行在哪一个架构体系上,因为所有的服务都讲着同样的语言。SOA考虑了业务发展的长期性,体现了"变化就是永恒"的思想。SOA的核心体现在企业应用或者业务功能上的"重用"和"互操作",而不再把IT与业务对立起来,这可以被视为在IT驱动业务的方向上迈出的重要一步。面向服务的开发模式是为了支持更加灵活的异构、分布式系统;

◆ 面向云(Cloud)的开发模式:其实利用前面的几种开发模式就可以解决当前各种应用了,但人们总是考虑对资源进行重组已达到对资源的最佳使用。这个时候云计算就诞生了。云计算(Cloud Computing)是网格计算、分布式计算、并行计算、网络存储、虚拟化、负载均衡等传统计算机技术和网络技术发展融合的产物。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。简单的说云计算简化了我们的基础架构且给企业提供了更大的可配置性和灵活性。在原有模式下如果构建一个小型的应用,你需要租用服务器、你需要考虑租用服务器的安全和稳定因素等。如果构建一个中大型的应用,我们需要花巨资购买硬件来集群,然后是巨额资金购买所需的系统软件而且这些也需要一些人员来维护。现在云能提供我们程序所需的硬件设备和软件设备,你所做的只是按照你的需要租用这些已有的资源,上传你的程序和修改配置文件,就可以灵活扩展或收缩你占用资源,这样就可以达到合理利用资源的目的,同时也减轻了维护这些软硬件的成本。

那么上面的几个阶段也可以简单的总结为三个发展趋势,这也是现在云计算体现的三大特点:

◆ 软件即服务(SaaS——Software as a Service)一种软件分配模式,使应用程序由供应商或服务供应商托管起来,并通过网络提供给用户。

◆ 平台即服务(PaaS——Platform as a Service)一种平台分配模式,通过网络提供操作系统和相关服务,这样客户就无需下载或安装。

◆ 基础设施即服务(IaaS——Infrastructure as a Service)一种基础设施分配模式,把这些基础设施通过外包的形式提供出来,其中包括存储、硬件设备、服务器和网络组件等。

二,云计算的优势和劣势

  任何一件事物都有利弊之分,云计算更不例外了,所以我们不能对它一概而论,只有充分的认识到这些优势和劣势之后才能更好的做出决断。也许你可以称它是一场比WEB 2.0还要巨大的革命;也许你也可以称它和当初AJAX一样,属概念炒作、新瓶装旧酒;不管如何,没有深入虎穴焉得虎子,那么下面我们就具体分析一下它到底有哪些优势和劣势。

优势或值得应用的方面:

1.能快速搭建我们的应用

  云计算最大的好处就是能够快速搭建我们的企业应用,比如我们现在要开发一个网站,我们就不必担心是否需要花巨资购买硬件来集群,然后是巨额资金购买所需的系统软件而且这些也需要一些人员来组建和维护的,如果恰巧这是一个比较新且可能会带来盈利的商业点子,那搭建在云上就是一个非常不错的选择,这起码能比其他企业先行一步。

2.提供了更大的灵活性和扩展性

  由于“云”的规模可以动态伸缩,这样就可以不用加大投资硬件设备的力度来满足应用和用户规模增长的需要,同时也无形起到了降低成本的作用。如果项目突然废弃,也没有什么大的损失,所以在这方面,云计算是相当灵活和易于扩展的。

3.可以解决一些特殊的场景

  很多公司都是在特定的时期盈利较大,比如一些情人节和圣诞节的帮办公司,它们就是在这段时间的营业额比较大,在一年中的其他时候,几乎不能盈利,在这种情况下,如果按照传统的软件部署习惯,势必会造成一定的浪费。正如一个有大量波峰和波谷的企业一样,你可能就被迫要将更多的IT资源分配给峰值时期使用。这种情况下将峰值需求外包可能会节约更多成本。

4.缩短了产品的开发周期

  不管你是使用哪个厂商的云计算产品.都有一个显著的特点,那就是能缩短产品的开发周期,一个想法到一个产品的开发周期因为云计算的到来而逐渐缩短,由此你可以看出里面蕴藏的巨大价值。云计算确实已经开始影响到我们做业务的方式。我们开始减少研究的循环周期,这对于我们来说非常重要而且必要。

5.节约了建立基础设施的成本

  其实对于每个企业来说基础设施都是一笔开支比较大的费用,而且除了费用之外还需要专门的人力和物力的投入,在这个过程中又要保持快速的软硬件更新速度来适应市场的不断变化,所以云计算的出现无疑是值得考虑的一种解决方案。很多时候,我们也会时常注意到数据中心使用面积不够、应用软件超出基础架构的承受能力、软硬件更新太快等问题,云计算服务能帮助企业将资本转移到运营费用上,尤其是在生死攸关的关键时刻,所以在这方面来说,是值得考虑的。

劣势或需要改进的方面:

1.数据安全性

  对数据安全性方面看,目前比较热的云计算厂商亚马逊、谷歌、IBM、微软、甲骨文、思科、惠普、Salesforce、VMware等都没有完全解决这个问题,所以很多企业了解到所用数据的类型和分类后,他们还是会决定通过内部监管来控制这些数据。而绝不会将具备竞争优势或包含用户敏感信息的应用软件放在公共云上,这个也是众多企业保持观望的一个原因。

2.厂商按流量收费有时会超出预算

  虽然云厂商推出云产品时大力宣传随时获取,按需使用,随时扩展,按使用付费,但是在很大程度上价格都比较高,至少在目前还没有降低的趋势,这样对某些企业就会起到相反的效果,比如说像索尼娱乐这样的公司,他们就不考虑采用外部云服务来应对存储扩展能力的挑战。位于加利福尼亚的Culver City的高级系统工程师Nick Bali表示。每天索尼动画访问和产生的数据量都在4千兆到12千兆之间。Bali解释说"如果放在云上进行数据读取的话,我们需要的网络带宽是非常庞大的,这样所需的成本过于巨大,甚至超过了购买存储本身的费用。目前索尼公司正在使用ParaScale的云存储软件评估私人存储云。所以从这点看出并不是云平台就一定便宜。

3.企业的自主权降低

  其实关于企业自主权这个问题是一个比较争议的话题,也许这也是出于慎重的考虑,毕竟对自己公司的应用,大家都希望能完全管理和控制,原来的模式中,可以搭建自己的基础架构,每层应用都可以自定义的设置和管理;而换到云平台以后,企业不需要担心基础架构,也不需要担心诸如安全、容错等方面,好处是一个方面,但同时也让企业感到了担忧,毕竟现在熟悉的东西突然变成了一个黑盒。当然在这个时候众厂商也推出了内部云或者云套件来补救,但是这个问题也没得到根本解决。

4.规模大且成型的企业难以扩展

  很多大型企业已经花了巨资来购买硬件并逐渐构建了自己的服务器集群(有的企业还大量购置了最新的刀片服务器),然后也购买了所需的系统软件和应用软件,而且也在此基础上搭建了基础平台架构。那么针对这样的企业来说,他们没有必要把自己的应用舍本求末的放在云上,所以这个也是很多企业不愿意移植的原因之一。

5.云计算本身还不太成熟

  尽管众云计算厂商把云计算炒得大红大紫,每个厂商推出的云产品和云套件也是琳琅满目、层出不穷,但是他们都各自为战,没有有统一的平台和标准来规范。所以冷静下来想一想,到底它能不能为我们企业所用,在安全性、稳定性和企业本身因素方面必须尽管慎重的考虑才行,不要被眼前的广告所忽悠。你要知道每个企业要宣传自己的产品都会采取各种手段的,比如说到公共云不安全,厂商就开始推私有云;说到企业原有应用难以整合到云上,厂商马上就推出了混合云;但是在根本上云计算还有很长的路要走,很多地方都得优化。当然我们也愿意在这个过程中充当试金石,因为体验它之后,我们相信它必定会成为未来的趋势。

三,目前的现状

  了解了云计算的基本概念以后,接下来要做的就是如何选择合适的云供应商,毕竟我们不是亚马逊、Google、微软、阿里巴巴、浪潮等专注于云计算研发的企业,所以如果我们使用云计算,必须得选择一个合适的云厂商来为我们服务。

cloudcompany

                                         图1

  上面的图中包含了前期的几家云计算厂家,其实总体来说现在云计算厂商可谓星罗棋布,不光是国外的亚马逊、谷歌、IBM、微软、甲骨文、思科、惠普、Salesforce、VMware等大型企业,还包括国内的阿里巴巴、中移动、浪潮等也加入到了这个竞技场。

四,微软的云平台

  虽然我们不能亲自开发一个云平台,但是我们可以使用并体验云平台给我们带来的好处,在这个过程中我们也可以通过具体使用、深入分析、再次使用、回归总结的方式来逐步深化我们的认知程度,这样循环往复以后就从中获得预期的收益。我们这个系列目前主要研究微软的云平台——Windows Azure Platform,它是微软完整的云计算平台,目前包含了如下三大部分(详细介绍见云计算之旅4—Windows Azure总览 ):

WindowsAzure

                                        图2

 
◆Windows Azure:运行在云中的操作系统,对于用户来说是虚拟且透明的,其中提供了Compute(计算),Storage(存储),以及Manage(管理)这三个主要功能及其底层服务,使用起来相当的便捷。
◆SQL Azure:运行于云中的一个关系数据库,和SQL Server 2008类似,但是在功能上还没有那么强大。
◆AppFabric:全名是Windows Azure platform AppFabric,提供了访问控制、服务总线等服务,主要用于把基础应用连接到云中。

四. 开发工具

  俗话说“工欲善其事,必先利其器”。我们在开发一个任何一个程序之前都需要了解开发它的工具,使用了开发工具之后总能起到事半功倍的效果,这一点是无需置疑的,毕竟命令行、汇编、记事本的方式是需要大量的时间和精力,而且调试和异常跟踪等也极为困难。针对微软的windows azure的开发工具很简单,我们在安装了VS2008或VS2010、SQL Server 2005/2008/2008 R2后,再安装一个扩展的工具包就可以进行云应用的开发了,这个扩展工具包是:Windows Azure Tools for Microsoft Visual Studio 1.2 (里面包含Windows Azure SDK和Visual Studio集成),其下载的地址是:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2274a0a8-5d37-4eac-b50a-e197dc340f6f&displaylang=en

这个版本是2010年6月发布,其中包括Windows Azure Tools + SDK,所以安装了它以后就不需要再安装其他的软件了,其中功能包括:

◆新特性支持:对Visual Studio 2010 RTM的完全支持,这样我们就可以使用最新的模板和强大的新特性。
◆多版本支持:.NET 4 的支持使得开发者构建服务时具有选择.NET 2.0、.NET 3.0、.NET 3.5 或者 .NET 4 框架的灵活性。
◆应用可视化:通过在Visual Studio Server Explorer中显示Windows Azure table 和blob容器的只读视图,我们可以用视图的方式预览我们所创建的应用。 Cloud storage explorer也使得开发者能更轻松的构建出更优秀的服务。
◆整合部署:开发者只需在Visual Studio Solution Explorer中选择"Publish"便能直接部署服务,这个在1.1版本也提供了。
◆服务监控:帮助开发者通过在Server Explorer中的'compute'节点来追踪和管理其服务状态。
◆调试简便:IntelliTrace 支持运行于云端的服务,简化了对于云端服务的调试。

  其实使用VS 2008 和VS2010开发云程序的过程没有本质上的区别,主要是VS 2010提供了云应用的开发、调试、部署、管理的整套工具,如开发云计算程序模式、开发云计算的项目模板、离线测试云计算项目、云计算部署等等功能的支持,这些功能都缩短了云应用的开发周期,在很大程度上提高了开发效率,因此我们在很多时候会使用VS 2010来开发云应用,当然为了照顾部分使用VS 2008的朋友,我们也会尽量提供两个版本。

五. 第一个简单程序

步骤一:创建云项目

   正所谓“千里之行始于足下”。安装了开发工具之后,我们就来创建第一个应用程序,由于我安装的是windows 7操作系统,所以用管理员权限打开Visual Studio 2008,如果是XP等操作系统,直接运行Visual Studio 2008即可,因为之前我们已经安装了Windows Azure Tools for Microsoft Visual Studio 1.2,所以你就会看到下图模板中多了一个Cloud的选项(图中标记1),点击Cloud选项,选择Windows Azure Cloud Service模板(图中标记2),命名项目为FirstCloudApp,点击OK按钮创建我们的项目:

1

                                        图3

  在弹出窗口出现后,按照下图所示,分别点击标签1的ASP.NET Web Role和标签2的“>”按钮。该步骤会在右边窗口中生成一个新的WebRole项,此时你可以点击标签4的笔形图标,然后改变该Web Role名字,同时你也可以点击标签5的小叉删除新建的项,操作完之后点击OK按钮即可。

2

                                        图4

步骤二:观察生成的云项目

 项目结构如下图所示:

Untitled5

                                        图5

  由项目结构图我们可以看到云项目和普通的ASP.Net项目的差别,ASP.Net Web Role云项目会产生一个云应用的项目和一个ASP.Net的项目,云应用项目对ASP.Net项目进行引用,同时云应用项目中还包含服务程序文件和服务配置文件,这两个文件在配置、运行和部署云应用时将要用到,没有这两个文件,也就没有我们的云程序。大家也可以通过这些配置文件来具体定制化我们的应用,在下一次课程中,我们也会详细讲解这个程序文件的内部原理以及注意事项。

编辑Default.aspx页面,添加一些简单的测试信息,代码如:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
<
title></title>
</
head>
<
body>
<
form id="form1" runat="server">
<
div>
<
div>
<
img alt="" src="2010-8-22%2011-55-50.png" style="width: 314px; height: 155px" /><br />
</
div>
<
div style="font-size: x-large; color: #FF0000">
圣殿骑士已经在云上了!!!</div>
</
div>
</
form>
</
body>
</
html>

步骤三:解决运行错误问题

按F5键开始调试程序。由于没有安装SQL Server Express,所以会看到下图所示的错误信息

err1

                                        图6

  那么我们可以使用VS 2010的安装文件添加安装来解决这个问题,同时你也可以通过命令行的方式来解决,在开始菜单中点击Windows Azure SDK Command Prompt进入命令行窗口,如下图:

Untitled1 

                                        图7

在如下的命令行窗口输入DSInti /sqlInstance:.(意思是:“DSInit /sqlinstance:你的sql instance名字”,我们这里本机,所以是.)

err3 (2)

                                        图8

然后点击下面的OK按钮,重新运行程序即可。

err3 (1)

                                        图9

步骤四:再次运行程序,得到正确结果

  再次运行程序,你将会看到下面的页面,这表示你创建的windows azure的程序可以正常运行并得到了你想要的结果,如果你比较细心,你会发现它是借用本地的IIS来Host的,地址是:http://127.0.01:81/Default.aspx

4

                                        图10

经过上面的步骤,我们已经创建了第一个云程序,接下来要做的就是部署到所谓的云上面去了。

步骤五:观察本地云模拟器

如果你足够细心的话,会发现任务栏里多了一个程序的图标,见下图1标记:

Untitled2

                                        图11

  这个就是dev Fabric和dev Storage的管理器。也就是传说中的云端模拟器,这个模拟器可以让我们在本地测试自己的程序是否能够在Windows Azure Platform上正常运行。一般情况下如果在本地测试通过的程序,上传到Windows Azure Platform上就可以正常运行,但是也有一些特殊的情况,我们在后面会讲到。点击上图的2标记,就进入下图的dev Fabric管理器:

Untitled3

                                        图12

从上图的dev Fabric管理器可以看到我们当前运行的程序以及执行的状态,这个可以帮助我们进行跟踪和调试。

  点击图11的3标记,就进入下图的dev Storage管理器,Windows Azure为应用程序提供了Blobs,Tables和Queues三种存储机制,你可以在这个界面来开启或者关闭某种存储机制。

Untitled4

                                        图13

对于上面这些功能,我们在这篇不会做过多的探讨,以后会在专门的文章中做详细介绍。

六. 账户申请

在部署之前,我们先要有一个账户,如果没有账户需要从http://www.microsoft.com/windowsazure/offers/这里进行注册购买,具体如下页面

2010-9-2 17-48-09

                                        图14

购买了并激活以后就可以通过https://windows.azure.com/Cloud/Provisioning/Default.aspx登陆

2010-9-2 17-58-06

                                        图15

登陆成功以后,你会看到如下的主界面,在这个界面里面,你可以创建、管理你的Windows Azure、SQL Azure和AppFabric。

8 

                                        图16

七. 部署

步骤一:发布项目

  开发完一个应用程序并在本地完成测试之后,就可以部署到云上去了,我们在Visual Studio的Solution Explorer窗口中,右击FirstCloudApp项目,点击Publish选项,如下图:

5 

                                        图17

  这里有两个选择方案发布你的项目,第一就是创建云程序包,手动上传;第二就是设置信息自动上传。由于下篇我们会分析其内部的原理,所以我们这里就选择第一种方式,如下图:

6

                                        图18

点击OK按钮,等待Visual Studio创建压缩包并自动弹出压缩包的窗口。压缩包和配置文件如下图:

7

                                        图19

步骤二:Windows Azure管理站点

  前面我们输入了Live ID和密码登陆到了Windows Azure管理站点,大家看到该网页列出了我们能够使用的Windows Azure服务,当然由于购买的服务不同,您的项目数量也会有所不同,这里我们需要创建一个服务来Host我们的程序。你可以点击下图标记1或者标记2来创建我们的服务:

8

                                        图20

步骤三:创建Hosted Services

由于是第一次部署,我们需要先创建一个新的Hosted Services来Host我们的程序。点击New Service链接:

9 

                                        图21

弹出如下页面,填入Hosted Services的标签名并输入该Hosted Services的描述,然后点击Next按钮:

10

                                        图22

  输入你想要的域名,然后点击Check Availability按钮检查该域名是否可用,接下来就是设置服务器的地理位置,由于我现在处在新加坡,所以选择东南亚,如果在中国大陆,则可以选择东亚。最后点击Create按钮完成创建:

11

                                        图23

步骤四:上传并部署程序

  现在Hosted Services已经创建完成。我们能够在网页上看到我们刚刚创建的Hosted Service,如下图,标记1可以修改程序的描述。标记2可以删除我们刚才创建的服务。标记3和4则是我们刚创建服务的两个环境,windows azure在这方面做得很人性化,提供了Staging和Production两个环境来部署我们的应用,这个就和我们实际的项目流程比较类似了,也给我们提供了更大的灵活性。标记5则给我们提供了一个很重要的功能,你可以通过证书来保护你的应用程序。

12

                                        图24

  点击上图Staging的Deploy按钮弹出如下页面。选择在步骤一中生成的两个文件然后上传。在Application Package一栏中输入.cspkg文件路径。在Configuration Settings一栏中输入.cscfg文件路径。点击Deploy:

13

                                        图25

步骤五:启动并测试程序

点击Deploy按钮之后,看到如下页面,然后等待一段比较长的时间(时间根据你项目大小而定):

14

                                        图26

直到出现下面的界面,你会看到当前的状态为Stopped,这个时候点击Run按钮

15

                                        图27

你会看到状态由Stopped逐渐变为Initializing、Busy和Ready,当状态变为Ready后,点击下面的Web Site URL链接就可以看到我们刚才修改的网页了。

16

                                        图28

  经过刚才Staging环境测试之后,我们就可以点击上图中间的转换按钮,这个时候Staging环境中的应用程序就会上传到Production环境,然后经过前面Staging相同操作,就可以见到如下图所示界面

17

                                        图29

当发现WebRole1的状态为Ready时,我们的Web Role项目就已经成功运行了。见下图:

19

                                        图30

然后点击Web Site URL链接,这个时候就可以看到我们期待的页面了。

18

                                        图31

到此为止我们已经成功地把第一个云程序发布到云端了!现在任何能够访问Internet的机器都可以通过http://firstcloudapplication.cloudapp.net/进行访问。

八. SQL AZURE

  在浏览器输入https://windows.azure.com/Cloud/Provisioning/Default.aspx,打开页面然后输入了Live ID和密码登陆到了Windows Azure管理站点(如图32所示),前面我们创建了一个服务来Host我们的程序,这里我们要介绍另外一个功能——SQL AZURE,点击页面的SQL AZURE链接

8

                                        图32

进入如图33所示的页面,可以看到当前的所有数据库和所有操作按钮,那么我们就简单对它们进行一些介绍:

标签1中的Reset Password按钮可以修改登陆密码;

标签2中的Drop Server按钮是删除当前SQL AZURE服务;

标签3中的Databases则是显示所有的数据库信息,其中包括数据库名、当前大小、最大容量、版本(Web版本有1G和5G两个容量可供选择,Business版本支持10G、20G、30G、40G乃至50G的大容量存储);

标签4中的Firewall Settings是一个比较重要的功能,可以通过设置具体可由哪些IP访问,即相当于简单防火墙的功能。

标签5中的Connection Strings按钮是程序链接字符串的信息,通过它可以获取程序使用什么样的字符串来访问数据库,一共有ADO.NET和ODBC两种方式。

标签6中的Test Connectivity按钮这个功能可以测试刚才我们创建的数据库是否连接正常。

标签7中的Create Database按钮则是我们最常用的功能,使用它来创建我们的数据库。

标签8中的Drop Database按钮删除当前选择的数据库。

20

                                        图33

  点击图33标签7中的Create Database按钮打开图34所示的界面,我们输入要创建的数据库名FirstCloudDB,选择版本类型,然后选择容量大小之后点击Create按钮即可完成创建工作。

21

                                        图34

  点击图33标签5中的Connection Strings按钮打开如图35所示界面,因为我们要在程序或者SQL Server Management Studio R2中使用到链接字符串,所以在使用的时候需要从这里查看或者拷贝。

22

                                        图35

  点击图33标签6中的Test Connectivity按钮,这个功能可以测试刚才我们创建的数据库是否连接正常,输入Username和Password,然后点击Connect按钮,就可以测试连接是否成功。

23

                                        图36

  点击图33标签4中的Firewall Settings,打开如图图37所示的界面,我们知道这是一个比较重要的功能,可以通过设置具体可由哪些IP访问,即相当于简单防火墙的功能。我们先把本机加入到Firewall Settings里面,这样就可以通过本机的程序或者SQL Server Management Studio R2操作数据了。

24

                                        图37

当设置了Firewall Settings以后就可以通过管理工具或者程序进行连接了。

  在讲下面的内容之前,你首先得安装SQL Server R2版本的数据库,具体下载地址:http://msdn.microsoft.com/en-us/subscriptions/default.aspx

安装完成之后,我们就可以使用SQL Server Management Studio R2登陆SQL AZURE了,打开SQL Server Management Studio R2,如图38所示

25

                                        图38

  登陆成功以后进入如图39所示的SQL Server Management Studio R2主界面,这个版本和其他版本基本一致,我也不做过多介绍,后面讲SQL AZURE会专门进行探讨。

2010-9-6 15-28-28

                                        图39

九. 经典的程序+数据库模式

  前面用了较大篇幅介绍了Windows Azure和SQL AZURE的基本使用,那么这里就用一个简单的实例来看一下经典的程序+数据库模式在azure中有哪些改变,首先打开SQL Server Management Studio,登陆到SQL AZURE数据库,通过如下语句建立所需的表和插入所需的数据(如图40所示)。

26

                                        图40

创建了数据库以后,然后我们打开前面创建的FirstCloudApp程序,在Default.aspx页面放置一个Label 控件,这个控件用来呈现从数据库返回的数据

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
<
title></title>
</
head>
<
body>
<
form id="form1" runat="server">
<
div>
<
div>
<
img alt="" src="2010-8-22%2011-55-50.png" style="width: 314px; height: 155px" /><br />
</
div>
<
div style="font-size: x-large; color: #FF0000">
圣殿骑士已经在云上了!!!</div>
<
div style="font-size: x-large; color: #FF0000">
从SQL AZURE读取的数据:<asp:Label ID="lblSqlAzure" runat="server" Text="Label"></asp:Label>
</
div>
</
div>
</
form>
</
body>
</
html>

  在Default.aspx.cs页面写一段简单读取数据库数据的代码,为了能够简单的展示,我没有对其进行分装,也没有引入任何修饰代码,这样大家可以更好的理解一些,如果大家看不惯这些代码,也敬请见谅,后面文章会讲解我们自己开发的ORM框架,AOP对日志、异常、特定植入代码的处理,IOC对框架和组件解耦的支持以及常用设计模式和SOA service bus等的引入。

namespace WebRole1
{
public partial class _Default : System.Web.UI.Page
{
private const string DBNAME_STRING = "FirstCloudDB";
private const string CONNECTION_STRING = "Server=tcp:kd9vhdfdfw.database.windows.net;Database=" + DBNAME_STRING + ";User ID=KnightsWarrior@kd9vhjwe8w;Password=Ncs@135456;Trusted_Connection=False;Encrypt=False"; // On Azure.
private const string SELECT_STRING = "SELECT [message] FROM [FirstCloudDB].[dbo].[tTest]";

protected void Page_Load(object sender, EventArgs e)
{
this.lblSqlAzure.Text = GetResult(SELECT_STRING).ToString();
}

public static object GetResult(string SQLString)
{
using (SqlConnection connection = new SqlConnection(CONNECTION_STRING))
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
{
try
{
connection.Open();
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw new Exception(e.Message);
}
}
}
}
}
}

  编码完了以后就可以在本地测试了,测试通过以后发布我们的程序(这个和前面操作类似,所以简单略过)。由于之前我们已经部署了开发的程序,这个时候只需要更新以前的服务就行。

27

                                        图41

点击图41中所示的Upgrade按钮,弹出如下页面:

28

                                        图42

  在图42标签1中选择更新类型;在图42标签2中选择程序包;在图42标签3中选择配置文件包;在图42标签4中设置操作系统,一般我们采用默认配置;在图42标签5中填入此次发布的Label,表明发布编号;在图42标签6中可以设置是全部更新还是特定更新;最后点击图42标签7的Deploy按钮。

19

                                        图43

然后点击图43中的Web Site URL的链接http://firstcloudapplication.cloudapp.net/,发现刚才开发的程序已经成功的部署在云上了。

29 

                                        图44

  现在任何能够访问Internet的机器都可以通过http://firstcloudapplication.cloudapp.net/进行访问,至此我们就讲完了最基本的开发模式,也为下面深入的探讨打下了基础。

十. 本文总结

  这篇文章讲的概念也不是很多,但是作为基础篇,也希望大家能引起注意,因为没有它,我们后面的文章也无从谈起。通过这篇文章,我们必须要对云有一个感性和理性的认识。最重要的是要认清它究竟给我们带来了哪些改变,当然今天的例子也只是云计算的冰山一角,但是我们要养成思考的习惯,比如在此前的传统做法中,对于一个中小型网站,如果部署的话,我们会租用服务器来托管我们的应用。对于较大型且企业想自己主导的网站,我们可以自己购置服务器,然后对服务器集群,做好分布式和负载均衡。现在引入云计算之后,我们开发完一个网站之后就可以直接把它部署到云上,这样就可以不用考虑负载均衡等问题,当然为了实现这个还要做很多配置,我们后面会详细介绍,这样做了以后大大提高了此应用的灵活性和扩展性,同时也减少了基础架构的成本和负担,更为重要的是它能按需使用,这给一些时令和节假日企业也带来了福音。对于安全性以及大型应用没有在此篇讨论的范畴,后面会逐渐涉及。

今天的例子过于浅显,但是千万不要把云计算等同于虚拟机或空间租用商,这样就太暴殄天物了,除了具有Host网站的功能外,还有一些常见的功能,如:
1. 可以把应用程序放上去执行,这样就相当于运行在操作系统中,并且结合SQL AZURE速度是非常快的,对于某些大数据量的处理是相当有利的。
2. 把云存储作为缓存来使用,这样就可以使速度加快,这样用户也更容易接受。
3. 默认提供了标准的Event Streams来记录日志和发出警告等
4. 你可以根据程序的健康报告来查看运行状况,原来我们会实现一套机制
5. 安全虽然现在做得还是不太健全,但是可以通过数字证书来防止篡改,同时也可以利用加密解密技术。你要相信厂商也在逐渐完善。
6. 对大型的分布式项目,可以通过设置AppFabric来实现负载均衡,这在原来使要做很多工作的。
7. 之前的SSB和MSMQ等消息队列可以很简单的用Quee来实现,这样可以简化很多操作,也避免了常见错误的出现。
8. 对于一个很有想法但没有强大基础设施的公司,如果选择云计算可以很容易实现他们的应用。
当然还有很多,我就不一一列举了,我也不是想夸云计算有多好,后面的文章也会详细介绍,其实云计算确实给我们提供了很多便捷,在后面的文章中我们通过具体应用来看一下到底它是不是适合于我们的项目,所以也请大家拭目以待,诚然,由于自己知识浅薄,如果不正确的地方,也请大家海涵,最重要的还是相互交流、共同提高!

十一.系列进度

云计算之旅1—开篇有益

云计算之旅2—云计算总览

云计算之旅3—云计算提供商综合对比

云计算之旅4—Windows Azure总览

云计算之旅5—实战第一个云程序

云计算之旅6—剖析Windows Azure程序内部原理

云计算之旅7—ASP.NET Web Role  

云计算之旅8—ASP.NET MVC Web Role  

云计算之旅9—WCF Service Web Role  

云计算之旅10—Work Role   

云计算之旅11—CGI Web Role 

云计算之旅12—云存储之Blob基础及实例

云计算之旅13—云存储之Table基础及实例

云计算之旅14—云存储之Quee基础及实例

云计算之旅15—云存储之Dive基础及实例

云计算之旅16—SQL Azure 之一(基础介绍)

云计算之旅17—SQL Azure之一(应用及RDBMS支持)

云计算之旅18—SQL Azure之三(安全、工具及应用)

云计算之旅19—AppFabric之一(基础介绍)

云计算之旅20—AppFabric之二(Service Bus及应用)

云计算之旅21—AppFabric之三(Access Control Service及应用)

云计算之旅22—云平台安全问题

云计算之旅23—老技术兼容问题

云计算之旅24—ASP.NET+SQL项目移植到云平台

云计算之旅25—WinForm/WPF项目移植到云平台(云/端模式)

云计算之旅26—ASP.NET+Silverlight项目移植到云平台

云计算之旅27—Amazon云计算

云计算之旅28—Google云计算

云计算之旅29—SalesForce云计算

云计算之旅30—云计算开发总结

代码下载:FirstCloudApp     配套视频敬请关注MSDN Webcast官方网站,到时会逐渐更新上去,可能讲得不好,也敬请见谅!

另外新建了一个云计算专区(地址:http://home.cnblogs.com/group/CloudComputing/),大家有什么相关的疑问或话题也可以在里面进行探讨,同时也希望各位推选一位组长来带领大家共同学习,本人自认才疏学浅,无力胜任,所以欢迎广大爱好者踊跃加入,我们也有理由相信云计算一定会带来一场软件行业的变革!