标签: scalability

为什么我的scala期货不是更有效率?

我在32位四核Core2系统上运行此scala代码:

def job(i:Int,s:Int):Long = {
  val r=(i to 500000000 by s).map(_.toLong).foldLeft(0L)(_+_)
  println("Job "+i+" done")
  r
}

import scala.actors.Future
import scala.actors.Futures._

val JOBS=4

val jobs=(0 until JOBS).toList.map(i=>future {job(i,JOBS)})
println("Running...")
val results=jobs.map(f=>f())
println(results.foldLeft(0L)(_+_))
Run Code Online (Sandbox Code Playgroud)

(是的,我知道有多少更有效的方式来总结一系列整数,它只是给了CPU事做).

根据我设置JOBS的内容,代码在以下时间运行:

JOBS=1 : 31.99user 0.84system 0:28.87elapsed 113%CPU
JOBS=2 : 27.71user 1.12system 0:14.74elapsed 195%CPU
JOBS=3 : 33.19user 0.39system 0:13.02elapsed 257%CPU
JOBS=4 : 49.08user 8.46system 0:22.71elapsed 253%CPU
Run Code Online (Sandbox Code Playgroud)

令我感到惊讶的是,这并没有真正扩展到超过2个未来"在游戏中".我做了很多多线程C++代码,毫无疑问我可以很好地扩展到4个内核,如果我用英特尔的TBB编写这类东西,或者boost::threads当然会更加冗长,那么可以看到> 390%的CPU利用率).

那么:发生了什么,如何扩展到我希望看到的4个核心?这是否受到scala或JVM中某些内容的限制?它发生在我身上我实际上并不知道"哪里"scala的期货运行...是每个未来产生的线程,还是"Futures"提供专用于运行它们的线程池?

[我在使用sun-java6(6-20-0lennny1)的Lenny系统上使用来自Debian/Squeeze的scala 2.7.7软件包.]

更新:

正如Rex的回答中所建议的那样,我重新编码以避免创建对象.

def job(i:Long,s:Long):Long = {
  var t=0L
  var v=i
  while (v<=10000000000L) …
Run Code Online (Sandbox Code Playgroud)

performance multithreading scala scalability future

17
推荐指数
1
解决办法
1853
查看次数

在Riak中存储二进制数据的缺点?

在Riak中存储二进制数据有什么问题?

它是否会影响群集的可维护性和性能?

使用Riak而不是分布式文件系统之间的性能差异是什么?

database scalability nosql riak

17
推荐指数
2
解决办法
6319
查看次数

在prolog中进行大规模编程

我试图保持我的Prolog代码模块化,我想知道是否有人对如何做到这一点有任何建议.我用简单consult的方式做这个的方式,但随着我的文件数量的增加而变得越来越麻烦,并且因为命名冲突而屈服.是否存在类似于"典型"导入的构造,例如

%-------------------------------------------------------------------- compiler.pl

[ scanner, parser, codegen ] .

%-------------------------------------------------------------------- compile

% compile( S, I ) :- Compiling the source string S gives the list of instructions
%                    I

compile( S, I ) :- scan( S, T ), parse( T, A ), codegen( A, I ) .

%-------------------------------------------------------------------------------%
Run Code Online (Sandbox Code Playgroud)

在源文件的顶部?如果它是特定于程序的,我正在使用gprolog.在此先感谢您的帮助.

modularity scalability module prolog gnu-prolog

17
推荐指数
3
解决办法
1227
查看次数

SharePoint列表可伸缩性

我对文档库特别感兴趣,但就一般的SharePoint列表而言,任何人都可以回答以下内容......?

  1. SharePoint列表可以包含的最大项目数是多少?
  2. 单个SharePoint服务器可以托管的最大列表数是多少?
  3. 当列表中的项目数接近最大值时,过滤速度是否会减慢,如果是这样,可以采取哪些措施来改进它?

sharepoint scalability

16
推荐指数
1
解决办法
3万
查看次数

LINQ的可扩展性如何?

最近与同事的对话产生了不同的观点.什么说你,SO成员?

我知道,甚至可扩展性的概念也可以采用许多不同的方式和背景,但这是讨论的一部分.每个人似乎都对可伸缩性的真正含义有不同的看法.我很想知道这里的变化也是如此.事实上,我只针对这个概念发布了一个问题.

.net linq scalability

16
推荐指数
4
解决办法
1845
查看次数

我应该为我的高性能Web服务选择哪种编程语言?

我正在为我的应用程序构建Web服务API.此外,我计划通过REST和SOAP公开服务.

我有兴趣从社区获得一些关于我应该选择哪种编程语言来实现服务的反馈?(我知道C#,Java和Ruby - RoR足以创建服务).

该服务主要是HTTP POST服务.它需要处理大约2000个并发连接,并且每秒能够处理大约10,000个HTTP POST.(对于SOAP,我们将有一个提交方法供客户端调用).

对于POST请求,该服务不会向客户端返回任何响应.

有关应该使用哪种编程语言/架构的想法?

architecture performance programming-languages web-services scalability

16
推荐指数
6
解决办法
3万
查看次数

Python数据库扭曲

Twisted应用程序有一个API可以以可扩展的方式与数据库通信:twisted.enterprise.dbapi

令人困惑的是,要选择哪个数据库?

该数据库将有一个Twisted应用程序,主要是进行插入和更新以及相对较少的选择,然后其他严格只读客户端正在访问数据库直接进行选择.

(只读用户不一定选择Twisted应用程序正在插入的数据;它不像数据库被用作消息队列一样)

我的理解 - 我想纠正/建议 - 是:

  • Postgres是一个很棒的数据库,但是几乎所有的Python绑定 - 以及它们中令人困惑的迷宫 - 都是弃用的
  • postgres 有psycopg2,但这对于做自己的连接池和事情会产生很多噪音; 这是否与Twisted异步数据库连接池优雅/有用/透明地共存?
  • SQLLite对于小东西来说是一个很棒的数据库,但是如果以多用户方式使用它会进行全数据库锁定,那么性能会影响我设想的使用模式; 它还有不同的键值列表机制?
  • MySQL - 在Oracle收购之后,谁想要现在采用它或采用分支?
  • 还有什么吗?

python database rdbms scalability twisted

16
推荐指数
2
解决办法
6349
查看次数

没有PHP经验的人应该使用像CakePHP或Symfony这样的框架吗?

我有一个简单的开发网站,我想学习PHP.我希望该网站安全,可扩展且易于维护.我应该同时学习框架和PHP吗?如果我构建一个框架,将会有许多不熟悉的代码.你会说这增加了安全隐患吗?

php security symfony1 scalability cakephp

16
推荐指数
1
解决办法
1896
查看次数

使用Redis可扩展的延迟任务执行

我需要设计一个Redis驱动的可扩展任务调度系统.

要求:

  • 多个工作进程.
  • 许多任务,但长时间的闲置是可能的.
  • 合理的计时精度.
  • 闲置时资源浪费最少.
  • 应该使用同步Redis API.
  • 应该适用于Redis 2.4(即即将推出的2.6中没有功能).
  • 不应该使用RPC的其他方法而不是Redis.

伪API : schedule_task(timestamp, task_data). 时间戳以整数秒为单位.

基本理念:

  • 在列表中收听即将发生的任务.
  • 每个时间戳将任务放入存储桶.
  • 睡到最近的时间戳.
  • 如果出现时间戳小于最接近的任务的新任务,则唤醒.
  • 使用时间戳≤现在,批量处理所有即将执行的任务(假设任务执行速度很快).
  • 确保并发工作程序不会处理相同的任务.同时,如果我们在处理它们时崩溃,请确保没有任何任务丢失.

到目前为止,我无法弄清楚如何在Redis原语中使用它...

有线索吗?

请注意,有一个类似的旧问题:使用Redis延迟执行/调度?在这个新问题中,我介绍了更多细节(最重要的是,许多工人).到目前为止,我无法弄清楚如何在这里应用旧答案 - 因此,这是一个新问题.

scalability scheduled-tasks redis

16
推荐指数
3
解决办法
1万
查看次数

使用kafka作为消息代理为桌面/移动/ Web应用程序创建实时推送通知系统

我有一个用例,需要按照发布/订阅消息传递模式在服务器和客户端之间进行实时通信.生产者将是java,节点等服务器,客户端将是 - java桌面应用程序,移动应用程序(android/ios),浏览器(javascript).

我已经探讨了下面讨论的许多选项,但我无法提出强大的可扩展解决方案.

使用案例:服务器将发布各种主题的通知/消息,订阅一组主题的所有客户端(java/js/ios)将实时获取这些消息.

我按照3种方法解决了这个问题1> socketIo/socketcluster 2>使用mosquitto/rabbitmq作为代理探索了mqtt协议.3>探索卡夫卡

主要目标是使该架构具有高度可扩展性,不仅可以同时拥有超过百万个客户端连接,而且每秒可以发布和消耗超过百万条消息.

第一种方法很简单,但它可以工作,但webSocket不是可扩展的解决方案.

第二种方法可行,但是rabbitmq将创建大量队列(百万个客户端的百万个队列),因为它为每个连接到它的客户端维护队列,而且RabbitMq没有高消息发布和消耗率,加上假设我们有一个集群RabbitMQ的节点那么只有一个节点用于处理请求和其他的用于高可用性,但不平行的消耗.

第三,我探索了kafka,它以我的基准着称,我使用kafka的高级java api在java中创建客户端,可以用来订阅kafka主题,并且发布到该主题的任何消息都可以实时传递给客户端.

所以我的问题是使用kafka客户端进行实时推送通知有多好,其中所有的Java桌面应用程序(可能是一百万)将包含这个kafka java客户端sdk并将订阅某些主题,在这里我对待每个客户端作为消费者群体.

而且,这里一个主要问题是,这卡夫卡的客户是规模大,由于其阶依赖,因此使用此客户端Android将不会是一个很好的选择,也是我不认为它会奏效.

MQTT擅长在这里,因为它有针对Android,JAVA,IOS等官方phao客户

此外,我还没有在网上使用kafka看到用于百万消费者的发布/订阅消息传递的示例,大多数人正在将其用于数据管道,例如:实时日志处理,向HDFS提供数据,分析引擎等,流处理.

主要问题是我如何使用mqtt协议(适用于android/ios/web/iot)和kafka作为消息代理(具有较高的发布/订阅率)并为此问题提出可扩展的解决方案.

我的用例在某种程度上也类似于uber,其中有数百万的android/ios设备(客户端),我们实际上可以看到我们在地图上所有汽车的实时移动,有没有人知道后面的架构是什么这些实时跟踪汽车.

scalability real-time publish-subscribe rabbitmq apache-kafka

16
推荐指数
1
解决办法
8502
查看次数