最近我一直在做一些Docker撰写的实验,以部署多个协作的微服务。 我可以看到微服务提供的许多好处,现在有一个很好的工具来pipe理它们,我认为跳进微服务并不难。 但是,我也一直在试验Elixir,而且我非常喜欢自己提供的好处。 鉴于它鼓励将代码打包到多个分离的应用程序中,并支持热码升级,那么如何将docker与elixir(或erlang)混合? 例如,如果我想使用docker,因为它提供dev-prod奇偶校验,那么elixir如何适应呢? 鉴于docker集装箱是不可变的,我失去了进行热码升级的能力,对吧? 蓝色/绿色部署或金丝雀版本呢? 我的意思是,我可以用Elixir写微服务,就像用其他语言写的一样,polyglotism是微服务的好处之一,但是我没有得到使用OTP平台的全部好处,我猜测纯粹的协作erlang应用程序是更好的方式,使用中间队列在用不同(或不是)语言编写的微服务之间进行通信。
从我所了解的虚拟机分为“系统虚拟机”或“进程虚拟机”两类。 BEAM所在的地方对我来说很模糊。 有没有另一种我不知道的虚拟机?
据报道Erlang已被用于生产系统超过20年,正常运行时间百分比为99.9999999%。 我做了如下的math: 20*365.25*24*60*60*(1 – 0.999999999) == 0.631 s 这意味着系统在20年内只有不到1秒钟的停机时间。 我不想质疑这个问题的有效性,我只是好奇我们如何才能closures一个系统(有意或无意),只有0.631秒。 任何熟悉大型软件系统的人都可以向我们解释这一点吗? 谢谢。 有没有人知道如何计算一个处理单元(或机器)集群服务的停机时间?
当涉及到它可以处理的并发级别时,我真的很喜欢这些工具。 Erlang看起来更稳定的解决scheme,但需要更多的学习和大量的function语言范例。 看起来Erlang在多核CPU方面更好(修复了我的错误)。 但是我应该select哪一个? 从短期/长期来看,哪一个更好? 我的目标是学习一个工具,它使得我的web项目在高负载下的扩展比传统语言更容易。
我一直在观察函数式编程语言和function的日益增长的可见性。 我看着他们,没有看到上诉的原因。 然后,最近我在Codemash参加了Kevin Smith的“Erlang基础”演示。 我喜欢这个演示文档,并了解到函数式编程的很多属性使得避免线程/并发问题变得更容易。 我知道状态和可变性的缺乏使得multithreading无法改变相同的数据,但凯文说(如果我理解正确的话)所有的通信都是通过消息发生的,消息是同步处理的(同样避免了并发问题)。 但是我已经读过Erlang用于高度可扩展的应用程序(爱立信首先创build它的全部原因)。 如果每件事都作为一个同步处理的消息来处理,那么如何有效地处理每秒数千个请求呢? 这不就是为什么我们开始走向asynchronous处理 – 所以我们可以利用同时运行多个线程的操作,并实现可扩展性? 看起来这样的架构虽然更安全,但在可扩展性方面却倒退了一步。 我错过了什么? 我了解Erlang的创build者故意避免支持线程以避免并发问题,但我认为multithreading对于实现可伸缩性是必需的。 函数式编程语言如何能够固有地线程安全,但仍然可以扩展?
我试图在Haskell中直观地看到一些简单的自动物理系统(例如钟摆,机器人arm等)。 通常这些系统可以用类似的方程来描述 df/dt = c*f(t) + u(t) u(t)代表某种“智能控制”。 这些系统看起来很适合function反应编程范例。 于是我拿起Paul Hudak写的“Haskell School of Expression”一书,发现那里介绍的领域专用语言“FAL”(对于functionanimation语言)实际上对我的简单玩具系统非常好用(尽pipe一些function,特别是integrate ,似乎有点懒得有效使用,但容易修复)。 我的问题是,对于更先进甚至实际应用而言,更成熟,最新,维护良好,性能优化的替代scheme是什么? 这个wiki页面列出了Haskell的几个选项,但我不清楚以下方面: 来自Conal Eliott的项目“反应式”的状态(据我所知)是这个编程范式的发明者之一,看起来有些陈旧。 我喜欢他的代码,但也许我应该尝试其他更新的替代scheme? 在语法/性能/运行时稳定性方面,它们之间的主要区别是什么? 引用2011年的一项调查 ,第6节,“ … FRP的实施仍然不够有效或足够可预测的性能,以有效地使用需要延迟保证的领域… ”。 虽然这项调查提出了一些有趣的可能的优化,但考虑到FRP已经有超过15年的历史了,我觉得这个性能问题可能至less在几年之内甚至是很难解决的。 这是真的? 调查的同一作者在博客中谈到“时间泄漏”。 这个问题是FRP独特的问题,还是我们用纯粹的非严格语言进行编程时普遍存在的问题? 你是否曾经发现,如果不够高性能的话,就很难稳定一个FRP系统的使用寿命? 这仍然是一个研究水平的项目? 人们喜欢工厂工程师,机器人工程师,财务工程师等,是否真正使用它们(以适合他们需要的whaterver语言)? 虽然我个人比较喜欢Haskell的实现,但我可以接受其他的build议。 例如,有一个Erlang实现将会特别有趣 – 那么拥有一个智能的,适应性的,自学习的服务器进程将非常容易!
我最近一直在看阿卡,这是非常令人印象深刻的。 它看起来像erlang的大部分杀手function – 位置透明度,监督层次等等。 erlang有哪些function不是吗?
什么是爱立信的Erlang和Erlang / OTP的编写和编译的实现? 是汇编,C还是Erlang本身? 更新1:感谢DrJokepu。 如果我理解正确,Erlang源到VM编译器是用Erlang编写的。 但是虚拟机是用C写的 更新2:Hynek-Pichi-Vychodil指出了很多细节。 VM和HW交互驱动程序:在C. 编译器(到VM)和库:在Erlang。 扩展:通过使用该语言编写端口或Erlang节点,可以使用任何语言。
我想知道Erlang被使用的最常见的应用程序/网站/解决scheme的列表, 成功与否 。 解释为什么它被用于特定的解决scheme,而不是其他编程语言,也将非常感激。 列举BAD Erlang案例研究(Erlang被滥用的案例),这也会很有趣。
我正在学习Elixir,并想知道为什么它有两种types的函数定义: 用def定义的函数,用myfunction(param1, param2) 用fn定义的匿名函数,使用myfn.(param1, param2)调用myfn.(param1, param2) 只有第二种function似乎是第一类对象,可以作为parameter passing给其他function。 在模块中定义的函数需要封装在fn 。 有一些语法糖,看起来像otherfunction(myfunction(&1, &2)) ,以便使这种简单,但为什么它是必要的第一位? 为什么我们不能做otherfunction(myfunction)) ? 是不是只允许调用模块的function没有像在Ruby中的括号? 似乎从Erlanginheritance了这个也具有模块function和乐趣的特性,那么Erlang VM究竟是如何工作的呢? 它有两种types的function,并从一种types转换为另一种,以便将它们传递给其他function? 有两种不同的符号可以调用函数吗?