我正在研究一种用于缓存或存储 .net 会话数据(用于高流量网站)的免费、高可用性、高性能解决方案。我不想使用分贝(分贝是流量增加的瓶颈)。
有一些键/值存储,但据我所知,它们不支持 .net 对象。还有一些支持高可用性的分布式或复制缓存解决方案。
但是,这是存储会话数据的最佳方式(如果它在单声道上运行更好)?
编辑:为了高可用性,我必须将用户会话数据复制到多台机器上。如果需要实现最佳方法,我可以编写一个序列化程序。用户会话包含电子商务站点所需的标准对象。
问候, 西尔马克
好吧,您可以使用作为 Windows 服务运行的会话状态服务器,但为了使其在网络农场场景中工作,您需要让其中一个网络服务器运行会话状态服务,而其他网络服务器将与那个单一的网络服务器。如果您正在运行该服务的 Web 服务器出现故障,这当然是一个问题。
另一种选择是使用 memcachd,它是一个分布式内存会话状态服务器。这是免费的,并且已经有一个适用于该框架的 .NET 提供程序。它相当成熟,并且已经存在了一段时间。
如果您有钱可以花钱,那么 Scale Out 服务器可能是一种选择。然而,有人告诉我,在真正大规模的网站上,需要不时回收横向扩展技术。
来自微软的弯道是 Velocity,它是 memcached 的 .NET 等价物。这还没有发布,也不是成熟的技术。
您将需要选择适合您的技术和财务要求的解决方案。
那么,首先您需要确定您在会话中存储的内容。有些东西根本无法序列化。但是,您可以为相关对象实现自己的序列化例程,并以您自己设计的方式存储它们。例如,您可以在内部进行 BinarySerialisation,然后将对象作为 base64 编码字符串写入缓存工具(memcached 或其他)并检索它。
而且,你在这里想要什么样的可扩展性?您是否根据请求在服务器之间交换用户?如果是这样,您至少需要一个中央缓存系统,或者至少是镜像缓存系统。
如果您将用户保留在同一台服务器上,但可能有很多用户,那么这并不重要,您可以在同一台机器上使用外部进程进行缓存。
我认为您需要提供更多信息。我不熟悉在单声道上运行东西,(所以我只推荐 asp.net 状态服务)但我的猜测是第 3 方缓存过程,如 memcached,可能很好。