为什么我们放弃了Erlang技术栈

  • 时间:
  • 浏览:5
  • 来源:uu快3电脑版_uu快3和值_礼金

这听上去很好,但在互联网业务系统中,却并没办法 几块实用价值。肯能发现有每段业务计算逻辑时要消耗絮状cpu以致影响了系统的整体响应或吞吐,说明应当将这每段计算功能抽离到另几块多单独的运行环境并给它分配更多的资源,而是不是 依赖VM的抢占调度!

使用“漂移上线”[2]还也能获得同样的效果,怎么让 对于采用任何技术栈构建的系统是不是 有效的。

这种优点还也能使用心智心智心智成熟是什么 的句子的句子期期是什么是什么是什么是什么的消息队列上端件获得,消息队列上端件能自然实现业务补救的前后端分离,怎么让 前后端还可独立进行伸缩。

[1]这里的“进程”指的是由Erlang VM负责调度的轻量级进程,而是不是 由内核调度的OS原生进程

[2]《云计算十字真言及其在小博无线的实践》(https://yq.aliyun.com/articles/62686) 一文全部介绍了“漂移上线”的设计思路以及一种生活具体的实现法子

OTP中的mnesia是Erlang技术栈标配的高性能分布式内存数据库,支持对原生erlang term的透明存取,就单一的Erlang系统而言,mnesia的易用性和性能是不是 不错的。怎么让 ,在另几块多较简化的云端系统中,它趋于稳定下面几块劣势:

人太好lua, golang, nodejs在语言层面都内置了高并发机制,然而,不论是lua中需手动调用yield/resume的coroutine,或是golang中在系统调用时插入yield的goroutine,还是nodejs中依靠异步io回调实现的单进程多并发,都趋于稳定面对cpu密集型计算任务时调度不均的问題,肯能它们都没办法 实现cpu使用统计与抢占式调度器。

Erlang集群采用的是全连通的组网法子,每加入另几块多新节点,都时要在当前集群中所有节点的/etc/hosts文件中加入这种新节点的hostname和ip,原先的设计使得伸缩和漂移都非常麻烦。

这种度是Erlang独有的优势,但在今天,基于nginx+lua的openresty框架和golang都能提供,怎么让 后两者还拥有更好的社区生态。

Erlang内建的rpc机制还也能让任意另几块多进程相互之间太久知晓对方的所在的结点,仅通过pid就能透明的向对方发送消息。

一种生活绕开的方案是自建DNS服务负责集群的域名解析,然而,这种方案又会带来诸如DNS服务的高可用性,新建记录的生效时间以及本地记录的缓存刷新等一系列问題。

总的来说,Erlang技术栈的优点在云计算环境中要么难以体现,要么容易寻找到心智心智心智成熟是什么 的句子的句子期期是什么是什么是什么是什么的替代方案,但弱点却既顽强又难以绕开。以下逐一展开说明。

让开发和运维更简单

现在,大伙儿已从mnesia全面切换到了redis。

采用Erlang构建的系统还也能在服务不中断,用户无感知的状态下部署变更。

Erlang设计的运行时是直接运行于宿主机上的,当第一次启动Erlang VM, 会随之启动另几块多epmd进程来负责集群结点之间的通信。原先的设计与容器化的部署方案格格不入,原因分析分析没能在另几块多宿主机上运行另几块多趋于稳定不同集群的Erlang容器。

Erlang VM对每个进程[1]的cpu占用进行了统计并实现了抢占式调度,即使某个进程不停计算,这种进程怎么让会被饿死。

至2013年小博无线云端系统上线以来,大伙儿一直是Erlang的重度使用者。尽管小博无线技术团队不乏拥有10年以上经验的精英级Erlang进程员,然而,从2016年刚结速了了,大伙儿已不再使用Erlang开发新业务,而大伙儿放弃Erlang技术栈的原因分析分析可被简要概括为下面这句话:

在云计算环境中,使用以负载均衡器为根,业务容器为叶结点的网络拓扑则要简单这种这种,还也能很方便的实现秒级伸缩和漂移。