云原生 | 42Docker快速部署高可靠性编程语言Erlang

Posted 小鹏linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生 | 42Docker快速部署高可靠性编程语言Erlang相关的知识,希望对你有一定的参考价值。

🍁博主简介
        🏅云计算领域优质创作者
        🏅新星计划第三季python赛道第一名
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主

💊交流社区CSDN云计算交流社区欢迎您的加入!

目录

1. Erlang简介

2. Erlang的特点 

3. Erlang应用场合 

4. 开发工具

5. 流量单位 

6. 主要功能模块

7.  在Docker中部署Erlang

 👑👑👑结束语👑👑👑


1. Erlang简介

Erlang是一种用来构建大规模弹性、实时、高并发、高可用系统的编程语言,被广泛应用于电信、银行、电子商务和即时消息领域。Erlang的运行时系统内置支持并发、分布式和容错机制。Erlang由爱立信所辖的CS-Lab于1987年开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。

2. Erlang的特点 

● 并发性 - Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制。

● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)

● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。

● 软实时性- Erlang支持可编程的"软"实时系统,使用了递增式垃圾收集技术。

● 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。

●递增式代码装载-用户能够控制代码如何被装载的细节。

●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。

●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。

●面向并发的编程(COP concurrency-oriented programming)

●函数式编程

●动态类型

●及早求值或严格求值

●支持脚本运

3. Erlang应用场合 

未来的计算是并发计算。现今甚至桌面CPU也是多核的,当用户给服务器购买了越来越多的CPU时,他们更期望能最大限度地利用他们的新投资,但是今天的许多软件系统并不能很好地做到这一点。

整个软件行业也在发生重大变革,由卖工具软件转向卖服务(软件免费,这也是开源软件兴起的过程),由单纯客户端向B/S或C/S转化,相应的存储和计 算向服务器端转移,由原来的PC客户端向客户端多元化(如手机、PDA、电视机顶盒等)转化。这些变革趋势,使得用户可以更方便地访问到服务的同时,服务 器也要承受越来越高的负荷,并行/分布的需求逐渐增加。

Erlang语言不是用来解决所有问题的语言,至少现在还不是。Erlang最初专门为通信应用设计的,比如控制交换机或者变换协议等,非常适合于构 建分布式,实时软并行计算系统。它是一门专注的语言,可以适应现代服务器要求高负荷、高可靠、持续服务的需求。它要解决的问题域包括:高并发、分布式、持 续服务、热升级和高可靠等问题。

4. 开发工具

Sublimetext 

linux下有全套的IDE环境插件可用完善的如SublimErl,windows下只能自己简单的集成一部分基础功能。

优势比于eclispse的erlide是大项目时操作响应速度快、体验流畅错误少。

Emacs 

可以使用任何你喜欢的编辑器编写Erlang程序,但如果你使用Emacs编辑可以支持很多功能,比如:代码缩进、语法高亮、验证模块名称、支持段落的注释、模块骨架、标签和更多的支持。

Erlide 

这是一个基于Eclipse的Erlang图形界面插件(ErlIDE),ErlIDE正在积极开发新特性,同时它也是开源的。

5. 流量单位 

指测量电话呼叫流量的单位。一个厄朗等于一个小时的中继负荷,或3600秒中继负荷。如果将CCS(百秒呼叫)转换成厄朗值,则需先乘以100,然后再除以3600(或直接除以36)。因此,呼叫中心可使用厄朗值来反映中继线路负荷,即一个小时满负荷的平均中继线路有多少数量。例如,在一个小时中,呼叫中心呼叫流量为12.35厄朗时,就意味着在该时段中,平均有12条线多一些都处于全负荷状态。据此可以大致推算出需要多少座席人员。

指一种数学计算方法,这种方法是基于已知的信息,如平均通话时长,来预测无规则的工作负荷,如电话呼叫量。它是呼叫中心人员和中继线路数量的决策参考方法。

厄朗公式有两类,厄朗B用于呼叫量随机状态,同时没有排队的情况;厄朗C用于呼叫量随机状态,同时有排队的情况,它假设所有来电者将无限期地进入队列等待被接通。因此,呼叫量不可能比可用的中继线路数量还大,如果那样的话,将造成排队无限期地延迟。

6. 主要功能模块

顺序编程

        Erlang Shell

        Erlang 模块与函数

        Erlang 原子类型

        Erlang 列表

        Erlang 映射 (Map)

        Erlang 标准模块与使用手册

        Erlang 输出至终端

        Erlang 完整示例

        Erlang 匹配、Guards 与变量的作用域

        Erlang 列表

        Erlang if 与 case

        Erlang 内置函数 (BIF)

        Erlang 高阶函数 (Fun)

并发编程

        Erlang 进程

        Erlang 消息传递

        Erlang 注册进程名称

        Erlang 分布式编程

        Erlang 完整示例

        Erlang 健壮性

        Erlang 超时处理

        Erlang 错误处理

        Erlang 完善后实例

记录与宏

        Erlang 程序分布

        Erlang 头文件

        Erlang 记录

        Erlang 宏

7.  在Docker中部署Erlang

1.使用官方镜像 

可以使用erlang镜像,直接进入Erlang交互命令行Eshell:

$ docker run -it --rm erlang:latest
Erlang/OTP 18 [erts-7.3.1] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.3.1 (abort with ^G)
1> uptime().
3 minutes and 3 seconds
ok
2>

可以使用ctl+G进入任务切换模式,其中j为列出所有任务:

User switch command
    --> j
        1* shell,start,[init]
    --> q
$ docker run -it --rm -h erlang.local erlang erl -name allen
Erlang/OTP 18 [erts-7.3.1] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.3.1 (abort with ^G)
(allen)1> erlang:system_info(otp_release).
"18"
(allen)2>
User switch command
    --> q

2.直接运行Erlang脚本 

可以直接使用docker run指令,通过escript运行Erlang脚本。下面以斐波那契数列作为例子进行讲解。

首先,新建fab.erl文件:

#!/usr/bin/env escript
%% -*- erlang -*-
main([String]) ->
    try
        N = list_to_integer(String),
        F = fac(N),
        io:format("factorial ~w = ~w\\n", [N,F])
    catch
        _:_ ->
            usage()
    end;
main(_) ->
    usage().
usage() ->
    io:format("usage: factorial integer\\n"),
    halt(1).
fac(0) -> 1;
fac(N) -> N * fac(N-1) .

保存后,使用docker run指令运行:

$ docker run -it --rm --name erlang-inst1 -v "$PWD":/usr/src/myapp -w /usr/src/ myapp erlang escript fab.erl 5
factorial 5 = 120

可见已输出factorial 5=120计算结果。

 👑👑👑结束语👑👑👑

以上是关于云原生 | 42Docker快速部署高可靠性编程语言Erlang的主要内容,如果未能解决你的问题,请参考以下文章

云原生使用Docker部署openGauss

云原生之Docker实战使用Docker部署Solo个人博客站点

云原生使用Docker快速部署openGauss主备环境

猿创征文|云原生之Docker使用Docker部署Flare个人导航网页

中秋征文 | 云原生之Docker使用docker部署内网穿透工具FRP

云原生生态圈:服务快速上云--Docker部署SpringBoot案例详解