作者 王枫 发布于 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功能导览:

  1. 用Administrator帐号启动Visual Studio
  2. 建立一个新的”Cloud Service”后,建立一个WCF服务的Web Role命名为WCFServiceRole
  3. 用以下的代码建立一个角色实例
    public string GetData(int value)
    {
    return string.Format("From {0} - You entered: {1}", RoleEnvironment.
    CurrentRoleInstance.Id, value);
    }
  4. 然后,在服务部署的地方加代码来关闭地址过滤功能
    [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]

    因为默认的环境下已经建立的服务会连接特定的端口配置,此代码的作用是停用连接特定端口,所以才能另外配置端口

  5. 在此Solution内部新建一个控制面板命名为”WCFClient”
  6. 按 Ctrl+F5来运行一次这个Solution
  7. 在WCFClient上右单击后点选Add Service Reference…
  8. 在Add Service Reference的对话框内输入服务地址http://127.0.0.1/Service1.svc,然后单击Go,再接着单击ok
  9. 把下方代码加到Main方法,解决命名空间的解析:
    Service1Client client = new Service1Client();
    Console.WriteLine(client.GetData(100));
    client.Close();
    Console.ReadLine();
  10. 右单击WCFClient后点选Debug->Start new instance客户端应该显示From WCFServiceRole_IN_0 – You entered: 100。在控制台窗口中按[Enter],停止客户端。

    以上步骤只是基本的WCF客户端服务器方案而已,接下来要把InstanceInput端口加入。

  11. 关闭浏览器来停止云服务实例。
  12. 在云服务项目内,双击WCFServiceRole令其弹出属性页。
  13. 点击Endpoint选项卡,然后单击”添加“来添加一个端点。更改端点类型为InstanceInput,再把Private Port改为80,Public Port保留为默认值。这些端口设置可以有所不同。使用此端口范围,以便对应个别实例 -第一个值对应第一个实例,第二个值对应第二个实例,等等。
  14. 点击Configuration选项卡,并更改实例计数为2。
  15. 部署到Azure Cloud Service。
  16. 等到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" />
  17. 右单击WCFClient,然后选择Debug->Start new instance客户端应该像步骤10一样运行。如果多运行客户端几次就可以发现,请求会由不同的角色实例接受。
  18. 在上述端点配置修改地址,并使用不同的公共端口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公有云环境部署企业应用的更多相关文章

  1. Azure China (6) SAP 应用在华登陆 Windows Azure 公有云

    <Windows Azure Platform 系列文章目录>     2014年07月11日 由世纪互联运营的 Windows Azure 为 SAP 应用提供公有云平台 2014 年 ...

  2. Windows Azure公有云服务相关方案

    http://www.cnblogs.com/sennly/p/4139675.html 1.公有云平台服务简介 Windows Azure 是一个灵活而开放的云平台,通过该平台,您可以在数据中心快速 ...

  3. “云中论道”之——使用开源技术和Azure公有云服务快速搭建云端IoT解决方案(上)

    “云中论道”技术课堂第一课开讲啦!微软各路技术咖们齐聚一堂,为大家带来干货不断!作为“云中论道“课堂的开课之作,我们首先邀请到了微软Azure专家级的架构师:槐长清,他为我们带来了关于“使用开源技术和 ...

  4. 微软Azure公有云个人用户是否能支付得起?

    个人建立自己的站点是普通"白领"的愿望.由于,我们的大脑分泌的脑汁须要排泄渠道.怎么办呢? 依据微软公有云的公开报价(Pricing),租用单核CPU.0.75GB内存,20GB硬 ...

  5. 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目

    分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...

  6. Azure China (1) Azure公有云落地中国

    <Windows Azure Platform 系列文章目录> 微软公有云Microsoft Azure已经落地中国,官方网址:http://www.windowsazure.cn/. 在 ...

  7. Windows Azure 入门 -- VS 2015部署 ASP.NET网站(项目) 与 数据库

    Windows Azure 入门 -- 部署 ASP.NET网站(项目) 与数据库 https://www.dotblogs.com.tw/mis2000lab/2015/12/24/windowsa ...

  8. 15分钟完成基于Azure公有云搭建远程测试环境

  9. windows下go开发环境部署 (sublime+gosublime+geocode)

    1.下载git.go和sublime免安装版 go下载地址:http://pan.baidu.com/s/1hq1mrDM#path=%252Fgo%252F1.5.2sublime下载地址:http ...

随机推荐

  1. ios开发中button控件的属性及常见问题

    最为最基本的控件,我们必须对button的每个常用属性都熟练应用: 1,使用之前,必须对按钮进行定义,为乐规范,在@interface ViewController (){}中进行定义,先定义后使用. ...

  2. Jquery VailDate初探

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. iOS-开发日志-UIPageControl

    UIPageControl 1.  numberOfPages // 设置有多少页 默认为0 // 2) 设置页数 [pageControl setNumberOfPages:kImageCount] ...

  4. c编程:提示用户输入一个0—9的数字进行猜测电脑产生的随机数。一共有三次机会。

    // //  main.c //  使用c语言进行编程: 题目:由电脑生成一个由0-9之间的随机数,提示用户也输入一个数字进行猜测.当猜测三次仍不中的时候结束程序. 编译环境:Xcode6.3 特别介 ...

  5. javascript DOM 节点 第18节

    <html> <head> <title>DOM对象</title> </head><body><div >DOM对 ...

  6. java之泛型潜在错误

    如果使用带泛型声明的类时,没有传入类型参数,那么这个类型参数默认是声明该参数时指定的第一个上限类型,这个类型参数被称为raw type(原始类型 ). eg:     public class Lis ...

  7. 读书笔记之 - javascript 设计模式 - 工厂模式

    一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一 ...

  8. Linux文件权限学习总结

    一.用户对文件或目录都有哪些权限? 四种:读.写.执行.没有权限 二.如何表示这四种权限? 如果用十进制数字表示,分别为:4.2.1.0:如果用字符表示,分别为:r.w.x.-.个人觉得,使用chmo ...

  9. android BitmapFacty.Options的用法

    通常我们在开发android应用程序时,在加载图片时常常需要与Bitmap打交道,一般会使用BitmapFactory中提供的相关decode方法获取: 如果一张很大的图片,我们不加处理直接decod ...

  10. 《APUE》第三章笔记(3)

    文件共享 UNIX系统支持在不同进程中共享打开的文件,首先先用一幅apue的图来介绍一下内核用于I/O文件的数据结构: 如图所见,一个进程都会有一个记录项,记录项中包含有一张打开文件描述符表,每个描述 ...