<分区>
我要构建一个高性能的网络服务。它应该使用数据库(或任何其他存储系统)、一些处理语言(脚本或非脚本)和网络服务器守护进程。系统应该分布到大量的服务器上,以便服务运行快速可靠。
它应该复制数据以实现可靠性,同时它必须提供分布式计算功能以处理大量数据(主要是,对大型数据库的查询无法在具有合适响应水平)。缓存技术不在主题范围内。
我应该考虑哪些集群/云解决方案?
有很多单系统镜像 (SSI)、集群文件系统(可以是设计的一部分)、Hadoop、BigTable 克隆等项目。每个都有其优点和缺点,“关于”页面总是说解决方案很棒 :) 如果您尝试部署解决该主题的东西 - 分享您的经验!
UPD:它不是文件托管,也不是游戏,而是一些互动的东西。您可以将 StackOverflow 作为 Web 服务的示例:小块数据、半静态内容、密集型数据库操作。
Cross-Post on ServerFault
您确实需要更好地定义“大”。 “大”是一种愿望,还是您的营销部门* 认为他们会有硬性数字?
如果您可以使用简单的组件来做到这一点,那就去做吧。 Cassandra 和 Hadoop 之类的东西既不容易设置(尤其是后者)也不容易开发;能够有效开发此类应用程序的开发人员将非常昂贵且难以雇用。
所以我想说的是,开始使用您最喜欢的“传统”数据库,并使用适当的高可用性解决方案,然后等到接近极限(您始终可以衡量实际应用程序的极限在哪里,一旦构建完成,您就拥有了一个性能测试系统)。
请记住,Stack Overflow 使用非常传统的组件,只需使用少量商品硬件进行良好调整。这对于它的规模来说很好,但永远不会适用于(例如 Facebook),但开发人员知道 SO 的受众永远不会达到 Facebook 的水平。
编辑:
当“传统”技术开始失败时,例如您达到了可以在单个数据库实例上完成的操作的限制,那么您可以考虑分片或将功能分区到更多实例中(再次选择 HA 系统)。
您唯一需要其中一个(例如 Cassandra)“nosql”系统的情况是,如果您有一个具有非常高的写入要求和可用性要求的同构数据存储;即使那样,您仍然可以通过对传统系统进行分片来解决它——就像其他人(甚至 Facebook)有时所做的那样。