背景:我正在编写一个 Web 应用程序,该应用程序将以软件即服务的形式向全世界提供。作为我选择数据库平台的参考,我一直在阅读有关“NoSQL”数据库的资料,例如 Cassandra、Riak、MongoDB 和 Redis。复制、分片和分区是所有这些数据库的功能集中的突出部分。
我最终会选择其中一个并继续开发,但令我困扰的是,我是否真的能够在生产中充分利用数据库分片/分发的所有优点。
我是一家单人创业公司,生产技术基础设施由一个运行 Centos 的 SliceHost 切片组成。我从未想过要运行自己的服务器硬件。我现在只想了解当我的产品获得巨大成功时我可以采用哪种服务器架构。:-)
人们如何在 VPS 环境中设置服务器集群来支持他们精巧的 NoSQL 数据库分布方案?在大多数(所有?)情况下,数据库产品都希望在私有 LAN 上运行,因此缺乏支持跨越混乱的互联网世界的集群所需的身份验证机制。如何在“云”中建立私有 LAN?VPS 提供商提供这种服务吗?SliceHost 似乎提供私有 IP 地址但这些地址可供所有客户访问;并不局限于某一特定客户。
答案1
首先,不要添加高度可扩展的 NoSQL 数据存储在你需要这种级别的表现之前。在初始开发期间,当您获得第一批数千名客户时,您可能只需使用一个强大的 SQL 数据库即可正常运行。请继续使用经过验证的解决方案,直到您需要更多解决方案为止;特别是如果您的应用程序开发框架具有某种需要 SQL 数据库的对象关系映射器层。
如何在“云”中建立私有局域网?
取决于提供商,没有标准解决方案。一些提供商可能没有这个(您提到 Slicehost 的“私有”IP 可供所有 Slicehost 客户访问)。
Amazon EC2 具有内置防火墙,称为“安全组”。默认情况下,只有您控制的服务器才能相互发送 IP 数据包;您可以对这些规则进行细粒度的管理。Rackspace Cloud Server 的支持聊天表示,他们的专用网络连接对于每个客户帐户都是私有的(可能这意味着使用了某种类型的每个客户 VLAN)。其他优点PaaS 提供商应该有类似的东西;如果没有,您可能需要考虑更换提供商。
对于不提供真正私人子网的提供商,您可以:
- 在每个主机上安装防火墙(Linux IPTables,或使用 Ubuntu 上的 UFW、Shorewall 等前端)
- 或使用主机到主机的 VPN,例如 OpenVPN
这种方法可行。但是它增加了复杂性,而且恕我直言,这否定了额外主机的简单配置(因为当您添加新服务器时,您还需要更改防火墙规则以允许新的“私有”IP)。简单配置确实是人们希望从 PaaS 提供商那里获得的关键部分。
答案2
无论数据库是什么类型,您都不希望将其暴露给外界,因此您需要将连接限制在获得授权的主机上。
我对 nosql 系统一无所知,但是由于您计划使用slicehost 服务器,那么使用 iptables 限制连接就很简单了,这样连接就明确设置为只允许它们之间的流量(通过它们的私有 ip 地址),从而设置相当于您自己的私有局域网。
答案3
我正在研究 IPSec 是否可以用于我们启动时的相同场景。本质上,IPSec 具有此身份验证标头子协议,它可以根据给定 IP 数据包的 md5/sha-1 校验和是否与有效负载 + ip 匹配来对其进行身份验证。现在的转折是,我们可以指定一个共享密钥,该密钥也将用于计算数据包的校验和。如果发送方不知道该密钥,他将无法计算出收件人可以验证的校验和,因此数据包将被视为损坏而被丢弃。
我们可以有效地根据共享秘密对 LAN 上的节点进行分组,并且只有组内节点可以相互发送 IP 数据包,从而解决此问题。