在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 ...
随机推荐
- MVC 读取图片
/// <summary> /// 获取上传的图片 /// </summary> public FileResult GetImages(string PhotoPath) ...
- js【输入一个日期】返回【当前12个月每月最后一天】
Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + ...
- 安装aptana插件报Error opening the editor. java.lang.NullPointerException
Aptana的官方网站下载eclipse的插件: http://update.aptana.com/update/studio/3.2/ ,可以在线安装也可以下载插件后再安装,我是以在线的形式安装的 ...
- leetcode problem 32 -- Longest Valid Parentheses
Longest Valid Parentheses Given a string containing just the characters '(' and ')', find the length ...
- Ubuntu下Java环境配置
Oracle Java安装: 通过以下命令进行安装: sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt ...
- mysql扩展库操作mysql数据库
环境搭建 启用mysql扩展库,在php.ini文件中去配置mysql扩展库 extension=php_mysql.dll 查询数据库 1.建库建表 //建库testcreate database ...
- js实现幻灯片播放图片示例代码
幻灯片播放图片的效果想必大家都有见到过吧,下面有个不错的示例,感兴趣的朋友可以参考下 复制代码代码如下: <select id="img_date" style=" ...
- C++库编译
C++库编译 1. POCO编译 进入源文件目录,选择相应的VS版本进行编译(build_vs140). 设置系统环境变量: POCO_BASE 2. Boost编译 ####简单编译 在 ...
- POJ 3687 Labeling Balls 逆向建图,拓扑排序
题目链接: http://poj.org/problem?id=3687 要逆向建图,输入的时候要判重边,找入度为0的点的时候要从大到小循环,尽量让编号大的先入栈,输出的时候注意按编号的顺序输出重量, ...
- C与OC、C++的区别
C语言的特点:1)C语言是结构化语言,层次清晰,调试和维护比较容易2)表现能力和处理能力比较强,可直接访问内存的物理地址3)c语言实现对硬件的编辑,c语言课用语系统软件的开发,也可用语应用软件的开发, ...