erlang夜话(2) - OTP

1 OTP的前世今生

       Erlang出现在20世纪80年代中期,由爱立信(Ericsson)所管辖的实验室所开发。当时那些大神级人物为了寻找适合下一代电信产品的编程语言,花费了两年多的时间,使用原型法测试了所有可能的编程语言,最终发现,虽然当时现有的编程语言也有一些有趣和相关的特性,但是并没有一门独立的语言能包容电信行业所需要的所有特性,这一点让他们非常不爽,于是决定开发一种全新的编程语言,这就Erlang。
       到了1996年,Erlang编程框架OTP诞生了,OTP给Erlang编程语言系统带来了结构化的框架,以及一套实现健壮性和容错性的工具和类库。时间到了1998年12月,爱立信决定将Erlang作为开源代码发布。OTP最初是开放电信平台(Open Telecom Platform)的缩写,是为了构建和运行电信系统而设计的一个开发系统。开源之后,已经没有人稀罕它在电信方面的品牌效应了,发展至今,无论是Erlang还是OTP,都早已不再局限于电信应用,OTP现在更为贴切的名字应该是"并发系统平台"。
       Erlang从一个完整的,独一无二的世界观开始,提供了一个如操作系统级细密的 VM,随后又将业界的最佳实践抽象出一套框架——OTP,解决了很多分布式并发系统下复杂的基础问题。OTP接近于应用程序基础系统,包含了一组库和实现方式,可以用来构建大规模、容错和分布式的应用程序。标准的Erlang分发套装就包含OTP库,可以说OTP基本上是与生俱来的。OTP基本上涵盖了系统生产的方方面面,它不单单关心软件如何撰写,还关心软件如何运行;不仅仅关心软件今天如何运行,还关心软件明日如何升级。

2 OTP的可靠否

       写了大半天的云笔记,不知什么原因,它竟然自动同步到几个小时以前的状态,在这里再次痛恨一切不可靠的东西!
       当今的互联网世界,所有人都在追捧和创造新的技术、新的名词,但是回归到问题本身,新的技术一定好吗?选择合适和可靠的技术才是王道。而一个技术是不是可靠,往往需要多年的大规模生产验证。
       虽然,很多人可能并没有听说过Erlang,可是Erlang系统就在我们身边:

  • Cisco超过90%的交换机仍然在使用Erlang;
  • 早在2012年,WhatsApp的生产系统就实现了在单个Beam虚拟机节点上同时处理超过2百万个TCP/IP连接;
  • RabbitMQ 服务器端代码是Erlang实现的;
  • 电信公司T-Mobile的短信业务也是Erlang实现的;
  • Ericsson用Erlang生态构建新的5G基础设施软件;
  • 等等。

       可以说,在分布式、高并发、高容错诸多领域,Erlang早得到了广泛的应用; 而OTP作为Erlang的重要组成,多年的使用也证明了它的可靠性勿容置疑。

3 为什么要有OTP

       先来看2段亲切而熟悉的代码:

#include<stdio.h>
int main(void){
   
   
	printf("Hello!\n");
	return 0;
}
package com;
import java.io.*;
import java.util.*;

       在常见的语言中,所谓的库,往往是语言的一种扩展,编译过后,它可能会变成程序的一部分,或者是在运行时可公共调用的一部分。程序运行中的艰难险阻,需要我们自已去面对。
       而Erlang处理这个问题的哲学思想不同,它是从宏观上把构建系统的公共特性进行提炼,形成一个公共的规范,当然也帮我们把容易出问题的基础部分全部实现完成,我们只是需要将个性化的部分实现即可。这么做的好处在于问题的非函数部分(比如如何进行实时代码升级)对所有应用程序都是一样的,而函数部分(由回调函数提供)在每个问题里都是不同的。
       这正是编程中人们高度期望的一种境界——“困难”的程序被隔离成了系统中的一些定义良好的小的部分,系统中绝大部分代码能够用有着良好类型定义的顺序化程序来编写。

### Erlang OTP 的概念 Erlang OTP (Open Telecom Platform) 是一套用于构建高可用性和分布式系统的中间件、工具和设计原则集合。OTP 不仅是一组库,还是一种架构风格,旨在充分利用 Erlang 编程语言的并发处理能力来应对复杂的大规模通信系统设计挑战[^1]。 #### 关键特性 OTP 提供了一系列预定义的行为模式(behaviours),如 `gen_server`、`gen_fsm` 和 `gen_event` 等,允许开发者基于这些行为创建自定义进程模型,确保遵循统一的设计模式并实施最佳实践[^3]。通过这种方式,开发人员能够更容易地编写健壮的应用程序和服务,同时减少重复劳动,提高生产率。 此外,OTP 还包含了监督树(supervision tree)、应用程序管理等功能模块,进一步增强了系统的稳定性和可维护性。监督树机制使得即使某个子系统发生崩溃也能自动重启恢复正常运行状态;而应用程序管理则提供了启动、停止整个软件包的支持。 对于初学者来说,可以通过阅读官方文档中的相关内容加深理解,并尝试动手实现简单的 Gen_Server 应用来熟悉 OTP 框架的实际操作流程[^2]。 ```erlang -module(hello_world). -behaviour(gen_server). %% API functions -export([start_link/0]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -record(state, {}). %%%=================================================================== %%% API functions %%%=================================================================== start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). %%%=================================================================== %%% gen_server callbacks %%%=================================================================== init([]) -> {ok, #state{}}. handle_call(_Request, _From, State) -> Reply = ok, {reply, Reply, State}. handle_cast(_Msg, State) -> {noreply, State}. handle_info(_Info, State) -> {noreply, State}. terminate(_Reason, _State) -> ok. code_change(_OldVsn, State, _Extra) -> {ok, State}. ``` 此代码片段展示了如何定义一个最基础版本的 Gen_Server 实现——它实现了必要的回调函数接口,但并未加入任何具体业务逻辑。这有助于新手快速掌握 OTP 中最基本的服务器组件结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值