我有个应用程序..。
该应用程序为金融产品做了一个市场比较--对于给定的报价请求,它会联系其他几个网站获取它们的报价。然后,它给用户结果-几个引号他们的细节。
为了管理这些请求,它们被保存到MySQL,然后我的应用程序启动,取起挂起的引号,并将其放入线程(都是相同的Linux框)来处理每个站点查找。
我使用JRuby,因为我有与线程/db相关的问题。使用Java线程池来控制线程数。使用当前的硬件/VPS,它可以处理大约200个线程。很多限制似乎都与每个线程抓取自己的MySQL连接有关--获取引用的细节并保存结果。我们想要处理更多的并发线程,因此寻找扩展的方法。
想知道该走哪条路..。
从这个链接Reasons for NOT scaling-up vs. -out?看,这个问题似乎适合运行更多的机器来解决它。
所以,任何关于该走哪条路的想法.
干杯,克里斯
发布于 2013-01-08 21:08:14
我处理此类问题的通常方法是非常密切地关注您正在进行的数据库查询,并对它们进行积极的调优。只检索所需的内容,跳过未显式使用的列,并非常小心地加载不需要的全部内容。
您经常会发现,通过添加索引或在数据库中对某些属性进行战略性的去规范化以避免丑陋、耗时的JOIN操作,您可以获得显著的速度提升。
此外,考虑一下缓存:最快的数据库调用是从未进行过的调用。要想利用Memcached这样的工具来保存一个比较耗时的记录检索的结果并不难,如果仔细做,甚至很容易使其失效和过期,只要您通过几种方法引导您的更新。
对于调度工作人员,可以在Redis中实现一个简单的先入先出队列,以从MySQL本身卸载大量处理开销。这通常是非常简单的添加,如果您遵循一个例子。
像Memcached这样的缓存可以处理极高的流量,因此,只要有可能,都要对此进行缓存,以避免每次访问数据库。
如果您已经用尽了这些选项,那么现在是需要更多前端服务器和更多数据库容量的时候了,但只有到那时。
发布于 2013-01-08 21:15:39
对你来说,查询是最容易实现的。使用像这样的东西:http://beanstalkd.github.com/beaneater/
基本上,您可以使用async.来添加您的方法,这将使它们进入队列并执行它们。它们的队列和工作人员可以是同一台服务器,也可以是不同的服务器。
https://stackoverflow.com/questions/14223909
复制相似问题