有,不多。广州游戏公司用的比较多。有些 im 也是用 erlang,比如去哪的 im,比如我们。
刚好有个项目要连多个数据库。
然后 lisp 粉各种瞧不起大 JavaScript
Clojure 是这种
m = {}
m = (assoc m {:a => 1})
写起来容易,状态变化不那么清晰。
Erlang 的话是,
M = {}
M2 = maps:update(a, 1, M)
写起来麻烦,但状态辩护会更清晰。
我们有一段时间要搞 grpc,然后 grpc 死活搭不起来。我跟同事说,为什么非要等到 grpc?为什么不先切分服务?调用用什么不可以?grpc 好了,换一下就可以了。但就是说不通。
我一直觉得一个模块,对外提供服务、屏蔽实现细节,就可以了。至于是否是微服务只是表现形式罢了。
电子版据说要等一段时间。
感谢回复
还好很多厂子喜欢重复造轮子 ,而且同样的东西,大家理解程度不一样,结果也会不一样。
我明白微服务是很好的东西,解决了很多问题。但实践起来又有很多无奈。。。
我们最近刚好有个市场运营需求,用消息队列解了耦。但由于部署环境网络不连通,只好用 http 再把消息传出去。。。然后 rpc 又没时间搭。。。不过消息队列还是有必要的,市场想法多,如果让他们的需求一直入侵主代码,会越来越难维护。而且市场的需求挂掉话也不应该影响主项目。
感谢回复
还好很多场子都喜欢重复造轮子 ,而且同样的东西,大家理解程度不一样,结果也会不一样。
我明白微服务是很好的东西,解决了很多问题。但实践起来又有很多无奈。。。
我们最近刚好有个市场运营需求,用消息队列解了耦。但由于部署环境网络不连通,只好用 http 再把消息传出去。。。然后 rpc 又没时间搭。。。不过消息队列还是有必要的,市场想法多,如果让他们的需求一直入侵主代码,会越来越难维护。而且市场的需求挂掉话也不应该影响主项目。
这篇文章写的不怎么样(好吧,我偷懒了,没有再改改。。。
Hash 是准确的,准确的代价就是需要更多的存储空间。存储空间的代价有两个,一个是存储空间本身,一个是要分几次才能拿到内存里。
BloomFilter 是一个不准的 hash table。
比如输入一个 key,经过 hash function,得到一个 index,将 arr 的 index 设置为 1,既 arr[index] = 1
,
查找的时候,将输入通过 hash function 转化为数组的 index,如果 arr[indexe] 存在,就认为这个值插过了。
hash function 有一定的冲突的概率,比如 "abc" 和 "ccc" 通过 hash function 的到的 index 可能是一样的,就会误判。
伟大的计算机先哲,尼古拉斯赵四曾经说过,如果一次 hash 解决不了,就 hash 两次,所以 BloomFilter 一般会用多个 hash function。
我没想到 B 树要怎么做拼写检查。。。
B 树和 Trie 不一样的地方是,Trie 没有深度约束,B 树有。用 B 树的话,就要把 com(组件对象模型),cool,computer 都存到叶子上。。。
B 树还有一个 order 的约束,在单词上,order 只能为 26,那就是 13 到 26,空间也会有大量的浪费。
像 com(组件对象模型),computer 这种,在 B 树似乎要村两次?
被发现了…
我看错人了…不好意思…
嗯,都是类似的问题。bloom filter 还有一个经典的应用是过滤弱密码。bloom filter 可以把很多的数据都“存”在内心里,查起来快,redis 就 bloom filter 的插件。
不是问 B+ 树是什么,问是问怎么做拼写检查。
B+ 树要怎么用?
可不可以这么理解?减熵是目的,微服务是手段?
Trie
看这个 slides Guild Prototype - RubyKaigi 2018,Guild 的性能似乎没有想象中好。。。感觉到 prod ready 还要一段时间。。。
最重要的还是 清晰划分各个模块的职责
,划分不好,一样是一团粥。
比如会有这种注释出现,由于 A 系统做了 xxx,所以在 B 系统,我要这么 xxx。。。
如果微服务做的不完善的话(有的公司没有那么多人力来做),同样会有 A 服务拖垮了 B 服务的情况。。。
这个是怎么测试的?Stack Overflow 没看到相应的信息啊。
actioncale 有服务器发起的 ping,把这个调小了应该就可以了。
线程切换大体是这么回事,不过 nio 不一样,nio 是 IO 多路复用,有单独的线程 (ActionCable、nginx) 去做 select 操作,或者用 fiber 去做 (midori)。
再一个要了解可能的瓶颈在哪,ActionCable 是 callback 模式,IO 还是同步的,一旦有慢查询,所有 ws 连接时延都会上来。
一般赚钱了,才会出来说。赔钱了就不出来说了。
哈,可能是 master 的原因,thx again。
thx,第一个跑 demo 跑不起来,就放弃了…
欢迎入坑,其实 Elixir 挺好的。Erlang 语法太个性了。
哈哈,是这样的。如果 process 有异常的话,整个程序都会挂掉。不过处理起来也比较容易,执行的时候 catch 所有的异常就可以了,有异常,直接让 process 挂掉就可以。
moitor 和 link 其实也可以实现。process resume 之后的状态如果是 dead 的话,这个 process 有 monitor 的话,就发 EXIT 消息就可以了。
这些问题有想过,不过都没去实现。。。我目前觉得异步 I/O 是缺少的最关键的 feature。
erlang 的调度是 cpu 时间片的
这个是怎么得到的?The beam book 里写的是根据 reductions 做的,而 reductions 简单来说,是方法调用次数。OTP 里也能找到 erts_current_reductions
之类的方法。