我应该将RavenDB作为Windows服务还是通过IIS运行?

时间:2011-12-29 21:52:02

标签: architecture ravendb

我正在使用RavenDB作为应用程序的数据存储的想法,该应用程序很可能具有HTML UI,WebService UI和将访问数据的服务器实用程序。使用RavenDB的一个原因是它通过复制和分片提供的水平扩展。但是,将Raven作为Windows服务运行或通过IIS运行它似乎有几个注意事项。

  • 安全性 - Raven服务更安全,或者使用IIS是否允许我更灵活地通过IP地址,.NET成员资格等进行限制。
  • 缓存 - 似乎IIS是此功能的最佳选择
  • 架构 - 由于我不希望任何第三方访问数据存储,因此通过IIS公开Raven真的很有意义。此外,Raven与各种UI和实用程序之间会有一个业务层,因此涉及IIS似乎是不必要的,可能会带来不必要的复杂性。
  • 性能 - 对于每个请求,IIS管道可能比Windows服务
  • 具有更多开销
  • 扩展 - 使用IIS可能更难以跨多个服务器扩展,而不是仅使用小批量文件安装Raven服务

EDITED

我可以理解使用Raven的嵌入式配置,如果您拥有的只是一个Web客户端,但是当您拥有多个不同的客户端时,需要独立公开Raven的API以防止单个客户端锁定数据文件。

2 个答案:

答案 0 :(得分:16)

Jedatu, 我们通常在IIS中托管RavenDB,它使一些事情变得更容易,特别是当IIS负责所有激活等时,服务器的管理更容易。 我们没有看到任何有意义的性能差异,IIS有更好的选择进行细粒度管理。

答案 1 :(得分:5)

  

安全性 - Raven服务更安全,或者使用IIS是否允许我更灵活地通过IP地址,.NET成员资格等进行限制。

使用单独的流程更安全。

  

缓存 - 似乎IIS是此功能的更好选择

数据库缓存(缓存实体文档)与IIS缓存(缓存生成的页面或部分页面)不同

  

架构 - 由于我不希望任何第三方访问数据存储,因此通过IIS公开Raven真的很有意义。此外,Raven与各种UI和实用程序之间会有一个业务层,因此涉及IIS似乎是不必要的,可能会带来不必要的复杂性。

访问Data文件夹的任何人都可以使用raven打开它。除非您使用Windows安全功能保护它,否则无论它位于何处。

  

性能 - IIS可能比Windows服务具有更多开销

你是指冷启动吗?使用嵌入式Raven会删除客户端和服务器之间的HTTP请求。

  

扩展 - 使用IIS可能更难以跨多个服务器扩展,而不是仅使用小批量文件安装Raven服务

多个服务器需要一个单独的Raven实例,所有IIS都可以与之通信。