0


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

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

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

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计算结果。

👑👑👑结束语👑👑👑

标签: 云原生 docker 容器

本文转载自: https://blog.csdn.net/qq_62294245/article/details/127682404
版权归原作者 小鹏linux 所有, 如有侵权,请联系我们删除。

“【云原生 | 42】Docker快速部署高可靠性编程语言Erlang”的评论:

还没有评论