e***m 发帖数: 92 | 1 这是一个我碰到的实际问题,想和大家交流一下怎样设计软件架构.
有几万个数据源会持续地生成数据,我需要对每两个数据源之间做数学建模,建模需要
很多cpu cycle。随着新的数据的不断产生,建模要周期性的重复进行,建模的结果集
中存在一个数据库里。这个应用对latency要求比较高,而且数据源可能还会增加,自
然而然,建模和要用到的数据必须分布式的进行。
我不太想用Hadoop, storm,spark等通用的parallel computing框架,而是倾向于用比
较低层的parallel框架(比如vert.x,akka,finagle等)搭一个专门解决这个问题的架
构。请问大家有什么可推荐。 |
j********x 发帖数: 2330 | 2 kafka搭个cluster
这个应该数据传输是关键 |
z****e 发帖数: 54598 | 3 既然“建模要周期性的重复进行”
那这个怎么会对latency比较高呢?
你需要的应该只是一个异步构架吧?
需要能够迅速响应你的请求,而非长时间石沉大海一样的无影无踪
能够告诉你,它在working
vert.x配合rxjava应该够你用了
akka我反正当时用得很痛苦
scala一直给我感觉不是那么容易搞
另外你的数学模型处理本身也需要一个接口
还有楼上说的数据传输可能会成为瓶颈
vert.x的设计可以当一个司令部用
最近有个年代古老的卡通寄生兽有看不?
那个卡通大boss就是一个寄生兽头部控制四肢寄生兽的一个东西
如果是我来做,我就用vert.x当头
然后控制其他部位,每个部位写一个mod,然后deploy |
p*****2 发帖数: 21240 | 4
不明白为什么不用spark
【在 z****e 的大作中提到】 : 既然“建模要周期性的重复进行” : 那这个怎么会对latency比较高呢? : 你需要的应该只是一个异步构架吧? : 需要能够迅速响应你的请求,而非长时间石沉大海一样的无影无踪 : 能够告诉你,它在working : vert.x配合rxjava应该够你用了 : akka我反正当时用得很痛苦 : scala一直给我感觉不是那么容易搞 : 另外你的数学模型处理本身也需要一个接口 : 还有楼上说的数据传输可能会成为瓶颈
|
z****e 发帖数: 54598 | 5 没说不用啊
但是需要一个司令部
vert.x和spark可以一起用
【在 p*****2 的大作中提到】 : : 不明白为什么不用spark
|
e***m 发帖数: 92 | 6 谢谢大家的回复。
虽然建模要周期性的重复进行,但每次建完模,就需要立即知道模型以决定系统是不是
正常,所以对latency的要求很高。这可以被看作是一个实时监控系统。
相对于计算量来说,数据量并不大。因为是每两个数据源之间要做一次建模。如果有N
个数据源的话,就有N^2个建模。
我确实需要一个司令部来把数据源分发到不同的机器上,而且还要收集计算结果。
不太想用SPARK,因为这个问题里并没有太多的iteration,也没有什么中间变量要缓存
。SPARK可能不合适。当然,我没实战用过SPARK,不知对不对。另外,我一直觉得这个
问题很具体,对性能要求很高,不用SPARK而是直接从底层实现可能会更优化一些。
【在 z****e 的大作中提到】 : 既然“建模要周期性的重复进行” : 那这个怎么会对latency比较高呢? : 你需要的应该只是一个异步构架吧? : 需要能够迅速响应你的请求,而非长时间石沉大海一样的无影无踪 : 能够告诉你,它在working : vert.x配合rxjava应该够你用了 : akka我反正当时用得很痛苦 : scala一直给我感觉不是那么容易搞 : 另外你的数学模型处理本身也需要一个接口 : 还有楼上说的数据传输可能会成为瓶颈
|
z****e 发帖数: 54598 | 7 需要汇总数据,所以用vert.x比较容易解决这个需求
其他server的话,汇总数据要自己写,bus要自己建,vert.x自己就有bus
可以直接用
然后latency这个需求,这个用异步可以很容易解决
看看rxjava的subscribe,把你需要callback的部分放到subscribe中去就好了
这样一旦建模完成就可以callback回来,然后你要怎么弄就怎么弄了
唯一的问题是这两个刚做出来没多久,可以参考的文档不多
不过本身你这个需求就比较另类,没有太多的轮子可以直接用
所以如果不怕文档少的话,就放手做吧
spark用起来比vertx麻烦不少,而且spark主要是建模容易
跟hdfs等数据源的接口比较容易做
如果你是自己建模的话,不用spark也没啥大不了的
做吧
N
【在 e***m 的大作中提到】 : 谢谢大家的回复。 : 虽然建模要周期性的重复进行,但每次建完模,就需要立即知道模型以决定系统是不是 : 正常,所以对latency的要求很高。这可以被看作是一个实时监控系统。 : 相对于计算量来说,数据量并不大。因为是每两个数据源之间要做一次建模。如果有N : 个数据源的话,就有N^2个建模。 : 我确实需要一个司令部来把数据源分发到不同的机器上,而且还要收集计算结果。 : 不太想用SPARK,因为这个问题里并没有太多的iteration,也没有什么中间变量要缓存 : 。SPARK可能不合适。当然,我没实战用过SPARK,不知对不对。另外,我一直觉得这个 : 问题很具体,对性能要求很高,不用SPARK而是直接从底层实现可能会更优化一些。
|
e***m 发帖数: 92 | 8 有道理。我来看看rxjava和vert.x。多谢。
【在 z****e 的大作中提到】 : 需要汇总数据,所以用vert.x比较容易解决这个需求 : 其他server的话,汇总数据要自己写,bus要自己建,vert.x自己就有bus : 可以直接用 : 然后latency这个需求,这个用异步可以很容易解决 : 看看rxjava的subscribe,把你需要callback的部分放到subscribe中去就好了 : 这样一旦建模完成就可以callback回来,然后你要怎么弄就怎么弄了 : 唯一的问题是这两个刚做出来没多久,可以参考的文档不多 : 不过本身你这个需求就比较另类,没有太多的轮子可以直接用 : 所以如果不怕文档少的话,就放手做吧 : spark用起来比vertx麻烦不少,而且spark主要是建模容易
|