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

Architecture 我应该将RavenDB作为windows服务运行还是通过IIS运行?,architecture,ravendb,Architecture,Ravendb,我正在考虑使用RavenDB作为应用程序的数据存储,该应用程序很可能具有HTML UI、WebService UI和访问数据的服务器实用程序。使用RavenDB的一个原因是它通过复制和分片提供了水平扩展。然而,似乎在将Raven作为windows服务运行或通过IIS运行时需要考虑几个因素 安全性-Raven服务是否更安全,或者使用IIS是否允许我更灵活地限制IP地址、.NET成员资格等 缓存-似乎IIS是此功能的更好选择 架构-因为我不希望任何第三方访问数据存储,所以通过IIS公开Raven真

我正在考虑使用RavenDB作为应用程序的数据存储,该应用程序很可能具有HTML UI、WebService UI和访问数据的服务器实用程序。使用RavenDB的一个原因是它通过复制和分片提供了水平扩展。然而,似乎在将Raven作为windows服务运行或通过IIS运行时需要考虑几个因素

  • 安全性-Raven服务是否更安全,或者使用IIS是否允许我更灵活地限制IP地址、.NET成员资格等
  • 缓存-似乎IIS是此功能的更好选择
  • 架构-因为我不希望任何第三方访问数据存储,所以通过IIS公开Raven真的有意义吗。此外,Raven与各种UI和实用程序之间还有一个业务层,因此涉及IIS似乎是不必要的,可能会带来不必要的复杂性
  • 性能-IIS管道在每个请求上的开销可能比windows服务更多
  • 扩展-使用IIS跨多个服务器扩展可能比只安装带有小批处理文件的Raven服务更复杂
已编辑

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

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

使用单独的进程更安全

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

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

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

任何访问数据文件夹的人都可以使用raven打开它。它位于何处并不重要,除非您使用windows安全功能保护它

性能-IIS的开销可能比windows服务大

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

扩展-使用IIS跨多个服务器扩展可能比只安装带有小批处理文件的Raven服务更复杂

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

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

这是有用的信息,但是我不知道您建议在这种情况下使用哪种选项?我只是说您的考虑不是很有效。如果可以的话,我会去服务的。看起来更健壮,伸缩性更好。拥有自己的专用内存也会有所帮助,IIS应用程序池无法将其加载。对于RavenDb.@Pure.Krome,Ayende总是说IIS服务器>windows服务。您是否碰巧有Ayende对该问题发表评论的链接?我好像什么也找不到。