2014年6月13日星期五

ASP.NET MVC 控制器激活(三)

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
ASP.NET MVC 控制器激活(三)  阅读原文»

用户名:jinyuan0829
文章数:31 评论数:1
访问量:2844无忧币:464博客积分:348:3 注册日期:2014-04-26

ASP.NET MVC 控制器激活(三)

ASP.NET MVC 控制器激活(三)

前言

在上个篇幅中说到从控制器工厂的GetControllerInstance()方法来执行控制器的注入,本篇要讲是在GetControllerInstance()方法的默认实现中涉及到的一些对象类型,使用它们来进行控制器注入。

对象模型

图1

如上图1,是在控制器(一)中所讲,整个的执行过程都包含在DefaultControllerFactory控制器工厂中的GetControllerInstance()方法中,我们再来看一下IControllerActivator接口类型的定义:

12
13
14
15
16
1publicinterfaceIControllerActivator
3//摘要:
6//参数:
7//requestContext:
8//请求上下文。
9//
10//controllerType:
12//
13//返回结果:
14//创建的控制器。
15IControllerCreate(RequestContextrequestContext,TypecontrollerType);
16}

会发现在里面的定义的Create()方法的签名和DefaultControllerFactory控制器工厂中的GetControllerInstance()方法签名相同,这就对了,这就是在GetControllerInstance()方法中的另一个注入点,而在框架默认的执行中,会有一个默认的实现类实现了IControllerActivator接口类型的DefaultControllerActivator类型,因为它是框架内部的,访问级别是私有的,所以我们外部是调用不了的,我们这里可以自己自定义的实现,并且注入到框架中。

IControllerActivator类型实现的注入

先看一下我们自定义的实现:

18
19
20
21
22
23
24
25
26
27
2usingNinject;
3usingConsoleApplication2;
5namespaceMvcApplication.CustomControllerActivator
6{
9
10privateIKernel_NinjectKernel;
12publicNinjectControllerActivator()
13{
15_NinjectKernel.Bind<IDataStandard>().To<DataProvide>();
16}
17
18publicIControllerCreate(System.Web.Routing.RequestContextrequestContext,TypecontrollerType)
19{
20IControllercontroller=_NinjectKernel.Get(controllerType)asIController;
21if(controller!=null)
22{
23returncontroller;
24}
25returnnull;
26}
27}

实现的方式和上一篇中的几乎相同,现在只要在框架初始化的时候把它的实例注册到框架中就可以了。还是再Global.asax中的Application_Start()方法中?div style="border-bottom:1px solid #aaa;margin-bottom:25px">【VMware虚拟化解决方案】如何选择虚拟化产品  阅读原文»

【VMware虚拟化解决方案】如何选择虚拟化产品

虚拟化、云计算、大数据、智慧城市,是近期以及将来一段时间的热点。现在虚拟化产品很多,做虚拟化的公司也很多,就是一些应用软件也在向"虚拟化"靠近。面对纷繁杂乱的市场,对于我们用户来说,或者对于我们信息中心管理人员来说,需要在什么时候应用虚拟化、又怎么选择虚拟化产品呢?

1 不适合进行虚拟化的应用

虚拟化不是万能的,并不是所有的应用都能进行虚拟化的。我们要明白,虚拟化是整合应用、共享使用资源(包括CPU、内存、存储、网络),虚拟化是"以一当十"(甚至更多),虚拟化后一台服务器是当成多台服务器使用的。

简单来说,如果某个应用程序(或软件,或应用),在单台的服务器上处理起来都很"费劲",那将这些应用迁移到虚拟机中进行虚拟化,速度会更慢,无疑这种情况下是不适用虚拟化的。

一般来说,对于大多数的图形、图像、视频处理工作站,占用资源比较高的数据库服务器、科学运算的应用,这些都是不适合进行虚拟化的。

在一个企业的整体应用中,虽然单个应用(例如需要高性能的数据库服务器)不能虚拟化,但大多数的其他应用都是可以进行虚拟化的。例如在某个应用中在图1所示的应用中,在一个具有负载均衡的应用中,前端服务器可以运行在虚拟机中,而后端的数据库则是运行在物理机中。

clip_image002

图1 带负载均衡的应用

2 服务器整合与合并可以使用虚拟化

当单位中有多台物理服务器时,并且每个服务器只运行有限的应用时,这些服务器大多都可以进行虚拟化。根据我们的经验,在当前的条件下,可以按照1:10~1:15(甚至更高)的比例,对单位中原来的物理服务器进行虚拟化。例如,对于大多数政府信息中心都放置了大量的服务器,每个服务器可能只是某个部门的网站或应用服务器,这些服务器都可以进行虚拟化。对于有10~20个机柜、100~200台物理服务器的数据中心,使用虚拟化技术,使用8~15台物理服务器即代替原来的100~200台物理服务器,虚拟化后只需要2个机柜即可。而且,对于大多数的单位,使用虚拟化的物理服务器,不一定重新采购,只需要从现有数据中心中选择近一两年购买的服务器,并扩充内存、添加存储即可。

对于新建数据中心,升级或改造机房时,应该有计划的实施虚拟化技术。

无论是升级、改造机房实施虚拟化,还是新建数据中心实施虚拟机,在产品选择时,服务器虚拟化产品优先选择VMware vSphere。

3 从物理机到虚拟机

对于服务器虚拟化产品,选择VMware vSphere 5.5是当前最好的选择。在实施虚拟化的过程中,虽然我个人不提倡P2V(将物理机迁移到虚拟机),但使用VMware 的P2V工具vCenter Converter,将物理机转移成虚拟机,基本上可以100%成功。在实施虚拟化的过程中,对于原来物理服务器向虚拟服务器迁移时,我个人倾向不是使用P2V工具迁移,而是在VMware ESXi中新建虚拟机,然后再迁移数据到新的虚拟机中,代替原来的物理机,这样兼容性会更好。下面以迁移某台物理服务器为例,主要流程如下:

(1)登录进入要迁移的物理机,记录当前硬件信息,例如CPU的数量、频率、CPU的使用率,内存大小、已经使用内存,硬盘大小、分区数量、每个分区的大小、每个分区使用的空间。根据这些数量,计算目的虚拟机需要的CPU数量、内存大小、硬盘空间。一般情况下,以目标虚拟机的CPU利用率在30%以下、内存50%以下、硬盘空间50%以下为宜。

(2)根据上一步的统计结果,计算与其对应的虚拟机的参数。例如,源物理机有2个CPU、CPU频率3.0Ghz、当前CPU使用率10%,这样计算需要2×3.0Ghz×10%÷30%=2.0hz,而新的ESXi Server CPU频率是2.0Ghz,则分配1个vCPU即可以满足需求。如果源物理机有8GB内存,使用了2GB,则为目标虚拟机分配4GB内存。如果源物理机有3个分区,每个分区使用40GB、60GB、80GB,则为目标虚拟机分配硬盘为(40+60+80)×2=360GB即可。统计之后,根据计算结果创建虚拟机。

(3)在虚拟机中安装操作系统,安装的操作系统与源物理机最好一致,在安装操作系统的过程中,参照源物理机的配置划分分区数量,分区大小分别为原来每个分区使用空间的2倍,但系统分区至少需要40~80GB空间。

【说明】如果操作系统是Windows Server 2003,则系统分区保持40~60GB即可,如果是Windows Server 2008及其以后系统,则需要60~100GB为宜。

(3)安装好虚拟机操作系统之后,对照源物理机,安装源物理机中的应用程序。安装之后,通过网络或活动硬盘等介质,从源物理机备份(复制)数据到新的虚拟机。数据恢复之后,配置应用程序。

(4)关闭源物理机,修改目标虚拟机的IP地址,代替源主机对外提供服务。

(5)等待业务运行一段时间,一般为7~15天即可。运行正常,源物理机可以另做他用。

4 传统的双机热备可以改用虚拟化

对于医院、医药公司,单位财务部门使用的"关键应用"的服务器,为了提高系统的可靠性,大多配置了"双机热备",即两个相同配置的服务器+共用的存储,在两台服务器上安装操作系统及数据库应用程序,将后台数据库保存在存储上。在这种传统的双机热备系统中,服务器的浪费率是最高的,因为同一时刻只有一台服务器对外提供服务,另一台虽然也在开机,但安装在这台服务器上的应用则处于"待机"状态,只有另一台服务器出现问题时,这台服务器才能接管服务,对外提供服务。在大多数的双机热备系统中,每个双机热备系统只运行一个应用,如果有多个应用,就需要有多套"双机热备"的系统。可以说,对于一个单位来说,部署的双机热备的应用越多,浪费也就越严重。另外,在配置双机热备的系统时,服务器及存储的硬件选择,也是远远超过了所部署软件的需求。例如,某医院的某个应用系统,配置的双机热备服务器,为每台服务器配置了64GB内存、2个Intel E5-2650的CPU、8TB的存储,但实际这个应用在高峰时期的内存只有21GB、CPU利用率9%以下,而这套系统运行1年之后的数据量一共300GB左右。传统双机热备如图2所示。

clip_image003

图2 双机热备

对于这些双机热备系统,可以使用VMware vSphere虚拟化软件,通过配置HA来实现。可以说,在启用了HA之后,群集中的每个虚拟机(对应每个应用)都是"高可用"的。如果说,配置一套双机热备需要2台服务器、1个存储外,使用同样的硬件可以配置多个"高可用"的应用。

通常情况下,我们在设置vSphere群集时,一般最小设计3台ESXi主机(每台主机推荐4个网卡)、1个存储、1个vCenter Server(放置在ESXi虚拟机中),这样的虚拟化群集之上运行的虚拟机以及运行在虚拟机中的应用程序,都是高可用的,如图3所示。

clip_image004

图3 vSphere高可用群集

现在唯一的区别是,在传统的双机热备中,某个主机出错由另一个主机接管的时间很小,而采用vSphere群集,当某个主机出故障时,这个主机上原来运行的虚拟机,由其他主机接管并对外提供服务时,需要有个"重新启动"的时间。当然,对于90%以上的企业,是可以容忍这个"重新启动"的时间的,一般在1~3分钟之内。

如果你需要和双机热备一样,需要实现"零中断"的虚拟机,也不是不可以。vSphere中的"FT(容错)"可以提供这个功能。在为虚拟机启用FT功能后,同一虚拟机会在两个不同的主机运行,并且一个虚拟机为"主",另一个辅助虚拟机为"只读"版本,当"主"虚拟机所在主机出现问题时,"辅助"虚拟机会变为"主"虚拟机对外提供服务,这个过程可以达到"零切换时间"。只是当前的vSphere 5.x的版本中,启用容错配置的虚拟机只能配置一个CPU,估计这个问题会在vSphere新的版本中解决。

在有"双机热备"的企业中,如果实施虚拟化相对也是比较容易的,因为企业中有备用的计算机可以做虚拟化主机(双机势备系统中的另一台不用的计算机,在项目实施的初期可以安装VMware ESXi)。

5 传统桌面升级改造可以使用虚拟化

当前企业中有大量运行Windows XP的计算机,随着Microsoft停止对Windows XP操作系统的支持,这些计算机需要逐渐升级到Windows 7或Windows 8.1。但这些运行Windows XP的计算机配置较低,如果升级操作系统还需要升级甚至更换硬件。如果采用传统的方式,只能是更换新的主机以适应新的操作系统。而现在借助VMware View虚拟桌面则有了更多的选择。企业可以通过配置VMware View桌面来解决这个问题。在不更换工作站的前提下,工作站仍然运行Windows XP操作系统,但用户在使用时,则是使用View Client登录Windows 7或Windows 8.1的虚拟桌面,这相当于使用用户原来的硬件设施运行Windows 7。而用户的数据仍然保存在运行Windows XP的本地硬盘中,如果有打印任务,仍然是打印在用户当前的打印机上。如果有其他外设,例如USB的摄像头、其他外设,都是可以映射到VMware View

阅读更多内容

没有评论:

发表评论