65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 服务器场的可伸缩会话状态存储

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2005 年 5 月 22 日

8分钟阅读

viewsIcon

43819

ScaleOut StateServer 通过将 ASP.NET 会话状态和其他工作负载数据直接托管在服务器场中使用分布式内存存储,从而提高服务器场性能并减轻数据库服务器的负担。

下载 评估软件

服务器场在管理快速变化的应用数据(如 ASP.NET 会话状态和购物车)方面带来了新的挑战。为了实现有效的负载均衡,“工作负载”数据需要可在整个服务器场中访问,并且必须能够承受服务器故障。解决此问题的一种流行方法是将工作负载数据从应用程序的本地内存中移出(因为本地内存中的数据无法被其他服务器访问且易于丢失),并将其存储在集中的后端数据库或对象服务器中。虽然这种方法可以保持数据的一致性,但它会引入性能瓶颈,影响响应时间和限制可伸缩性。

一款名为 ScaleOut StateServer 的新软件产品消除了此瓶颈,并通过在服务器场中使用分布式内存存储直接托管工作负载数据,从而减轻了后端存储服务器的负担。为了最大限度地提高应用程序性能,该产品将工作负载数据保留在靠近其使用的地方,并随着服务器场的发展自动扩展。ScaleOut StateServer 还采用智能数据复制技术,可在服务器发生故障时保持高可用性。应用程序可以充分利用服务器场的强大功能来提供可伸缩的性能和高可用性。

服务器场可能造成存储瓶颈

负载均衡服务器场的出现,通过提高网站的可伸缩容量和维持 24/7 的可靠性,消除了电子商务快速增长的一个重要障碍。随着 Web 和应用程序服务器场越来越受欢迎,它们需要管理的数据量也在稳步增长。一种新型的关键但相对短暂的数据(称为工作负载数据)应运而生,给数据库服务器带来了越来越大的压力。这些数据包括会话状态、购物车、SOAP 请求、中间业务逻辑结果以及其他快速变化的应用程序状态信息。工作负载数据通常在提交更改到业务线 (LOB) 数据库之前会更新几次。LOB 数据库通常存储库存、采购订单、账单记录以及其他长期业务数据。下表比较了传统的 LOB 数据和工作负载数据。

特性

LOB 数据

工作负载数据

低功耗

生命周期/周转率

长/慢

短/快

访问查询

复杂

简单

数据持久化

关键

关键,但可重复

访问:更新比率
~4:1
~1:1
快速访问和更新
不太重要
非常重要

应用程序传统上将工作负载数据存储在正在运行的进程的本地内存中。这种技术称为“进程内”存储,在单台服务器上效果很好,但在服务器场中却无效,因为服务器场中的工作负载数据需要可以在整个服务器场中访问,以便任何服务器都能随时检索。这最大程度地提高了整体服务质量,因为它允许将传入的客户端负载均匀地分布在整个服务器场,并确保客户端不受服务器故障的影响。

为了解决这些问题,应用程序通常将工作负载数据存储在集中的后端数据库服务器 (DBMS) 中,以便可以从任何服务器检索这些数据,并在服务器发生故障时进行持久化。这种方法成本可能很高(尤其是使用集群数据库服务器时),并且到数据存储层的流量会产生瓶颈,影响性能和可伸缩性。数据库缓存本身并不能解决问题,因为它们无法加速对快速变化的工作负载数据的更新。

一些工作负载数据(例如 ASP.NET 应用程序的会话状态)也可以存储在运行在单独服务器上的内存存储服务中。虽然这种解决方案可以节省使用 DBMS 来存储工作负载数据的成本和开销,但它也会导致性能扩展的瓶颈。此外,独立的服务器无法进行维护停机,并且存储的数据在服务器故障时不会保留。

ScaleOut StateServer 提升可伸缩性

ScaleOut StateServer 通过在服务器场中直接托管工作负载数据,使用基于软件的分布式内存存储来解决这些问题。该产品将工作负载数据从后端数据库服务器卸载,以提高性能并降低基础设施成本。它还提供可伸缩性,随着服务器场的增长,性能会不断提升。其正在申请专利的存储技术允许跨服务器场访问所有存储的数据,并智能地在服务器之间复制数据,以在服务器发生故障或计划停机时保持高可用性。

ScaleOut StateServer 旨在数据中心内部使用,安装为 Web 或应用程序服务器场中所有服务器上的 Windows 服务,并使用 Web 服务器场现有的局域网。该软件根据标识的 128 位键存储、读取、更新和删除连续的、不透明的二进制数据对象。这些数据对象包含序列化的程序数据,例如 ASP.NET 会话数据、业务逻辑对象和数据集。存储的对象可以从服务器场中的任何服务器统一访问。

下图显示了安装在具有三个服务器的 Web 服务器场中的 ScaleOut StateServer。

ScaleOut StateServer 通过将工作负载数据分区并动态地在服务器场内的服务器之间进行负载均衡,来扩展吞吐量并保持快速响应时间。通过允许同时访问存储在不同服务器上的多个数据对象,性能和存储容量会随着服务器场的增长而扩展。当向服务器场添加新服务器时,该产品会自动将服务器集成到存储中,并将一部分数据迁移到新服务器,从而动态调整服务器场中每台服务器存储和管理的数据量。

ScaleOut StateServer 可与服务器场的 IP 负载均衡器无缝协作。由于所有服务器都可以访问任何工作负载数据对象,因此无需负载均衡器维护与单个客户端的“服务器亲和性”。这通过允许客户端请求更均匀地分布在服务器场中来提高性能。它还可以避免因客户端的工作负载数据仅存储在单个服务器上且该服务器发生故障而可能导致的潜在服务丢失。无论如何,负载均衡器通常无法有效维护服务器亲和性,因为客户端 IP 地址可能会在会话期间发生变化;ScaleOut StateServer 使应用程序能够绕过此问题。

使用分布式存储消除了集中式 DBMS 造成的瓶颈,并避免了 DBMS 和磁盘访问的开销。性能数据显示了显著的性能提升,包括响应时间提高 6 倍以及电子商务应用程序的线性吞吐量扩展,如下面的响应时间比较所示。

有关此性能分析的更多详细信息,请访问 http://www.scaleoutsoftware.com/products/stateServer/technology.html

通过数据复制和自愈保持高可用性

为了避免独立内存存储服务器的可靠性问题,ScaleOut StateServer 会将存储的数据对象智能地复制到最多两个额外的服务器上,并确保更新即使在服务器或网络故障的情况下也能可靠提交。下图说明了为每个数据对象(显示为红色)创建两个副本对象(显示为蓝色)。

当计算机发生故障或失去网络连接时,ScaleOut StateServer 会自动从服务器场中其他服务器上的副本之一检索对象。恢复过程不到十秒钟即可检测到故障并恢复对受影响数据的访问(而集群 DBMS 则需要一到几分钟)。几秒钟后,分布式存储会“自愈”,移除发生故障或无法访问的服务器,然后在剩余服务器上重建数据副本。这可以在发生后续服务器故障时恢复完整的数据冗余。

通过自聚合降低管理成本

ScaleOut StateServer 的设计宗旨是尽可能简单易用。在服务器场的第一台服务器上安装并激活后,该服务将创建一个存储。在服务器场中的其他服务器上激活时,ScaleOut StateServer 会自动查找存储(“自发现”),然后加入存储(“自聚合”)以承担一部分工作负载。应用程序可以从存储的所有服务器统一访问和更新任何存储的数据对象。

ScaleOut StateServer 的管理控制台运行在服务器场中的任何服务器上,它使用集中的图形用户界面,显示分布式存储及其参与服务器(称为主机)的状态和性能。管理控制台使用自发现机制来识别存储的主机。它允许独立配置和控制每个主机,如下面的屏幕截图所示。

另外一个命令行程序提供了管理控制台的所有功能,可以通过单个命令运行,这些命令可以从命令提示符运行或包含在命令行脚本中。

透明支持 ASP.NET

ScaleOut StateServer 透明地存储 ASP.NET 会话状态,为 ASP.NET 应用程序提供无缝的环境。安装后,ScaleOut StateServer 会自动将 ASP.NET 会话状态对象保存在其分布式存储中,并在需要时检索它们以完成 Web 请求。当服务器场的 IP 负载均衡器将 Web 请求定向到不同服务器时,ScaleOut StateServer 会使所有会话对象即时可用,无论哪个服务器处理请求。

下表将 ScaleOut StateServer (SOSS) 与 DBMS、独立内存服务器以及 ASP.NET 默认的“进程内”会话状态存储方法进行了比较。

优势

SOSS

数据库管理系统

内存服务器

进程内

消除性能瓶颈

消除服务器亲和性需求

消除单点故障

需要集群

允许服务器维护

需要集群

低成本

N/A

N/A

支持 .NET 语言和 C/C++

.NET 和 C/C++ 应用程序可以使用产品随附的应用程序编程接口 (API) 直接访问 ScaleOut StateServer 的分布式存储。这提供了将 ScaleOut StateServer 集成到现有应用程序所需的灵活性,并提供最高性能。 .NET API 支持所有 .NET 语言,包括 C#、C++ 和 Visual Basic。其他 API 支持独立的(“非托管代码”)C/C++ 应用程序。

ScaleOut StateServer 的 API 提供简单直接的分布式存储访问,用于

  • 存储由 128 位键标识的序列化数据对象,
  • 读取先前存储的数据对象,
  • 更新先前存储的数据对象,以及
  • 从存储中删除数据对象。

摘要

服务器场应用程序通常将快速变化的工作负载数据(例如 ASP.NET 会话状态)存储在集中的后端存储服务器中,作为确保高可用性和服务器场范围可访问性的唯一选择。一款名为 ScaleOut StateServer 的新软件产品,通过在服务器场中直接使用分布式内存存储托管会话状态,降低了基础设施成本,提高了性能,并减轻了后端存储服务器的负担。这种新的存储技术随着服务器场的增长而扩展性能和存储容量,同时保持高可用性。这使得服务器场应用程序能够满足日益增长的业务需求,并为客户提供快速的响应时间。

下载 ScaleOut StateServer

© . All rights reserved.