Windows Server AppFabric简介
作者:DAVID CHAPPELL 译:程守华 开拓天际
AppFabric Caching Services:可以加快频繁访问信息的速度,比如asp.net的会话数据;
AppFabric Hosting Services:这会使运行或管理类似于WCF的服务更容易,特别是建立在工作流(WWF)之上的WCF服务。
Windows Server AppFabric作为Windows Server的扩展,应用程序可以部分或全部的免费应用。本文档分别介绍这两种服务的工作原理以及如何在应用程序中使用它们。
AppFabric Caching Services
改进用户操作体验以及系统可扩展性的一种方法是加速他们对信息的访问。例如asp.net应用程序,可以非常容易的增加逻辑规模:在逻辑上的多个服务器上发布多份业务业务copy,并用这些copy来满足用户的访问请求,这种模式下应用程序对用户操作体验的改进就像增加服务器一样容易。
但是,如果多个服务器上多个应用程序访问同一个数据库时,对数据的访问则成为瓶颈。如果asp.net页面等待访问数据库,增加更多的前端服务器是于事无补的。一个解决的办法就是使用更大更NB的服务器,但限制是明显的:NB到什么样总的有个度,且越牛的服务器它的成本也越高。现在需要一种扩展的办法:如何将频繁访问的数据分布到多台服务器上直接让其访问,从而解决访问一台数据库服务器的瓶颈。
一个行之有效的方法就是建立一个发布缓存服务(distributed cache),这个服务向多台客户端机器分发。相对于从一个单独的数据库获取数据,现在asp.net页面可以从多个不同的机器上获取数据了,负载均衡,应用程序会有更好的表现。这就是AppFabric Caching Services要做的,下面详细加以描述。
认识AppFabric Caching Services
AppFabric Caching Services的一个主要组件是缓存客户端(cache client),如asp.net页面,它访问缓存群集,缓存群集由多台运行缓存服务的服务器组成,每台服务器都运行一个AppFabric Caching Services的实例,且每个缓存服务都包含一些数据缓存。缓存客户端可以包含自己的本地缓存,通过软件方式作为AppFabric Caching Services的一部分对外提供服务。下图1简要说明这些组件:
图1 AppFabric Caching Services对频繁访问数据的加速
当缓存客户端第一次使用数据,这些数据可以是asp.net应用程序的使用者提供的信息,也可以是数据库读取的值,可以通过AppFabric Caching Services客户端库明确的向缓存群集使用唯一的名字来存储这些数据。(后面也会说明,asp.net应用程序也可以同session对象透明的来做这一切,因此使用缓存服务并不需要对代码做任何改动)对于客户端来说,缓存群集中的所有缓存服务器显示为一个逻辑的缓存服务,客户端无需知道也不需要关心具体是哪一个服务器为其提供数据,如果选择了本地缓存,客户端也可以在其本地缓存中存储数据项。
当客户端需要再次访问相同的数据项时,需要使用数据项的名字。查询首先从本地缓存中查找(如果设置了本地缓存)。如果数据项能够找到,则直接返回缓存数据,如果数据没有在本地缓存,查询将被送到缓存群集,如果数据能够在缓存群集中找到,则从缓存群集返回数据。数据向客户端传送的过程,就是客户端提出数据请求,AppFabric Caching Services为其准备并返回结果。如果数据没有在本地和缓存群集找到,客户端需要从其他地方查询信息,如数据库。
AppFabric Caching Services的最初项目名称为“Velocity”,这个英文单词所代表的意思正是它所做的:对同一数据的反复快速访问。与让程序反复访问数据库相比,它提供了直接访问本地或缓存群集内存的方式。对于应用程序频繁的访问同类数据,缓存服务同时改进了可操作性及扩展性。
AppFabric Caching Services被设计由.net应用程序使用,因此,缓存数据项可以是任何可以序列化的.net对象。一旦对象进入缓存,应用程序可以更新缓存的版本或者显示的删除它;缓存数据也可以被缓存服务自行删除,删除条件可以是设定的过期时间或者被更频繁访问的数据替代,缓存到本地的数据项同样如此,同时,本地缓存可以设置为与缓存群集的改变自动同步。
多个缓存客户端可以共享相同的缓存群集,这是有意义的,因为一个可伸缩扩展的应用程序可以横跨多个服务器复制它的业务逻辑(如asp.net页面),并访问缓存。同时,安全也是一个需要提出的问题,为了使共享的风险降到较低,缓存客户端或缓存服务器之间传递的数据需要数字签名和加密,管理员能够限制账户对每个缓存的访问权限。尽管如此,组织还需要保证使用同一个缓存的多个客户端是可信任的,因为他们默认可以相互访问相互之间的数据。
缓存是对各种各样的数据时非常有用的。例如,对于类似于在线销售的产品目录信息等变化较慢或基本没有变化的数据,缓存有很好的体验,它可以在同时满足多个客户端的请求;缓存的另一个应用是存储变化的数据,但同时只能有一个客户端访问,如asp.net的session对象。再次强调一下,不要发生对缓存的并发访问控制问题。
但是,对于需要变化又需要同时被多个客户端访问的数据应该怎么办呢?缓存服务仍然可以使用,但情形会复杂一下,并发控制是必须的。为了解决这个问题,AppFabric Caching Services提供了两种并发控制方式:一种是乐观的并发控制方式,即为每个缓存对象提供版本号;另一种是悲观的并发控制方式,即使用显式锁。
场景:在asp.net应用程序中使用缓存服务
Asp.net应用程序对AppFabric Caching Services来说是最重要的客户端,asp.net session对象中的数据就是缓存的显著代表。事实上,AppFabric Caching Services提供了这种支持,开发人员只需要修改一下配置,session对象就会透明的存储在缓存群集中。这绝对是一个好消息,无需改变现有的asp.net程序的任何代码,对于分布在多台机器做负载均衡的web应用程序,不再需要将session写到sql server中或者第三方的状态服务上。图2给出了图示:
图2 asp.net应用程序的session对象在AppFabric Caching Services中的存储与使用
这个简单应用场景从用户将数据存储到session对象开始(第一步),处理这个请求的web server已经配置为使用AppFabric Caching Services来缓存Session对象,因此用户数据被写到一个或多个cache server上(第二步);下一个请求依赖于第一步提供的数据,但他被不同的web server处理(第三步);在web 服务器上的asp.net 代码访问缓存群集获取session对象,这个过程使第一步存储的数据对应用程序再次使用。注意到这里并没有访问数据库,因为缓存对象并没有存放在数据库,也没有对每个请求访问同一个web server。对于asp.net应用程序来说,这种结果会有更好的扩展性和操作性体验。
场景:高可用性的缓存应用
AppFabric Caching Services在内存中存储所有的缓存,而不是写到磁盘上,默认情况下,每个缓存对象都是缓存到缓存群集的一台机器上。当AppFabric Caching Services的一台机器发生问题的时候,为了能够使数据可恢复,AppFabric Caching Services提供了高可用性选项,AppFabric Caching Services为每一个缓存对象在群集中的另外一台机器上创建一份copy。当首选的缓存服务的服务器发生问题时,另一台机器上的缓存copy能够正常的接管工作。图3说明了它的工作原理:
图3 AppFabric Caching Services在高可用性模式下复制缓存对象的副本,在首选缓存对象发生故障时,复制的备用对象仍能够提供服务
在图3的例子中,高可用性选项被选中,因此,缓存对象都分布在两台不同的server上。首选缓存copy,图中填充的图形的部分,执行了所有的内存项变化,这些变化都会自动的同步到备选copy上,即图中的没有填充的图形项。现在,首选服务的缓存机关掉(第一步),来自客户端的请求数据将通过备选缓存服务器提供数据(步骤2/3)。
这个例子说明了当缓存的主copy发生故障时,读数据能够通过备份正常工作,对于数据的更新也可以正常工作。一旦AppFabric Caching Services检测到主服务不可用,它会把备份服务置为主服务,同时建立一份新的备份,而对于客户端来说,这一切都像没有发生一样。
不管是否选中了高可用性,AppFabric Caching Services提供的对高频率数据的高速访问总是很有用的。对于Windows程序来说,这些都可以提供更好的逻辑支持。
AppFabric Hosting Services
应用程序一般是通过服务的方式暴露功能,对于Windows应用程序来说,这些服务很多情况下是通过WCF实现的,同时,一些服务的逻辑通过工作流来实现会更好,因此,在工作流基础上创建WCF服务也会有很大的可能。我们怎么样让这些服务运行起来呢?windows提供了很多通用的host宿主方式,开发者可以按其所需创建host程序。但创建一个高效的、可管理的host宿主却不是容易的事情了。使用wcf与wf,通过Windows server自身提供的功能方便的实现对host的支持及管理,这就是AppFabric Hosting Services所要做的工作。先来看一下WCF、WF的基础工作原理:
基础技术
WCF提供常用暴露及使用服务的途径,WF提供创建工作流逻辑的支持。因为WF工作流经常使用服务与外部世界交互,我们首先从WCF开始描述这两种技术:
创建WCF服务
WCF服务通过一个或多个endpoint向客户端开放,每个endpoint都作为一个契约或接口暴露。服务一般把它的功能分成一些operations,每个operation都承载业务逻辑的一部分。
创建工作流:Windows Workflow Foundation