在Windows Azure公有云环境部署企业应用
作者 王枫 发布于 2014年4月5日
企业内部应用转换为在线服务
Windows Azure已经成为众多IT服务提供商们热议的话题,其中,有的认为只有提供互连网用户服务的应用才适合放在公有云环境内运行。然而,事实上,在当前Windows Azure环境上,有许多企业也把企业内部的应用放在公有云上,它们包括:
Web/Brower架构。Web服务器直接放在Windows Azure环境中,方便企业内员工通过HTTPS方式连接到企业内网或互联网访问。特别在跨国企业环境中,这样做可减少公司内部不同国家的办公室之间网络流量。
Client/Server架构。应用服务器放在Windows Azure环境中,用户端的应用可以部署在PC或移动设备上,方便用户访问。如果考虑网络安全,还可以加上VPN或其他安全保护机制。
本文主要介绍某个企业将原本在企业数据中心的应用的迁移到Windows Azure上部署的案例。在该企业的数据中心里,该应用是让企业购买软件后自行部署到物理机的,企业要安排IT人员到客户端去协助维护与更新软件。迁移到Windows Azure中部署成在线服务之后,可以节省原本要另外购买服务器硬件的成本,同时也减少了IT对客户服务的工作量,以后升级及维护的工作可以通过脚本直接在Windows Azure环境中对所有虚拟机和软件进行配置。本文主要内容有:对迁移前的应用架构的关键点分析、部署过程中需要调适的配置、可能的不同部署方式等。Windows
Azure应用部署原则按照应用实际运行的最佳环境需求设计。
以下内容先介绍针对要迁移的应用的架构环境进行调研,然后介绍迁移到Windows Azure的过程。调研工作主要从从硬件、网络、存储、应用等四个方面进行,了解原有环境存在的缺点与客户期望的改进。然后说明迁移到Widnows Azure后的优点以及实现了哪些改进。
原有应用架构环境调研
服务器
对于传统数据中心,用户通过互联网访问服务器上安装的应用,合作伙伴直接开发新的插件上传到服务器并与现有应用集成。每个客户的基本配置是一台网站服务器和一台数据库服务器。企业的传统数据中心环境都采用直接提供物理机的方式,或者由客户自行准备物理机来安装应用。
迁移到Windows Azure虚拟机环境后可以提高服务器的硬件资源使用效率。
网络环境
默认情况下,网络环境应该把不同客户的虚拟机网络都隔离开来,可以使用Vlan ID在同交换机上隔离网络通道。但是因为需要在所有服务器上打补丁(应用本身的补丁与Windows Server, SQL Server的补丁),所以必须与管理服务器连接,这在物理交换机上很容易实现。但是,迁移到Windows Azure环境里之后,就只能使用Azure本身的Virtual Network来做,解决方案会在后面详述。
存储
在传统数据中心里,所有的虚拟机文件都是放在物理服务器外部的共享存储中,通过集群解决无理解故障,故障时处理逻辑可以自动迁移到其他物理机上,重启后继续运行。正在使用的服务将会中断,也会存在少量数据丢失的可能,通过数据库回滚技术可以继续正常工作。但是对客户来说,服务质量还需进一步加强。因为成本的限制,共享存储内的数据并没有同步拷贝到其他数据中心。
应用
该企业准备迁移的应用属于三层架构,为了简化安装与运营的维护要求,网站与应用被安装在同一台网站服务器内,只有数据库独立安装于一台虚拟机中。应用层已经具备了扩容的功能,可以建立网站服务器资源池,并配置硬件负载平衡器,只要在网站资源池内新增网站服务器然后执行配置更改的脚本就可以提供多台服务器共同提供服务。后端的数据库服务器没有设计为数据水平分散的架构,在硬件的数据库服务器没有做到扩容的功能。
调研结果
这是典型的符合从物理机转换到虚拟化环境然后再迁移到Windows Azure的场景。本文主要讨论如何使用Windows Azure解决方案满足客户的期望。以下是四个方面是主要且常见的需求:
- 物理机资源使用率提高与虚拟机容错
- 网络可以隔离,但是管理环境的网络必须连接到每一部服务器
- 数据存储高可用性提升
- 应用与数据库扩容
迁移到WINDOWS AZURE
物理机资源使用率提高与虚拟机容错
在Windows Azure环境里不需要去考虑物理机硬件,因为物理机的管理已经由Azure完全负责。
虚拟机的容错在Azure的环境里是默认存在的,只要选取就行。
网络可以隔离,但是管理环境网络必须透通
Azure环境里配置不同的虚拟网络并把不同的客户虚拟机指派到隔离的虚拟网络就可以隔离虚拟机,管理服务器虚拟机则是通过Azure默认提供给每一台虚拟机的公网IP地址来推送补丁即可。此种作法比较简单,直接用原有功能配置即可。但是有以下几点状况必须考虑:
- 客户数量增加时,虚拟网络的数量管理变得复杂
- 实际压力测试结果,当虚拟机数量增加时,通过公网在所有虚拟机上打补丁会影响到客户用公网连接网站服务器的效能
- 考虑上面两点,在此环境的最佳作法是
- 减少虚拟网络数量,依照打补丁虚拟机群的设计区分虚拟网络(并非隔离)。在虚拟网络之下新增子网络数量,不同客户的虚拟机放在不同的子网络(仍未隔离)。虚拟机服务器隔离的配置是在增加新的虚拟机时执行配置脚本,用Windows虚拟机本身的防火墙配置开启相同客户的服务器还有管理服务器连接同时阻绝其他的服务器
- 因网络层并未隔离,所以打补丁可以走虚拟网络完成工作,不会影响公网的客户连接
数据存储高可用性提升
此项目在不同城市的数据中心设置了两个Windows Azure的存储帐号,并把客户的数据在两个Azure数据中心同步,以满足基本的高可用性需求。
除了这种做法之外,还有其他作法
- 比较安全的作法是把数据放在公司网络,网站与应用服务器放在Azure,中间通过Azure的Connect功能建立VPN连接保护资料传输。这种作法安全性高,但是降低了网络效率。
- 数据拷贝一份到Azure的存储,部署到Azure里的数据库虚拟机里设置为只读,仅提供查询。要写入的数据仍然导向VPN连接到公司网络的数据库服务器上处理。此种方法应用代码修改多,数据更新稍慢。
应用与数据库扩容
此部分是此项目进行中最精华的部分。原有应用已经有了负载均衡功能,但关键是要有网络硬件的负载平衡器来分配多并发的连接要求,在Windows Azure默认的部署方式默认支持公网IP地址负载平衡,只要在加入新的虚拟机时选取,可取代原有环境中的硬件负载平衡器。
图为原有环境中使用WCF服务器的负载平衡,但是如果内部虚拟网络IP地址也有负载平衡的需求,则可以在修改应用代码让网站应用本身去选择连接多部后端服务器。虽然Web Role与Worker Role能够通过虚拟网络内的通道直接进行通讯,但Windows Azure在内部虚拟网络的环境中没有提供负载平衡的功能。要做到内部网络IP地址也能有负载平衡,我们可以自行编写代码完成,
举例说明:端口10101对应第一个实例,端口10102对应第二个实例,依此类推。Windows Azure SDK 1.7版本内有一个功能——InstanceInput,这个功能可以让用户端应用(或前端网站服务器)直接连接到后端的服务器实例(任选Web Role或是Worker Role)。以下是完整的InstanceInput功能导览:
- 用Administrator帐号启动Visual Studio
- 建立一个新的”Cloud Service”后,建立一个WCF服务的Web Role命名为WCFServiceRole
- 用以下的代码建立一个角色实例
public string GetData(int value)
{
return string.Format("From {0} - You entered: {1}", RoleEnvironment.
CurrentRoleInstance.Id, value);
} - 然后,在服务部署的地方加代码来关闭地址过滤功能
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
因为默认的环境下已经建立的服务会连接特定的端口配置,此代码的作用是停用连接特定端口,所以才能另外配置端口
- 在此Solution内部新建一个控制面板命名为”WCFClient”
- 按 Ctrl+F5来运行一次这个Solution
- 在WCFClient上右单击后点选Add Service Reference…
- 在Add Service Reference的对话框内输入服务地址http://127.0.0.1/Service1.svc,然后单击Go,再接着单击ok
- 把下方代码加到Main方法,解决命名空间的解析:
Service1Client client = new Service1Client();
Console.WriteLine(client.GetData(100));
client.Close();
Console.ReadLine(); - 右单击WCFClient后点选Debug->Start new instance客户端应该显示From WCFServiceRole_IN_0 – You entered: 100。在控制台窗口中按[Enter],停止客户端。
以上步骤只是基本的WCF客户端服务器方案而已,接下来要把InstanceInput端口加入。
- 关闭浏览器来停止云服务实例。
- 在云服务项目内,双击WCFServiceRole令其弹出属性页。
- 点击Endpoint选项卡,然后单击”添加“来添加一个端点。更改端点类型为InstanceInput,再把Private Port改为80,Public Port保留为默认值。这些端口设置可以有所不同。使用此端口范围,以便对应个别实例 -第一个值对应第一个实例,第二个值对应第二个实例,等等。
- 点击Configuration选项卡,并更改实例计数为2。
- 部署到Azure Cloud Service。
- 等到Cloud Service部署完成后,在WCFClient中编辑app.config文件,把客户端复位向到新的服务端点
<endpoint address="http://{your application}.cloudapp.net/service1.svc"
binding="basicHttpBinding"bindingConfiguration="
BasicHttpBinding_IService1" contract="ServiceReference1.
IService1"name="BasicHttpBinding_IService1" /> - 右单击WCFClient,然后选择Debug->Start new instance客户端应该像步骤10一样运行。如果多运行客户端几次就可以发现,请求会由不同的角色实例接受。
- 在上述端点配置修改地址,并使用不同的公共端口InstanceInput端点,以对应到指定的实例。例如,如果公共端口范围为10105至10109,然后http:// {您的应用程序}。cloudapp.net:10105/service1.svc可解析到第一个实例,http:// {您的应用程序}。cloudapp.net:10106/service1.svc可解析到第二个实例。
小结
直接使用Windows Azure的功能就可以快速将企业内部应用迁移到公有云环境。Windows Azure SDK提供了方便好用的代码修改与直接部署应用的环境。
本文转载自:http://www.infoq.com/cn/articles/enterprise-applications-deployment-in-windows-Azure-cloud
在Windows Azure公有云环境部署企业应用的更多相关文章
- Azure China (6) SAP 应用在华登陆 Windows Azure 公有云
<Windows Azure Platform 系列文章目录> 2014年07月11日 由世纪互联运营的 Windows Azure 为 SAP 应用提供公有云平台 2014 年 ...
- Windows Azure公有云服务相关方案
http://www.cnblogs.com/sennly/p/4139675.html 1.公有云平台服务简介 Windows Azure 是一个灵活而开放的云平台,通过该平台,您可以在数据中心快速 ...
- “云中论道”之——使用开源技术和Azure公有云服务快速搭建云端IoT解决方案(上)
“云中论道”技术课堂第一课开讲啦!微软各路技术咖们齐聚一堂,为大家带来干货不断!作为“云中论道“课堂的开课之作,我们首先邀请到了微软Azure专家级的架构师:槐长清,他为我们带来了关于“使用开源技术和 ...
- 微软Azure公有云个人用户是否能支付得起?
个人建立自己的站点是普通"白领"的愿望.由于,我们的大脑分泌的脑汁须要排泄渠道.怎么办呢? 依据微软公有云的公开报价(Pricing),租用单核CPU.0.75GB内存,20GB硬 ...
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...
- Azure China (1) Azure公有云落地中国
<Windows Azure Platform 系列文章目录> 微软公有云Microsoft Azure已经落地中国,官方网址:http://www.windowsazure.cn/. 在 ...
- Windows Azure 入门 -- VS 2015部署 ASP.NET网站(项目) 与 数据库
Windows Azure 入门 -- 部署 ASP.NET网站(项目) 与数据库 https://www.dotblogs.com.tw/mis2000lab/2015/12/24/windowsa ...
- 15分钟完成基于Azure公有云搭建远程测试环境
- windows下go开发环境部署 (sublime+gosublime+geocode)
1.下载git.go和sublime免安装版 go下载地址:http://pan.baidu.com/s/1hq1mrDM#path=%252Fgo%252F1.5.2sublime下载地址:http ...
随机推荐
- Asp.net笔记(原创)
Repeater控件的使用:<asp:Label ID="Label1" runat="server" Text='<%#Eval("na ...
- LigerUI API
参数列表 参数名 类型 描述 默认值 title String 表格标题 null width String|Int 宽度值,支持百分比 'auto' height String|Int 高度值,支持 ...
- (转)Libevent(5)— 连接监听器
转自:http://name5566.com/4220.html 参考文献列表:http://www.wangafu.net/~nickm/libevent-book/ 此文编写的时候,使用到的 Li ...
- linux采用模块方法,添加一个新的设备
该文转载自:http://rangercyh.blog.51cto.com/1444712/521244 系统调用是操作系统内核和应用程序之间的接口,而设备驱动程序是操作系统内核和机器硬件之间的接口. ...
- EF 存储过程(上)
目前,EF对存储过程的支持并不完善.存在以下问题:> EF不支持存储过程返回多表联合查询的结果集.> EF仅支持返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况.&g ...
- 项目中logger、message错误信息的配置
申明:在一个项目中必不可少的是Logger和错误信息的配置,现在给出在我们常用的处理方法. —.创建一个ConfigUtils类和他对应的rah.properties文件和Test测试类 Config ...
- z-index使用以及失效的处理方法
1.一般z-index的使用是在有两个重叠的标签,在一定的情况下控制其中一个在另一个的上方出现. 2.z-index值越大就越是在上层.z-index:9999:z-index元素的position属 ...
- js 中对象属性特性2
对象的存储描述: get 和 set 方法 <script> var obj ={ get age(){ return 22 }, set age(value){ console. ...
- javascript读取本地文件
由于浏览器考虑到安全问题,在修改本地文件方面除了IE几乎都不支持. IE例子 //读文件 function readFile(filename){ var fso = new ActiveXObjec ...
- 不同版本PHP之间cURL的区别(-经验之谈)
之前在做一个采集的工具,实现采集回来的文章,图片保存起来.文章内容是保存在数据库,图片是先需要上传到图片服务器,再返回图片地址,替换掉文章的图片地址. 问题来了:都能成功采集都东西,但是,本地测试是正 ...