Articles of 可伸缩性

我如何扩展我的RoR应用程序?

我正在开发一个Ruby On Rails应用程序,并希望在生产环境中进行部署。 我有可以使用多个相同configuration的Ubuntu Web服务器,但我不知道如何在多个主机上扩展RoR应用程序和数据库数据。 我想在每个主机上都放置一个Web服务器和一个数据库服务器。 在Web服务器/ ruby​​中间件方面,我希望会话由Web服务器/ ruby​​中间件层进行负载均衡的主Web服务器控制。 它应该交出新的会议释放主机。 我需要在Web服务器/ruby中间件一侧进行负载平衡。 Web /中间件会话应该是primefaces的(我没有兴趣在多个主机上复制它们) 我希望将尚未保存到数据库的事务数据logging到中间重做日志中 – 在失败恢复的情况下重新运行。 在数据库层: 我希望将任何一台主机上的数据库数据复制到另外两台主机上。 (每个DB集有3个DB主机) 我不希望跨所有主机复制数据库数据,因为它需要很长时间 – 延迟。 我想把一个algorithm,将'创build'types的请求引导到正确的数据库。 想到负载平衡。 数据库主控制器应该知道哪个3-DB设置为“更新/读取/删除”请求。 我的testingWeb服务器是webrick,后端数据库是Postgresql(尽pipe这对于RoR来说并不重要)。 我相信我需要将sessionId绑定到每个事务,并且还要保留一个重做日志,以便在发生故障后需要重新加载会话。 还有什么其他devise问题可能会遇到? 另外,我应该使用什么Web服务器和数据库服务器来做烦琐的工作? 主DB和主Web服务器有什么好的select? 我知道这是一个跨越多个知识领域的复杂问题。 我想知道我所问的是否可能。

在2共享主机中分离数据库和网站文件是一个好主意吗?

你认为如果我分开的数据库和文件将使其performance更好? 这是很容易的事情吗? 如果我稍后再升级到2 VPS,我可以做同样的事情,而不会同时影响?

单独的mysql农场之后的下一个可伸缩性步骤是什么?

我正在运行一个快速增长的Saas服务。 客户是电子商务网站,我们在每个客户网站的每个页面浏览量(目前是10M点击量/天)都会受到影响。 当前的体系结构是Mysql主/从场(在EC2上使用scalr.net运行)。 我们不断增加新的客户到农场,直到索引占用RAM的70%,然后为下一个客户打开一个新的农场。 显然,随着我们的发展,这个架构正在成为一个问题,原因有两个:1)一旦客户或less数客户在他们的网站上stream量很大,他们所在的农场就可能成为瓶颈。 2)目前我们有4个农场,但是我们可以很容易地到达很多难以维护的农场。 你会推荐什么样的策略来实现长期增长? 大部分数据适用于密钥存储。 我们没有外键和less量的连接。 谢谢!

在EC2上缩放video处理应用程序?

我迫切需要扩展在EC2上运行的video处理应用程序。 到目前为止,设置是一台机器: Backbonejs前端Rails 3.2 Postgresql Resque + S3存储 该应用程序的stream程如下: 1)来自前端的请求。 上传video。 2)存储video3)查询外部API。 4)处理/编码video。 5)发布到前端。 我可以分开后端和前端没有任何问题,但是当涉及到分布在几个服务器之间的后端,我有点困惑。 我可能会想出一个临时解决scheme(就像复制应用程序创build多个实例),但由于我没有真正的后端系统pipe理专业知识,可能会有一些基本的错误。另外,我宁愿有一些可扩展的。 我想知道有没有人可以对下面的计划提供一些反馈意见: A)前端机器。 就在前端,通过REST Api来进行后端对话。 B)后端服务器(BS),主数据库。 从1)获取请求,发布到2)将上传保存到3)C)S3存储。 D)用于查询API的服务器。 基本上只是一个Resque工作人员,该信息发回到2)E)服务器video编码。 处理3)上传的video并上传回去。 所以我会有: A)frontend \ \ B)MAIN_APP/DB —– C)S3 Storage (Files) / \ / / \ / D)ExternalAPI_queries E)Video_Processing (redundant DB) (redundant DB) 所有这些都会通过HTTP请求相互通话。 我之所以这样做,是因为video处理部分是最耗费资源的部分,我只是运行准备接受请求并开始处理它们的准系统应用程序。 问题: 1)在这种设置中,我将在B)的主数据库和所有其他服务器将通过HTTP请求(并存储数据库的重复也我猜…出于安全原因)与它通信。 这是正确的方法,或者我应该有一个数据库,每个人都连接到(如何?) 2)从video处理部分分离API查询是一个好主意吗? 从逻辑上说,它们非常接近(处理由API查询的结果决定),但是资源方面的video处理则更encryption集。 3)我应该使用什么来分配基于负载的后端应用程序之间的呼叫?

在上菜之前先使用varnish检查html静态

我正在考虑编写一些逻辑到我的应用程序,以便它可以将静态页面内容写入s3或某个CDN,并主要从那里开始。 但是我不确定这是否可能。 例如,我有site.com/something,它应该首先在cdn中查找,如果不存在,则从varnishcaching或nginx / php-fpm提供服务。 这个想法是把stream量从服务器上拿走。 这是一个可能的情况? 在drupal中,我看到了一个模块来做到这一点 。 它将静态文件caching存储在磁盘中,并在其中存在。 下面是他们提供的图表。 他们问下面的.htaccess除外 # RewriteBase / ### BOOST START ### # Allow for alt paths to be set via htaccess rules; allows for cached variants (future mobile support) RewriteRule .* – [E=boostpath:normal] # Caching for anonymous users # Skip boost IF not get request OR uri […]

创build一个数据库的可伸缩性

我知道这听起来像一个编程问题,这意味着它应该是在计算器上,但我相信服务器pipe理员担心这个更多,我不只是寻找这个问题的编程答案。 我如何创build一个数据库的可扩展性? 我在http://www.slideshare.net/vishnu/livejournals-backend-a-history-of-scaling中间,我不能读ATM,需要离开。 但是我想知道更多关于创build一个可以很好扩展的数据库。 它提到并发生在我脑海中的东西是 单独的句柄读取和写入? 当一台服务器忙(IO或CPU绑定),我需要两个服务器写入? 我是否创build多个数据库? 在用户上有一个clusterId? 将用户迁移到另一个群集时会出现问题吗? 我可能代码这样,用户ABC在数据库A在群集A和数据库B在群集B具有相同的主键? 当我把上面的集群C? 这是否意味着我需要编写很多代码将它们移动到另一个集群/数据库? 为了使上述不是一个问题,我不会使用PRIMARY KEY并通过阅读其他群集上的其他数据库手工设置ID? 等等

跨AWS节点共享/复制EBS

我想跨多个EC2节点(networking/应用程序服务器)使用单个EBS存储。 我已经阅读了关于快照分享的一些文章,但是这并不适合我们所需要的。 我们使用文件系统来存储数据库logging附件,所以如果创build了一个这样的附件,我们需要它立即可用于所有节点(服务)。 到目前为止,只有NFS似乎是可行的,但configuration和维护是一个痛苦。 另一个select可能是将这些附件存储在S3上,但是这会使我们不能对这些数据进行任何分析。 在AWS中进行扩展时,这一定是非常普遍的问题,那里有什么解决scheme?

推子数据库到主数据库?

说,我有一个很大的数据库globalclients 。 现在,我把这个大数据库分成100个子数据库,如下所示: chinaclients japanclients koreaclients indiaclients brazilclients etc. 每个人在相应的国家运行。 现在,我想对所有的数据库做一些分析。 我想首先将它们全部合并到主数据库中:一些表格被完全合并,并且在合并之前合并一些表格: customer_contact: merged entirely product_sales: `select sum(sales), … group by month` before merging 你有什么build议吗? 与这种技术有关的英文术语是什么? “同步”还是别的? 如果我只能从子数据库上传差异,这将是一个很大的好处。 我不知道我是否可以在数据库级别做到这一点,在Java中“同步”分布式数据库将是一项复杂的任务。 PostgreSQL-8.4有没有支持?

你使用什么技术来devise和扩展水平(在EC2)的Web应用程序?

具体而言,我正在寻找扩展在云中没有中央数据库服务器的Web应用程序的技术,但一般的build议是非常棒的。 我遇到了GlusterFS ,看起来不错,但我还不清楚它如何适应Web应用程序的体系结构。 这对我也很有趣。 感谢您的build议和链接。

在1个服务器节点上有多个MySQL数据库有什么缺陷?

我想准备我的数据库在将来分片。 但是现在我只需要一个节点。 我想要做的是把数据库分成虚拟碎片,比如说12个碎片,然后把它们全部放到同一个服务器节点上。 当我需要扩展时,我可以获得第二台服务器,并将12个虚拟碎片中的6个移动到新机器上。 一台机器上有12个不同的数据库有什么缺陷吗? 我还可以只运行1个MySQL实例来支持这12个数据库吗? 有12个数据库导致更高的内存使用率? 这是否需要拥有12X的数据库连接? 任何其他陷阱? 谢谢。