我正在使用 Ruby on Rails 创建一个用于照片共享的社交应用程序(非常简单)。我使用一些 Rails 依赖项和 MySQL 作为数据库。我还需要使用我已经购买的自定义域。
我有些疑惑:
如果我的应用程序需要快速扩展,DigitalOcean 是否足够?
我可以访问允许我安装和更改 Rails 方面的 shell 吗?
我可以完全访问 MySQL,包括备份和其他东西吗?
初学者应用程序有更好的解决方案吗?
我正在使用 Ruby on Rails 创建一个用于照片共享的社交应用程序(非常简单)。我使用一些 Rails 依赖项和 MySQL 作为数据库。我还需要使用我已经购买的自定义域。
我有些疑惑:
如果我的应用程序需要快速扩展,DigitalOcean 是否足够?
我可以访问允许我安装和更改 Rails 方面的 shell 吗?
我可以完全访问 MySQL,包括备份和其他东西吗?
初学者应用程序有更好的解决方案吗?
有两种方法可以选择像 Heroku 这样的 PaaS 提供商,或者像 DigitalOcean 这样的 IaaS 提供商。
对运行应用程序的实际架构的可见性较低,更容易扩展,但成本更高。此外,当您的可见性较低时,您就不会专注于微调代码和使用简单的架构选择来提高性能而不增加复杂性。
您对所有事情负责,这意味着您将需要花费更多时间进行初始设置并找出一些新事物;但是你会更好地了解你的应用程序如何与硬件交互,以及你需要调整哪些元素来扩展。
您可以提前猜测您网站的哪个部分将最难扩展时间;但归根结底,无论您计划多少,最终都会遇到瓶颈。因此,您可以采取一些简单的步骤,这些步骤会在您遇到性能障碍时延迟,并且在您这样做时更容易扩展:
专用数据库实例- 从一开始就将您的数据库服务器移至其自己的虚拟机。数据库服务器、缓存服务器和应用服务器的工作负载不同,它们在处理单个特定任务时得到最佳优化。您还可以将 VM 的所有资源用于 DB。
Nginx 负载均衡器- 现在您的数据库位于单独的服务器上,您可以创建传统的应用程序/Web 服务器。我建议您创建两个 Web 服务器并创建一个 Nginx 负载均衡器,可以将负载分散到这些机器上。这是更多的配置,但是当您添加服务器 #3、#4、#N 时,这是一个简单的配置更改。
缓存!- 缓存一切!它可能很简单,例如使用在您的数据库之前查询的 memcache,或者它可以为您网站上最常点击的 URL 或部分创建缓存页面,但缓存将显着改善您的加载时间,并让您提供更多的点击更少的服务器为您节省现金。
对象存储/内容- 如果您有大量内容组件,您应该从一开始就使用像 Amazon 的 S3 这样的对象存储。通过从一开始就将其集成到您的应用程序中,您以后不需要重新构建它。这将花费您更多的钱,但您还需要考虑您无需管理多个卷并处理出现的一些扩展问题而让自己头疼的问题。
配置管理:Puppet/Chef - 现在您有几种不同类型的服务器:DB、Web/App、负载均衡器、缓存 - 使用 Puppet 或 Chef 来设置它们是个好主意。同样,您将有一个学习曲线,但这意味着当您需要将 N+1 服务器添加到特定实例类型时,您需要 2 分钟,而不是 2 小时。
当然还有很多其他的考虑因素,但是您从一开始就采取的前瞻性步骤越多,您的扩展之路就越容易。无论您采取多少步骤,您仍然会遇到扩展问题,因此在 MVP 精益启动方法中平衡这一点很重要,这样您就不必花费数月时间来构建完美的基础架构设置,因为没有牵引力,它不会如果您拥有所有服务器,这很重要,因为它们不会受到大量流量的影响。
这篇文章背后的基本思想是,您的主要问题是 PaaS 与 IaaS,如果您走 IaaS 路线,DigitalOcean(因为我是联合创始人)是一个不错的选择,但最终您与 IaaS 提供商的最大胜利将是围绕做一个在设置应用程序时做出一些明智的决定。
听起来您的应用程序可以在 Digitalocean VPS 上运行。