Enki Multimedia

L'ingénierie Erlang, du runtime à la production.

Nous concevons, développons et maintenons des systèmes Erlang/OTP. Des applications distribuées et des protocoles réseau aux bases de données, aux runtimes embarqués et aux plateformes voix, nous aidons les équipes à construire des logiciels fiables et à les faire tourner en production.

Hackney Client HTTP Erlang écrit et maintenu par Benoît depuis plus de dix ans.

Apache CouchDB Benoît est un ancien committer et membre du PMC ; rcouch a été donné au projet.

erlang-rocksdb Bindings Erlang pour RocksDB, maintenus par Benoît depuis 2016.

Chappe Notre pile voix Erlang, à la base de notre PBX et d'enki_vox.

Nos domaines

Applications et architecture

  • Nouvelles applications Erlang/OTP
  • Revues d'architecture
  • Supervision, processus et état
  • Intégration avec les systèmes existants
  • Maintenabilité à long terme

Systèmes distribués et production

  • Tolérance aux pannes et reprise
  • Clustering et état distribué
  • Plantages, croissance mémoire, performance
  • Mises à jour progressives et migrations
  • Tests et observabilité, avec OpenTelemetry

Protocoles

  • HTTP/1.1, HTTP/2 et HTTP/3
  • QUIC et WebTransport
  • WebSockets et streaming
  • Protocoles réseau sur mesure
  • Débogage au niveau du protocole

Runtimes et intégration

  • WebAssembly avec erlang_wasm
  • Python dans Erlang
  • JavaScript avec QuickJS
  • Systèmes d'extension en bac à sable
  • Runtimes natifs et embarqués

Ingénierie des bases de données et du stockage

  • RocksDB via erlang-rocksdb
  • CouchDB, de l'intérieur
  • Réplication et données distribuées
  • Cohérence au niveau applicatif
  • Bases de données embarquées

Ingénierie des bases de données et du stockage

Voix et temps réel

  • SIP et plateformes de communication
  • FreeSWITCH, Kamailio et Kazoo
  • Notre pile voix Chappe
  • Communications d'urgence
  • Fiabilité et reprise

Notre pile HTTP et réseau

Chaque couche, du framework HTTP jusqu'à QUIC, écrite en Erlang et publiée en open source. Ingénierie des protocoles

Livery s'appuie sur les quatre bibliothèques de protocole. Hackney utilise erlang_h2, erlang_quic et erlang-webtransport, avec son propre code HTTP/1.1.

Notre pile voix : Chappe

La signalisation SIP tourne sous forme de processus Erlang dans votre nœud ; les médias passent par les moteurs que Chappe pilote. Nous construisons dessus des PBX, des SBC, des SVI et des interfaces vocales à base d'IA.

Produits

chappe_pbxPBX : utilisateurs, groupes d'appel, conférences, messagerie vocale
enki_voxTranscription, traduction et enregistrement des appels en direct

Ressources média

chappe_mrfSVI, mise en relation et conférences

Signalisation

chappe_sipPile SIP : UAS, UAC, B2BUA, proxy et registrar, avec TLS et WebSocket

Contrôle des médias

chappe_rtpengineAncrage et enregistrement des médias
chappe_mixMixeur de conférence en Erlang
chappe_eslEvent Socket FreeSWITCH

Moteurs média

rtpengine
dans le nœud Erlang
FreeSWITCH

Runtime

Erlang/OTP
chappe_pbx et enki_vox sont construits sur Chappe ; enki_vox utilise aussi Livery, Hackney et erlang_ws de notre pile HTTP.

Faire développer un logiciel voix, c'est une mission d'ingénierie. Si vous préférez qu'on exploite un edge pour vous, Chappe est aussi la base de SIP Edge, notre service géré. Voir SIP Edge

Développement et maintenance Kazoo

Nous maintenons et faisons évoluer des plateformes basées sur Kazoo pour nos clients : mises à jour d'Erlang/OTP, intégration FreeSWITCH et dépannage en production. Nous intervenons sur des déploiements existants et développons les changements dont ils ont besoin, dans le cadre d'un projet défini ou d'un partenariat d'ingénierie dans la durée.

WebAssembly et runtimes embarqués

erlang_wasm est un runtime WebAssembly écrit en Erlang/OTP. Il permet à un produit Erlang d'exécuter du code tiers ou client dans un bac à sable : plugins, règles métier, politiques d'accès, transformations de données. Ce besoin est courant dans la facturation, les télécoms et le SaaS, bien au-delà de l'IA.

Nous construisons ces systèmes d'extension avec erlang_wasm, erlang-wasmtime, QuickJS ou Python, selon le besoin.

Ingénierie bases de données et stockage

Nous aidons à développer la couche de stockage de vos applications Erlang : intégration de bases de données embarquées, analyses de performance et de fiabilité, et construction des composants autour des données persistantes. Notre expérience inclut erlang-rocksdb et une longue pratique de CouchDB et des systèmes distribués.

Ce que vous pouvez nous confier

  • Intégrer une base de données embarquée dans une application Erlang
  • Intégration entre Erlang et code natif via les NIF
  • Analyses de performance et de fiabilité sur le chemin des données
  • Procédures de sauvegarde, de checkpoint et de restauration
  • Développer les composants persistants de votre système

C'est un travail de développement sur votre système. Il n'implique pas forcément RocksDB, ni aucune de nos bibliothèques.

À l'appui : un binding que nous maintenons

erlang-rocksdb : stockage embarqué pour Erlang

Le binding Erlang de RocksDB, écrit et maintenu par Benoît depuis 2016 et publié sur Hex sous le nom de paquet rocksdb. RocksDB tourne dans le nœud Erlang via des NIF : une application stocke ses données localement, sans serveur de base de données séparé. Il s'agit du binding, pas du projet RocksDB lui-même.

Sa documentation couvre les column families, les snapshots, les checkpoints, les sauvegardes et les transactions.

Un support professionnel pour erlang-rocksdb est proposé par Enki Multimedia : nous contacter pour le support.

Travaux antérieurs sur les bases de données : Benoît est un ancien committer et membre du PMC d'Apache CouchDB, et l'auteur de Couchbeam, le client Erlang de CouchDB.

Mises à jour et paquets Erlang/OTP

Nous publions erlang-dist, des paquets Erlang/OTP précompilés pour Linux, macOS et Windows. Son usage est libre, avec ou sans nous. Si vous voulez de l'aide sur votre propre environnement, voici ce que nous faisons :

  • Mises à jour d'OTP, y compris entre versions majeures
  • Intégration au build et au déploiement : paquets, conteneurs et CI
  • Diagnostics de compatibilité après une mise à jour : NIF, OpenSSL, dépendances
  • Maintenance des versions d'OTP que vous exploitez

Vous construisez ou exploitez un système Erlang ? Parlons-en.