我正在开发一个网站,我打算使用单个 Web 角色在 Windows Azure 中运行。该站点将使用需要作为 Windows 服务运行的 Sphinx 搜索引擎。所以,我的问题是……是否可以在 Web 角色中安装 Sphinx Search Windows 服务。
从我对 Azure 的初步研究来看,我认为“是”,因为 Web 角色是运行 IIS 的 VM。因此,我应该能够远程安装该服务,并且它应该可以工作。:)
这听起来对吗?
我正在开发一个网站,我打算使用单个 Web 角色在 Windows Azure 中运行。该站点将使用需要作为 Windows 服务运行的 Sphinx 搜索引擎。所以,我的问题是……是否可以在 Web 角色中安装 Sphinx Search Windows 服务。
从我对 Azure 的初步研究来看,我认为“是”,因为 Web 角色是运行 IIS 的 VM。因此,我应该能够远程安装该服务,并且它应该可以工作。:)
这听起来对吗?
对于 Web/Worker 角色实例,通过 RDP 安装软件不是一个可行的解决方案,因为这些更改不会持续存在。您需要从启动脚本或从OnStart()
. 由于您想作为服务安装,这意味着启动脚本,因为它需要提升的权限。注意:安装程序必须支持无人值守模式,其中所有参数都通过命令行指定,无需人工干预。
可扩展性如何?如果您的 Web 角色有多个实例在运行,那么 sphinx 可以跨两个实例运行吗?根据我的阅读,它支持兼容 ODBC 的数据库,并且您可以将它用于 Windows Azure SQL 数据库。如果是这种情况,两个 sphinx 引擎可以在访问同一数据存储的两台不同机器上运行吗?如果是这样,这听起来像是一个可行的解决方案。
如果安装无法自动化,或者您需要一些额外的东西,例如 MySQL,您可能需要考虑将 sphinx 搜索引擎放在虚拟机中(2012 年 6 月新增)。现在您可以启动 Windows 2008 Server,将 RDP 放入其中,按照您的需要进行配置。
严格来说是的,你可以这样做。但是,这假设您将在一个 VM 实例上运行,并且该实例永远不需要重新启动。
您应该考虑查看 Azure 辅助角色以了解通常作为 Windows 服务存在的任何功能。
在阅读了您的答案并进行了更多思考之后,我认为放弃安装服务的想法将是最好的行动方案。我一直在研究 Lucene.NET 的 API(这可能与 Sphinx 相同),并且可以在代码中封装索引的编写/管理等,因此不需要服务。
对于 Azure,有一个库可以使用本地和 Azure 存储来管理索引文件,这可能是有用的。我读过的场景表明,可以有一个 Web 角色来处理 HTTP 请求并执行搜索,还有一个 Worker 角色来通过队列接受数据库更改并将它们写入索引。