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