什么是 Erlang
Erlang 是一种通用的、并发的、函数式高级编程语言,同时也是一个垃圾回收的运行时系统。Erlang 最初是爱立信公司的专有软件,由乔・阿姆斯特朗、罗伯特・维丁和迈克・威廉姆斯于 1986 年开发,但在 1998 年被发布为自由和开源软件。Erlang 运行时系统旨在设计分布式、容错、软实时、高可用性和热代码交换的系统。Erlang 编程语言具有不可变数据、模式匹配和函数式编程等特性。除了最初在电信领域的应用外,Erlang 还被广泛应用于金融科技、游戏、医疗保健、汽车、物联网和区块链等领域。使用 Erlang 的公司包括 WhatsApp、Vocalink (万事达公司)、高盛、任天堂、AdRoll、Grindr、BT Mobile、三星、OpenX 和 SITA 等。
Erlang 的工作原理是什么
分布式和容错设计
Erlang 被设计用于构建分布式、容错、软实时和高可用的非停机应用程序。
轻量级进程和消息传递
Erlang 应用由数百个小型 Erlang 进程组成,它们使用异步消息传递进行通信,而不是共享变量,从而消除了显式锁的需求。
宕机哲学
由于 "让它崩溃" 的理念,Erlang 的防御性编程代码较少。当进程崩溃时,Erlang 会整洁地退出并向控制进程发送消息,控制进程可以采取行动,如启动新进程接管旧进程。
监督树架构
Erlang 应用通常采用监督树的形式编写,这是一种进程层次结构,顶层进程是监督进程,生成和管理子进程的生命周期。这种架构提供了高度可扩展和容错的环境。
不可变数据和模式匹配
Erlang 支持不可变数据和模式匹配等函数式编程特性。
Erlang 有哪些优势
Erlang 是一种专为分布式、容错、软实时和高可用应用程序而设计的编程语言,具有诸多优势。
分布式和容错能力
Erlang 的核心设计理念之一是分布式和容错能力。Erlang 进程是轻量级的,可以轻松创建和管理,即使在不同节点上的进程之间也能实现透明通信。Erlang 采用“让它崩溃”的理念,更倾向于重启进程而不是尝试从故障中恢复,这样可以减少防御性编程代码。
并发编程支持
Erlang 在语言层面提供了对并发的支持。进程之间通过异步消息传递进行通信,而不是共享变量,简化了并发编程。Erlang 运行时系统还包括对对称多处理 (SMP) 的支持,这一功能于 2006 年加入。
动态代码更新
Erlang 支持动态软件更新,允许同时运行一个模块的两个版本。这使得 Erlang 可以在不停止系统的情况下,进行代码热交换,提高了系统的可用性和可维护性。
高可用性和可扩展性
由于 Erlang 的分布式、容错、并发和热交换等设计原则,它非常适合构建高可用、可扩展和可维护的应用程序。
Erlang 有哪些应用场景
Erlang 是一种并发编程语言,在许多领域都有广泛的应用场景。
电信行业
Erlang 最初是为电信行业设计,被诸如 Nortel 和 T-Mobile 等公司广泛使用,用于构建并发服务。它能够高效地处理大量并发连接,非常适合构建大规模的通信系统。
消息队列系统
Erlang 被用于构建高可用性的大规模消息处理系统,如 RabbitMQ。这些系统需要能够可靠地处理大量并发消息,Erlang 的容错和并发特性使其成为理想的选择。
在线游戏
Erlang 也被用于构建大型游戏服务器,尤其是大型多人角色扮演游戏(MMORPG)。它的高并发性和容错能力使其非常适合处理大量玩家连接和游戏逻辑。
即时通讯应用
一些知名的即时通讯应用如 WhatsApp 和 Ejabberd(一种 XMPP 消息服务器)都使用 Erlang 作为编程语言。Erlang 的分布式特性和容错能力使其非常适合构建可靠的实时通讯系统。
其他领域
随着 Erlang 被开源,它也开始在金融科技、游戏、医疗保健、汽车、物联网和区块链等其他垂直领域得到应用。使用 Erlang 的公司有 Vocalink(一家 MasterCard 公司)、高盛、一家知名游戏公司、AdRoll、Grindr、BT Mobile、三星、OpenX 和 SITA。
Erlang 的发展历史是什么
起源于电信应用开发
Erlang 最初由爱立信公司设计开发,旨在改善电信应用程序的开发。最早的 Erlang 版本用 Prolog 语言实现,并受到早期编程语言 PLEX 的影响。1992 年,BEAM 虚拟机(VM)将 Erlang 编译为 C 语言,采用本地编译代码和线程代码的混合方式,在性能和磁盘空间之间取得平衡。
开源并成立新公司
1998 年 2 月,爱立信无线系统公司禁止在新产品中使用 Erlang,理由是更偏好非专有语言。而 1998 年 3 月,爱立信宣布了包含 100 多万行 Erlang 代码的 AXD301 交换机,据报告可实现 9 个 "9" 的高可用性。1998 年 12 月,Erlang 的实现被开源,大部分 Erlang 团队辞职成立了新公司 Bluetail AB。最终爱立信放松了禁令,并于 2004 年重新雇佣了 Armstrong。2006 年,运行时系统和 VM 增加了对本机对称多处理(SMP)的支持。
应用于电信领域
Erlang 语言的发展历史紧密与电信行业相关。它最初由爱立信设计,用于开发电信应用程序,后来在 AXD 电话交换机等关键系统中得到应用,展现出高可用性。经历了一段时间的内部禁令后,Erlang 最终被开源,并成立了新公司推广这一语言。目前 Erlang 在电信领域仍有广泛应用,同时也逐渐扩展到其他领域。
Erlang 与其他编程语言的区别是什么
不可变数据和模式匹配
与许多其他编程语言不同,Erlang 具有不可变数据和模式匹配的特性。Erlang 中的数据不可变,这意味着一旦创建,数据就不能被修改,必须创建一个新的数据副本。这种不可变性有助于编写并发和分布式系统,因为它消除了数据竞争的可能性。模式匹配允许程序员以声明式的方式检查数据结构,而不是使用条件语句。这使得代码更加简洁和可读。
并发和分布式编程
Erlang 被设计用于构建分布式、容错、软实时、高可用性和无停机应用程序。Erlang 的并发模型基于轻量级进程,这些进程可以在同一台机器或多台机器上运行。Erlang 的进程通信机制使得编写分布式系统变得更加容易。此外,Erlang 采用 "让它崩溃" 的哲学,而不是试图从严重故障中恢复,这使得代码更加简单和健壮。
监督树架构
Erlang 应用程序通常采用监督树的形式编写,这是一种进程层次结构,顶层的 "监督者" 生成和管理子进程。这种架构已被证明能够提供高度可扩展和容错的环境。相比之下,大多数其他语言都没有这种内置的监督者 - 工作者进程模型。
动态类型和热代码加载
Erlang 的顺序子集支持动态类型和热代码加载。动态类型意味着变量的类型在运行时确定,而不是在编译时确定。热代码加载允许在不停止系统的情况下更新正在运行的代码,这对于需要持续运行的系统来说是一个巨大的优势。
Erlang 的组成部分有哪些
Erlang 是一种通用的、并发的、函数式高级编程语言,同时也是一个垃圾回收的运行时系统。Erlang 一词通常与 Erlang/OTP(开放电信平台)互换使用,后者包括 Erlang 运行时系统、几个主要用 Erlang 编写的现成组件 (OTP) 以及一组 Erlang 程序设计原则。
Erlang 运行时系统旨在构建分布式、容错、软实时、高可用和热代码交换的系统。它允许在不停止系统的情况下更新代码,非常适合构建高可用的在线系统。
Erlang 编程语言具有不可变数据、模式匹配和函数式编程等特性。在顺序子集中,Erlang 还支持急切求值、单赋值和动态类型。
Erlang 应用程序由许多小型轻量级 Erlang 进程构建而成,这些进程通过异步消息传递进行通信,而不是共享变量。每个进程都有自己的邮箱来接收消息,并且可以在运行时改变行为。
欢迎加入亚马逊云科技培训中心
欢迎加入亚马逊云科技培训中心
-
快速上手训练营
-
账单设置与查看
-
动手实操
-
快速上手训练营
-
第一课:亚马逊云科技简介
本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。
亚马逊云科技技术讲师:李锦鸿第二课:存储与数据库服务
您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。
亚马逊云科技资深技术讲师:周一川第三课:安全、身份和访问管理
在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。
亚马逊云科技技术讲师:马仲凯 -
账单设置与查看
-
-
动手实操
-