c******o 发帖数: 1277 | 1 用scala 有一段了,最近又自学了clojure和自己练习了一下 akka/spark
说说新的感想。
我们的新后端是Play/Scala的,本来想加akka,但是事实上最后用的很少。
是不是akka不好,没啥用呢?我以前也有这个疑问,现在觉得理解错了。
Akka是很好,绝对是killer app. 以前我觉得没用,没用到,是理解错了。
第一,我其实是在间接的用akka, scala 2.10.x的future就是以前akka的future,
scala的future已经deprecated, play本身就是build在akka上的,spark也是。
第二,其实我们确实用不到actor,actor最大得用途是distributed fault tolerance
system, 一般的async future/dataflow就足够足够了。要是需要shared data,
transaction, agent就够了。虽然actor以上两个都可以用,但是也不一定要用。
第三,其实akka很多内容,actor只是一个最general的。
有future(其实内部都是callback),node.js的根本不算啥,把future 的default
execution context 从多线程改成单线程就是node.js
有clojure的agent/stm,简直是copy (开发的也说是从clojure学的)
有erlang的actor.
有peking2喜欢的reactor pattern (akka-io)里。
连observerable stream process pattern也准备加入。
我其实有点害怕,怎么scala的人做啥都喜欢做大而全,还有复杂和多paradigm呢?
play其实也是的。
当然说了那么多,其实akka是不错的,其实很多人都在用,而且由于是toolbox类型,
很多人都没张扬,其实大把的项目底层有它,java用的比scala多。
再说说scala,我最近在公司里,连续两个月做了8次短的pure FP in scala的
presentation,主要其实是互相学习和分享。我完全可以把scala 用library做成一个近
乎haskell的环境,我最后给的结论是完全没必要,不应该用pure FP。学习pure FP很
好,但是很多情况没意义这么做。当然,学了绝对能让你成为一个更好的程序员,即使
你不用FP。
对比clojure和scala,
clojure 很纯,很一致,很漂亮,然后你用了macro,基本上按问题创造了一门新的语言
。每个lisp程序员都可以(会)在每个项目创造一门语言。 确实很amazing ,很奇妙的
语言。
scala不一样,有一点像你做美梦时的梦中情人,大而全,既是白玫瑰,又是红玫瑰,
既可以入的卧室,出的厅堂,又可以烧佳肴,赚大钱。 关键是这些太多了,
实在不好融合,而且这样的家伙难养,还有我自己配不配的上呢?现在来说,唔,我还
很enjoy,觉得很美。希望以后也行。
说起来,只有c/scala/clojure给我带来过编程的快乐,始终对python/ruby/
javascript无爱啊。。。。
en,java也不错,但是那是结果快乐,过程boring.
BTW, 觉得spark会有前途,比其他的竞争者(impala, storm etc.) 确实观念上先进不
少。 |
p*****2 发帖数: 21240 | 2 顶一个。
不过对大牛的新理解有些失望,以为这些理解大牛早就搞定了。不过比goodbug还是强
了一截,起码不会认为AKKA就是actor。 |
s***o 发帖数: 2191 | 3 "每个lisp程序员都可以(会)在每个项目创造一门语言"
这样新加入的人看代码会不会有问题? |
c******o 发帖数: 1277 | 4 你不是问谁用akka么?
好多好多,大部分都没宣扬,就像你用一个openssl,toolbox类的,也不会到处宣扬。
当然也有原因就是说像我一样,杀鸡用牛刀,感觉没啥意思,就无声无息了。其实只有
大东西才一定要用actor
【在 p*****2 的大作中提到】 : 顶一个。 : 不过对大牛的新理解有些失望,以为这些理解大牛早就搞定了。不过比goodbug还是强 : 了一截,起码不会认为AKKA就是actor。
|
c******o 发帖数: 1277 | 5 clojure/lisp本身也不是以可读性闻名
【在 s***o 的大作中提到】 : "每个lisp程序员都可以(会)在每个项目创造一门语言" : 这样新加入的人看代码会不会有问题?
|
p*****2 发帖数: 21240 | 6
其实我问谁用akka的意思是谁用actor。future, promise啥的到处都有,倒不算是akka
的特色。
【在 c******o 的大作中提到】 : 你不是问谁用akka么? : 好多好多,大部分都没宣扬,就像你用一个openssl,toolbox类的,也不会到处宣扬。 : 当然也有原因就是说像我一样,杀鸡用牛刀,感觉没啥意思,就无声无息了。其实只有 : 大东西才一定要用actor
|
c******o 发帖数: 1277 | 7 所有用play/spark的都在用actor,当然肯定还有其他的。
只不过是只有准备上大场面的东西才值得用,这样的其实不多,也不用多。
akka
【在 p*****2 的大作中提到】 : : 其实我问谁用akka的意思是谁用actor。future, promise啥的到处都有,倒不算是akka : 的特色。
|
s***o 发帖数: 2191 | 8 说得我对play/scala都快没信心了。jvm上五花八门,挑一个称心的web framework偏是
这么难。
你们如果不上play,你会选什么?
【在 c******o 的大作中提到】 : 用scala 有一段了,最近又自学了clojure和自己练习了一下 akka/spark : 说说新的感想。 : 我们的新后端是Play/Scala的,本来想加akka,但是事实上最后用的很少。 : 是不是akka不好,没啥用呢?我以前也有这个疑问,现在觉得理解错了。 : Akka是很好,绝对是killer app. 以前我觉得没用,没用到,是理解错了。 : 第一,我其实是在间接的用akka, scala 2.10.x的future就是以前akka的future, : scala的future已经deprecated, play本身就是build在akka上的,spark也是。 : 第二,其实我们确实用不到actor,actor最大得用途是distributed fault tolerance : system, 一般的async future/dataflow就足够足够了。要是需要shared data, : transaction, agent就够了。虽然actor以上两个都可以用,但是也不一定要用。
|
p*****2 发帖数: 21240 | 9
play/spark是framework在用actor吗?做app是不是感觉不到呢?
大牛能简单谈谈spark的主要特点是什么吗?
【在 c******o 的大作中提到】 : 所有用play/spark的都在用actor,当然肯定还有其他的。 : 只不过是只有准备上大场面的东西才值得用,这样的其实不多,也不用多。 : : akka
|
c******o 发帖数: 1277 | 10 play挺好的。绝对好用,就是很多用不着。
你要是不是网站,service的话, akka+spary更好,小,灵便,自己加library.
【在 s***o 的大作中提到】 : 说得我对play/scala都快没信心了。jvm上五花八门,挑一个称心的web framework偏是 : 这么难。 : 你们如果不上play,你会选什么?
|
|
|
p*****2 发帖数: 21240 | 11
大牛没考虑vert.x?
【在 s***o 的大作中提到】 : 说得我对play/scala都快没信心了。jvm上五花八门,挑一个称心的web framework偏是 : 这么难。 : 你们如果不上play,你会选什么?
|
c******o 发帖数: 1277 | 12 是的,都是在akka上建造的。
spark会大量应用内存缓存(分布性的),用delimited continuation skip
intermediate result. 在一个共同的base上做stream, interactive(sql like),
batch, graph, ML
可以数据和逻辑共享。
其实也有点大而全。。(希望不会太过)而且还在发展阶段。
【在 p*****2 的大作中提到】 : : 大牛没考虑vert.x?
|
c******o 发帖数: 1277 | 13 没有,其实vert.x的akka都有,还好(现在来说),我现在不关心和python/ruby啥的
互连。
【在 p*****2 的大作中提到】 : : 大牛没考虑vert.x?
|
p*****2 发帖数: 21240 | 14
bigdata这块有的镐头。现在目前的技术都不算成熟。
【在 c******o 的大作中提到】 : 是的,都是在akka上建造的。 : spark会大量应用内存缓存(分布性的),用delimited continuation skip : intermediate result. 在一个共同的base上做stream, interactive(sql like), : batch, graph, ML : 可以数据和逻辑共享。 : 其实也有点大而全。。(希望不会太过)而且还在发展阶段。
|
s***o 发帖数: 2191 | 15 这个等蜥蜴吃饱了螃蟹再说吧。打算最近把node好好弄一下,有什么好书推荐?
【在 p*****2 的大作中提到】 : : bigdata这块有的镐头。现在目前的技术都不算成熟。
|
p*****2 发帖数: 21240 | 16
这也是我的感觉。我觉得玩Scala的肯定是偏AKKA的,vert.x估计在Scala社区的影响力
很有限。
【在 c******o 的大作中提到】 : 没有,其实vert.x的akka都有,还好(现在来说),我现在不关心和python/ruby啥的 : 互连。
|
p*****2 发帖数: 21240 | 17
node没什么特别好的书。随便找本看看就可以了。说起来node算是很容易学的了。一班
人看一个晚上就成了。
【在 s***o 的大作中提到】 : 这个等蜥蜴吃饱了螃蟹再说吧。打算最近把node好好弄一下,有什么好书推荐?
|
p*****2 发帖数: 21240 | 18 en,java也不错,但是那是结果快乐,过程boring.
大牛觉得Java8出来以后会好玩吗?我准备出来之后好好玩玩。 |
g*****g 发帖数: 34805 | 19 我用Akka的时候是2010, 2011年,那个时候Akka就是纯粹的个Actor framework。
版本记得还是1.x。你看看这个。
http://jonasboner.com/2010/01/04/introducing-akka/
【在 p*****2 的大作中提到】 : 顶一个。 : 不过对大牛的新理解有些失望,以为这些理解大牛早就搞定了。不过比goodbug还是强 : 了一截,起码不会认为AKKA就是actor。
|
p*****2 发帖数: 21240 | 20
好吧。不过大牛也应该与时俱进吧?
话说回来大牛当时的actor项目最后怎么样了?
【在 g*****g 的大作中提到】 : 我用Akka的时候是2010, 2011年,那个时候Akka就是纯粹的个Actor framework。 : 版本记得还是1.x。你看看这个。 : http://jonasboner.com/2010/01/04/introducing-akka/
|
|
|
g*****g 发帖数: 34805 | 21 挺好,就是优化的时候发现产生大量的actor和message,jvm在GC上花费很大成了
bottleneck,不得已最后我上了object pool。有违actor framework的初衷。我觉得追
求最高throughput的时候这个immutable产生大量垃圾的问题很难解决。
【在 p*****2 的大作中提到】 : : 好吧。不过大牛也应该与时俱进吧? : 话说回来大牛当时的actor项目最后怎么样了?
|
p*****2 发帖数: 21240 | 22
嗯。我也觉得immutability有这个问题。object pool是干什么的呀?share data的吗
?
【在 g*****g 的大作中提到】 : 挺好,就是优化的时候发现产生大量的actor和message,jvm在GC上花费很大成了 : bottleneck,不得已最后我上了object pool。有违actor framework的初衷。我觉得追 : 求最高throughput的时候这个immutable产生大量垃圾的问题很难解决。
|
g*****g 发帖数: 34805 | 23 就是比如你有一堆actor,反复发相似的message,你把他们cache起来改着用。而不是
每次重建。这样不不会被GC。message本应是immutable的。
【在 p*****2 的大作中提到】 : : 嗯。我也觉得immutability有这个问题。object pool是干什么的呀?share data的吗 : ?
|
p*****2 发帖数: 21240 | 24
这个是在单机上吗?akka本来是distributed的吧。如果multiple machine怎么办呢?
【在 g*****g 的大作中提到】 : 就是比如你有一堆actor,反复发相似的message,你把他们cache起来改着用。而不是 : 每次重建。这样不不会被GC。message本应是immutable的。
|
g*****g 发帖数: 34805 | 25 是在集群上的。akka的一个强点,就是actor在远端和本地通信是一样的。
【在 p*****2 的大作中提到】 : : 这个是在单机上吗?akka本来是distributed的吧。如果multiple machine怎么办呢?
|
p*****2 发帖数: 21240 | 26
那你的object pool放哪里?
【在 g*****g 的大作中提到】 : 是在集群上的。akka的一个强点,就是actor在远端和本地通信是一样的。
|
g*****g 发帖数: 34805 | 27 每个jvm一个呀。
【在 p*****2 的大作中提到】 : : 那你的object pool放哪里?
|
p*****2 发帖数: 21240 | 28
那你发过去,接受端不是还是得create message吗?
【在 g*****g 的大作中提到】 : 每个jvm一个呀。
|
g*****g 发帖数: 34805 | 29 好几年了,我记不清了。或许object pool cache的是本地收发的消息。
【在 p*****2 的大作中提到】 : : 那你发过去,接受端不是还是得create message吗?
|
c******o 发帖数: 1277 | 30 我觉得actor在逻辑上不一定需要immutable,actor本身内部是和其他actor隔绝的
mutable自己搞定就没事。
相似的message可以用更加细化的方法来解决吧?把相同的部分提出来。
也许也可以用memorization(cache)解决。
【在 g*****g 的大作中提到】 : 就是比如你有一堆actor,反复发相似的message,你把他们cache起来改着用。而不是 : 每次重建。这样不不会被GC。message本应是immutable的。
|
|
|
c******o 发帖数: 1277 | 31 java8很不错,基本除了lazy以外,其他重要的都可以做了
我觉得 scala的lazy,higher kinds,implicit,variance等高档技能都是双刃剑。
我在用scala lazy的时候有出过npe,原code绝对没有null,是lazy 在runtime用java
reflection的时候出的......
用implicit,variance的时候搞得最后没法扩展了,自相矛盾。
higher kinds倒是safe,但是也会在后面遇上扩展问题。
估计java8出了,java内部也会打架;)
【在 p*****2 的大作中提到】 : en,java也不错,但是那是结果快乐,过程boring. : 大牛觉得Java8出来以后会好玩吗?我准备出来之后好好玩玩。
|
g*****g 发帖数: 34805 | 32 我觉得message你用prototype的办法用处不大。
Message (own attributes, Common Message),
GC的主要问题是垃圾太多,容易产生比较长的stop the world,导致request timeout。
你用prototype也好,不用也好,都要做回收。又不是内存不够用,效果有限。也许G1
对这个有用,当时我们跑java 6, 没法试。
【在 c******o 的大作中提到】 : 我觉得actor在逻辑上不一定需要immutable,actor本身内部是和其他actor隔绝的 : mutable自己搞定就没事。 : 相似的message可以用更加细化的方法来解决吧?把相同的部分提出来。 : 也许也可以用memorization(cache)解决。
|
p*****2 发帖数: 21240 | 33
java
看了大牛这么说,对Java8有所期待了。
【在 c******o 的大作中提到】 : java8很不错,基本除了lazy以外,其他重要的都可以做了 : 我觉得 scala的lazy,higher kinds,implicit,variance等高档技能都是双刃剑。 : 我在用scala lazy的时候有出过npe,原code绝对没有null,是lazy 在runtime用java : reflection的时候出的...... : 用implicit,variance的时候搞得最后没法扩展了,自相矛盾。 : higher kinds倒是safe,但是也会在后面遇上扩展问题。 : 估计java8出了,java内部也会打架;)
|
H****S 发帖数: 1359 | 34 If you are really looking for high throughput concurrent programming
paradigm, I would try lmax disruptor instead.
For remote communication, akka does have a problem, that is unlike tcp, you
will not be guaranteed to never lose any message in the uncertain world of
network, not even if you register a death watch, so you have to add some
sequence id in the message, which sucks.
【在 g*****g 的大作中提到】 : 挺好,就是优化的时候发现产生大量的actor和message,jvm在GC上花费很大成了 : bottleneck,不得已最后我上了object pool。有违actor framework的初衷。我觉得追 : 求最高throughput的时候这个immutable产生大量垃圾的问题很难解决。
|
d*******r 发帖数: 3299 | |