【问题标题】:How do you access in-memory services from web applications?您如何从 Web 应用程序访问内存中的服务?
【发布时间】:2009-05-29 14:35:28
【问题描述】:

假设我需要设计一个内存服务,因为读/写系统的负载非常高。我想每 2 分钟转储一次对象的结果。如何从 Web 应用程序中访问内存中的对象/数据?

(我在想一个 Windows 服务会在后台运行,处理内存中的服务等)

我想要最快的解决方案,我猜大多数人会说使用网络服务?我还有什么其他选择?我只是不明白如何挂钩 Windows 服务的对象等。

(请不要问我为什么要这样做,也许你是对的,这是一个坏主意,但我也很好奇这种架构是否可行。)

更新

我在看这个网站 swoopo.com,我认为在拍卖快结束时会有很多点击,但由于拍卖会不断将点击重置到数据库中,所以我在想他们是否这样做了在内存中然后每 x 分钟转储到 db...

【问题讨论】:

    标签: c# .net asp.net windows-services


    【解决方案1】:

    您所描述的称为缓存,具有外观前端。

    您编写一个外观,向其中提交您的更改并获取您的数据集。当队列已满或经过一定时间后,外观将读取、写入和提交排队。您的 Web 应用程序具有对数据的单点访问(外观),外观的结构可以避免过于频繁地从存储中写入和读取。

    大多数关系数据库管理系统都会为您执行此操作。他们在内部进行这种优化和排队,因此在其上编写另一层只会减慢速度。因此,如果您使用的是 RDBMS,请不要编写缓存。

    关于访问此类外观的具体细节,您可以将其视为一个对象,并根据需要实现它(它自己的线程、线程池、Web 服务、Windows 服务等等)。

    【讨论】:

      【解决方案2】:

      任何远程技术都可以使用,例如套接字、管道等。

      查看:www.remobjects.com

      【讨论】:

        【解决方案3】:

        您可以使用 Windows 消息队列或服务总线,甚至 .NET 远程处理。 请参阅http://www.nservicebus.com/http://code.google.com/p/masstransit/

        【讨论】:

          【解决方案4】:

          您可以使用 Remoting 或 WCF 连接到 Windows 服务对象,两者都提供非常快速的进程间通信。套接字也很快,但与 WCF 相比,编程更麻烦。有大量的 WCF 文档和在线支持。

          数据库为您提供一定程度的缓存。内存中的黄金副本(例如您建议的副本)的优点是,当请求进入时,如果您将其托管在与 IIS 相同的机器上(前提是您有足够的 RAM 供两者使用),它永远不必从磁盘读取没有额外的网络跃点,使得查询数据库更快。但是,这种方法的缺点是,如果您需要添加机器来进行负载平衡,它的扩展性也不好。

          TIBCO 等第三方消息传递提供商也值得关注。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-28
            • 1970-01-01
            • 2011-12-17
            相关资源
            最近更新 更多