我上个月开始在一家新公司工作。我将负责 SAAS 的基础设施和后端。
我们目前为每位客户提供一个液滴/实例。在公司现阶段,这是一个不错的选择。但是将来当实例数量增加时,将难以维护。目前有 150 个实例在线,每个实例有 1CPU 和 1GB 内存。
我们的客户只在一周、一个月或一年的时间内使用这些环境。所以大多数时候,他们什么都不做。所以我们想改变这一点。我正在考虑 Kubernetes、Docker Swarm 或其他工具。
你能给我们什么建议?我们应该向 Kubernetes 或 Docker Swarm 迈出一步,还是继续使用 DigitalOcean、AWS 或 GCP 的液滴/虚拟机?
如果我们迁移到 AWS 或 GCP,我们的平均价格将从 5 美元 p/m 上升到 10 美元 p/m 以上。
我们要采取下一步措施来降低资源浪费,同时还要考虑每月的账单。在我看来,最好让 2 个我们的 3 个更大的 VM 运行 Kubernetes 或 Docker Swarm,以降低每月的账单并减少我们的预留资源。
你怎么看?
最佳答案
如果您对扩展很认真,那么您应该 重新思考你的应用架构 .计算中最昂贵的部分是内存 (RAM),因此每个客户拥有专用内存将无法扩展。
您应该将这种逻辑分隔移至 ,而不是通过使用小滴来分隔客户。数据层 .因此,每个客户都可以使用相同的横向扩展计算服务器和数据库,但软件会根据数据库中的用户标识符分离他们的数据和访问。
想一想... 邮箱 为每个特定客户保留 RAM?不,每个人都使用相同的计算和数据库,但软件将他们的消息与其他用户分开。这使他们能够扩展到大量客户,而无需为每个客户分配资源。
这是另外几个例子......
阿特拉斯 曾经拥有你所拥有的。每个 JIRA Cloud 客户都将被分配有自己的虚拟机,包括 CPU、RAM 和数据库。他们不得不将他们的数据中心扩大到一个疯狂的规模,而且非常昂贵!
然后,他们开始了向 Multi-Tenancy 迁移的旅程,首先将数据库与每个客户分开(并使用公共(public)数据库池),然后迁移到共享微服务,最终他们删除了每个客户的所有资源。
看:
销售人员 从一开始就选择 Multi-Tenancy 。他们定义了 SaaS 的概念,并习惯称自己为“云”(在我们现在所知道的云计算之前)。虽然他们的系统被分片以允许扩展,但多个客户在一个分片中共享相同的资源。客户数据的分离是在数据库级别完成的。
看:
底线:当然,您可以尝试使用容器围绕当前架构进行优化,但如果您想认真考虑规模(我说的是 10 倍或 100 倍),那么您需要 重新思考架构 .
关于amazon-web-services - 我们项目的新基础设施(AWS、GCP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58783484/