一. 摘要首先圣殿骑士很高兴云计算系列能得到大家的关注和支持,这个系列准备了几个月,终于在今天发布第一篇了(由于文章太长,拆成了两篇,这是其中一篇)。在这几个月中通过不断的使用和实践,对云计算总算有了一个较粗浅的认识,所以也希望能够和大家一起分享。在发布这篇文章之前也考虑了很久,因为一开始就讲概念的话,势必会得不到很好的效果,毕竟大家都不太熟悉这个新事物。与其“人云亦云”还不如先来一个简单的实例,所以我就先选择一个实践应用来看到底云计算能给我们带来什么好处,从开发者角度,随着这个概念的引入,究竟它需要做哪些改变才是我们最关心的问题。 本篇文章在安排上大致如下:首先回顾前面的基础知识,这样大家就可以有一个大概的认识;接着介绍开发工具,正所谓“工欲善其事,必先利其器”;再接着就是开发第一个简单程序,通过这个简单程序来看一下其开发过程;开发完毕之后就需要部署,在讲部署之前我们必须要有账户来完成此操作,所以紧接着就依次讲解账户申请和部署流程;大家一直在用程序+数据库模式来开发我们的应用,所以接下来我们就讲SQL AZURE和经典的程序+数据库模式,这样大家就可以避免生疏感,从而使理解也变得更加容易一些。通过这篇文章,我们对云计算有了一个较清晰的认识,了解了它究竟是什么、究竟能做什么以及如何做。如果大家清楚了这些问题,也就达到了本篇预期的效果,同时也为系列后面的文章打下了基石,所以希望对大家能有所帮助。 二. 本文提纲
三. 云计算基础回顾在前面几篇文章中,我们讲了很多概念,那么这里就简单回顾一下(更多细节看前面几篇文章): 一,行业发展趋势纵观软件行业的发展过程与趋势可以看出一共经历了以下几个阶段:
那么上面的几个阶段也可以简单的总结为三个发展趋势,这也是现在云计算体现的三大特点:
二,云计算的优势和劣势任何一件事物都有利弊之分,云计算更不例外了,所以我们不能对它一概而论,只有充分的认识到这些优势和劣势之后才能更好的做出决断。也许你可以称它是一场比WEB 2.0还要巨大的革命;也许你也可以称它和当初AJAX一样,属概念炒作、新瓶装旧酒;不管如何,没有深入虎穴焉得虎子,那么下面我们就具体分析一下它到底有哪些优势和劣势。 优势或值得应用的方面:
劣势或需要改进的方面:
三,目前的现状了解了云计算的基本概念以后,接下来要做的就是如何选择合适的云供应商,毕竟我们不是亚马逊、Google、微软、阿里巴巴、浪潮等专注于云计算研发的企业,所以如果我们使用云计算,必须得选择一个合适的云厂商来为我们服务。 图1 上面的图中包含了前期的几家云计算厂家,其实总体来说现在云计算厂商可谓星罗棋布,不光是国外的亚马逊、谷歌、IBM、微软、甲骨文、思科、惠普、Salesforce、VMware等大型企业,还包括国内的阿里巴巴、中移动、浪潮等也加入到了这个竞技场。 四,微软的云平台虽然我们不能亲自开发一个云平台,但是我们可以使用并体验云平台给我们带来的好处,在这个过程中我们也可以通过具体使用、深入分析、再次使用、回归总结的方式来逐步深化我们的认知程度,这样循环往复以后就从中获得预期的收益。我们这个系列目前主要研究微软的云平台——Windows Azure Platform,它是微软完整的云计算平台,目前包含了如下三大部分(详细介绍见云计算之旅4—Windows Azure总览 ): 图2 四. 开发工具 俗话说“工欲善其事,必先利其器”。我们在开发一个任何一个程序之前都需要了解开发它的工具,使用了开发工具之后总能起到事半功倍的效果,这一点是无需置疑的,毕竟命令行、汇编、记事本的方式是需要大量的时间和精力,而且调试和异常跟踪等也极为困难。针对微软的windows azure的开发工具很简单,我们在安装了VS2008或VS2010、SQL Server 2005/2008/2008 R2后,再安装一个扩展的工具包就可以进行云应用的开发了,这个扩展工具包是:Windows Azure Tools for Microsoft Visual Studio 1.2 (里面包含Windows Azure SDK和Visual Studio集成),其下载的地址是: 这个版本是2010年6月发布,其中包括Windows Azure Tools + SDK,所以安装了它以后就不需要再安装其他的软件了,其中功能包括:
其实使用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按钮创建我们的项目: 图3 在弹出窗口出现后,按照下图所示,分别点击标签1的ASP.NET Web Role和标签2的“>”按钮。该步骤会在右边窗口中生成一个新的WebRole项,此时你可以点击标签4的笔形图标,然后改变该Web Role名字,同时你也可以点击标签5的小叉删除新建的项,操作完之后点击OK按钮即可。 图4 步骤二:观察生成的云项目项目结构如下图所示: 图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" %> 步骤三:解决运行错误问题按F5键开始调试程序。由于没有安装SQL Server Express,所以会看到下图所示的错误信息 图6 那么我们可以使用VS 2010的安装文件添加安装来解决这个问题,同时你也可以通过命令行的方式来解决,在开始菜单中点击Windows Azure SDK Command Prompt进入命令行窗口,如下图: 图7 在如下的命令行窗口输入DSInti /sqlInstance:.(意思是:“DSInit /sqlinstance:你的sql instance名字”,我们这里本机,所以是.) 图8 然后点击下面的OK按钮,重新运行程序即可。 图9 步骤四:再次运行程序,得到正确结果再次运行程序,你将会看到下面的页面,这表示你创建的windows azure的程序可以正常运行并得到了你想要的结果,如果你比较细心,你会发现它是借用本地的IIS来Host的,地址是:http://127.0.0.1:81/Default.aspx: 图10 经过上面的步骤,我们已经创建了第一个云程序,接下来要做的就是部署到所谓的云上面去了。 步骤五:观察本地云模拟器如果你足够细心的话,会发现任务栏里多了一个程序的图标,见下图1标记: 图11 这个就是dev Fabric和dev Storage的管理器。也就是传说中的云端模拟器,这个模拟器可以让我们在本地测试自己的程序是否能够在Windows Azure Platform上正常运行。一般情况下如果在本地测试通过的程序,上传到Windows Azure Platform上就可以正常运行,但是也有一些特殊的情况,我们在后面会讲到。点击上图的2标记,就进入下图的dev Fabric管理器: 图12 从上图的dev Fabric管理器可以看到我们当前运行的程序以及执行的状态,这个可以帮助我们进行跟踪和调试。 点击图11的3标记,就进入下图的dev Storage管理器,Windows Azure为应用程序提供了Blobs,Tables和Queues三种存储机制,你可以在这个界面来开启或者关闭某种存储机制。 图13 对于上面这些功能,我们在这篇不会做过多的探讨,以后会在专门的文章中做详细介绍。 六. 账户申请在部署之前,我们先要有一个账户,如果没有账户需要从http://www.microsoft.com/windowsazure/offers/这里进行注册购买,具体如下页面 图14 购买了并激活以后就可以通过https://windows./Cloud/Provisioning/Default.aspx登陆 图15 登陆成功以后,你会看到如下的主界面,在这个界面里面,你可以创建、管理你的Windows Azure、SQL Azure和AppFabric。 图16 七. 部署步骤一:发布项目开发完一个应用程序并在本地完成测试之后,就可以部署到云上去了,我们在Visual Studio的Solution Explorer窗口中,右击FirstCloudApp项目,点击Publish选项,如下图: 图17 这里有两个选择方案发布你的项目,第一就是创建云程序包,手动上传;第二就是设置信息自动上传。由于下篇我们会分析其内部的原理,所以我们这里就选择第一种方式,如下图: 图18 点击OK按钮,等待Visual Studio创建压缩包并自动弹出压缩包的窗口。压缩包和配置文件如下图: 图19 步骤二:Windows Azure管理站点前面我们输入了Live ID和密码登陆到了Windows Azure管理站点,大家看到该网页列出了我们能够使用的Windows Azure服务,当然由于购买的服务不同,您的项目数量也会有所不同,这里我们需要创建一个服务来Host我们的程序。你可以点击下图标记1或者标记2来创建我们的服务: 图20 步骤三:创建Hosted Services由于是第一次部署,我们需要先创建一个新的Hosted Services来Host我们的程序。点击New Service链接: 图21 弹出如下页面,填入Hosted Services的标签名并输入该Hosted Services的描述,然后点击Next按钮: 图22 输入你想要的域名,然后点击Check Availability按钮检查该域名是否可用,接下来就是设置服务器的地理位置,由于我现在处在新加坡,所以选择东南亚,如果在中国大陆,则可以选择东亚。最后点击Create按钮完成创建: 图23 步骤四:上传并部署程序现在Hosted Services已经创建完成。我们能够在网页上看到我们刚刚创建的Hosted Service,如下图,标记1可以修改程序的描述。标记2可以删除我们刚才创建的服务。标记3和4则是我们刚创建服务的两个环境,windows azure在这方面做得很人性化,提供了Staging和Production两个环境来部署我们的应用,这个就和我们实际的项目流程比较类似了,也给我们提供了更大的灵活性。标记5则给我们提供了一个很重要的功能,你可以通过证书来保护你的应用程序。 图24 点击上图Staging的Deploy按钮弹出如下页面。选择在步骤一中生成的两个文件然后上传。在Application Package一栏中输入.cspkg文件路径。在Configuration Settings一栏中输入.cscfg文件路径。点击Deploy: 图25 步骤五:启动并测试程序点击Deploy按钮之后,看到如下页面,然后等待一段比较长的时间(时间根据你项目大小而定): 图26 直到出现下面的界面,你会看到当前的状态为Stopped,这个时候点击Run按钮 图27 你会看到状态由Stopped逐渐变为Initializing、Busy和Ready,当状态变为Ready后,点击下面的Web Site URL链接就可以看到我们刚才修改的网页了。 图28 经过刚才Staging环境测试之后,我们就可以点击上图中间的转换按钮,这个时候Staging环境中的应用程序就会上传到Production环境,然后经过前面Staging相同操作,就可以见到如下图所示界面 图29 当发现WebRole1的状态为Ready时,我们的Web Role项目就已经成功运行了。见下图: 图30 然后点击Web Site URL链接,这个时候就可以看到我们期待的页面了。 图31 到此为止我们已经成功地把第一个云程序发布到云端了!现在任何能够访问Internet的机器都可以通过http://firstcloudapplication./进行访问。 八. SQL AZURE在浏览器输入https://windows./Cloud/Provisioning/Default.aspx,打开页面然后输入了Live ID和密码登陆到了Windows Azure管理站点(如图32所示),前面我们创建了一个服务来Host我们的程序,这里我们要介绍另外一个功能——SQL AZURE,点击页面的SQL AZURE链接 图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按钮删除当前选择的数据库。 图33 点击图33标签7中的Create Database按钮打开图34所示的界面,我们输入要创建的数据库名FirstCloudDB,选择版本类型,然后选择容量大小之后点击Create按钮即可完成创建工作。 图34 点击图33标签5中的Connection Strings按钮打开如图35所示界面,因为我们要在程序或者SQL Server Management Studio R2中使用到链接字符串,所以在使用的时候需要从这里查看或者拷贝。 图35 点击图33标签6中的Test Connectivity按钮,这个功能可以测试刚才我们创建的数据库是否连接正常,输入Username和Password,然后点击Connect按钮,就可以测试连接是否成功。 图36 点击图33标签4中的Firewall Settings,打开如图图37所示的界面,我们知道这是一个比较重要的功能,可以通过设置具体可由哪些IP访问,即相当于简单防火墙的功能。我们先把本机加入到Firewall Settings里面,这样就可以通过本机的程序或者SQL Server Management Studio R2操作数据了。 图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所示 图38 登陆成功以后进入如图39所示的SQL Server Management Studio R2主界面,这个版本和其他版本基本一致,我也不做过多介绍,后面讲SQL AZURE会专门进行探讨。 图39 九. 经典的程序+数据库模式前面用了较大篇幅介绍了Windows Azure和SQL AZURE的基本使用,那么这里就用一个简单的实例来看一下经典的程序+数据库模式在azure中有哪些改变,首先打开SQL Server Management Studio,登陆到SQL AZURE数据库,通过如下语句建立所需的表和插入所需的数据(如图40所示)。 图40 创建了数据库以后,然后我们打开前面创建的FirstCloudApp程序,在Default.aspx页面放置一个Label 控件,这个控件用来呈现从数据库返回的数据 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %> 在Default.aspx.cs页面写一段简单读取数据库数据的代码,为了能够简单的展示,我没有对其进行分装,也没有引入任何修饰代码,这样大家可以更好的理解一些,如果大家看不惯这些代码,也敬请见谅,后面文章会讲解我们自己开发的ORM框架,AOP对日志、异常、特定植入代码的处理,IOC对框架和组件解耦的支持以及常用设计模式和SOA service bus等的引入。 namespace WebRole1 编码完了以后就可以在本地测试了,测试通过以后发布我们的程序(这个和前面操作类似,所以简单略过)。由于之前我们已经部署了开发的程序,这个时候只需要更新以前的服务就行。 图41 点击图41中所示的Upgrade按钮,弹出如下页面: 图42 在图42标签1中选择更新类型;在图42标签2中选择程序包;在图42标签3中选择配置文件包;在图42标签4中设置操作系统,一般我们采用默认配置;在图42标签5中填入此次发布的Label,表明发布编号;在图42标签6中可以设置是全部更新还是特定更新;最后点击图42标签7的Deploy按钮。 图43 然后点击图43中的Web Site URL的链接http://firstcloudapplication./,发现刚才开发的程序已经成功的部署在云上了。 图44 现在任何能够访问Internet的机器都可以通过http://firstcloudapplication./进行访问,至此我们就讲完了最基本的开发模式,也为下面深入的探讨打下了基础。 十. 本文总结这篇文章讲的概念也不是很多,但是作为基础篇,也希望大家能引起注意,因为没有它,我们后面的文章也无从谈起。通过这篇文章,我们必须要对云有一个感性和理性的认识。最重要的是要认清它究竟给我们带来了哪些改变,当然今天的例子也只是云计算的冰山一角,但是我们要养成思考的习惯,比如在此前的传统做法中,对于一个中小型网站,如果部署的话,我们会租用服务器来托管我们的应用。对于较大型且企业想自己主导的网站,我们可以自己购置服务器,然后对服务器集群,做好分布式和负载均衡。现在引入云计算之后,我们开发完一个网站之后就可以直接把它部署到云上,这样就可以不用考虑负载均衡等问题,当然为了实现这个还要做很多配置,我们后面会详细介绍,这样做了以后大大提高了此应用的灵活性和扩展性,同时也减少了基础架构的成本和负担,更为重要的是它能按需使用,这给一些时令和节假日企业也带来了福音。对于安全性以及大型应用没有在此篇讨论的范畴,后面会逐渐涉及。 今天的例子过于浅显,但是千万不要把云计算等同于虚拟机或空间租用商,这样就太暴殄天物了,除了具有Host网站的功能外,还有一些常见的功能,如: 十一.系列进度
代码下载:FirstCloudApp 配套视频敬请关注MSDN Webcast官方网站,到时会逐渐更新上去,可能讲得不好,也敬请见谅! 另外新建了一个云计算专区(地址:http://home.cnblogs.com/group/CloudComputing/),大家有什么相关的疑问或话题也可以在里面进行探讨,同时也希望各位推选一位组长来带领大家共同学习,本人自认才疏学浅,无力胜任,所以欢迎广大爱好者踊跃加入,我们也有理由相信云计算一定会带来一场软件行业的变革!
|
|