TL;DR
Open Telecom Platform の略。Erlang で耐障害性のあるシステムを作るための、ライブラリと設計原則の集まりである。
なぜ必要か
Erlang のランタイムは、並行処理、複数のマシンにまたがる分散、障害からの回復を言語の機能として備えている。OTP は、こうしたシステムを開発するためのミドルウェアになる。
仕組み
OTP の設計原則(OTP Design Principles)によると、Erlang/OTP の基本となる考え方は監視ツリー(supervision tree)である。監視ツリーは、コードをワーカーとスーパーバイザーに分けて組み立てる。ワーカーは計算などの実際の仕事をするプロセスで、スーパーバイザーはワーカーを監視するプロセスである。ワーカーが失敗すると、スーパーバイザーが再起動できる。
よく使う処理のパターンは、ビヘイビアとして形式化されている。ビヘイビアのモジュールが汎用的な処理を、コールバックモジュールが固有の処理を受け持つ。標準のビヘイビアには次のものがある。
gen_server: クライアント・サーバ関係のサーバgen_statem: 状態機械gen_event: イベント処理supervisor: 監視ツリーのスーパーバイザー
Erlang/OTP の部品はアプリケーションと呼ばれる。いくつかのアプリケーションを組み合わせた完全なシステムをリリースと呼び、動いているシステムのままリリースのバージョンを上げ下げできる。
例
BEAM 上で動く LFE では、Erlang の耐障害性や高い並行性、OTP との統合を Lisp の構文で使える。