Zhang Design
Development Plan
During the initial stage of development, focus will be on best idiomatic use of Clojure and core.async
programming to provide the desired features, without considering the implementation details of the Erlang distribution model.
- Create a partial system using only
core.async
- System will entail a single JVM
- Will support numerous in-JVM nodes
- Add support for multi-JVM instances
- IPC/UNIX domain sockets?
- Add support for multi-host JVM instances
- What protocol?
With a solid Clojure foundation in place, support will be added for the Erlang process and distribution model.
- Integrate with
epmd
- Add support for the Erlang distribution protocol (wire-level)
- Add support for OTP nodes
- Add support for OTP message boxes
Clojure Implementation Tiers
Host-level Coordination
- Is there sometihng comparable to
epmd
in the JVM ecosystem?
A Single JVM
- Create Zhang JVM agent
- Initial development: blue sky, no Erlangisms
- New architecture taking advantage of the JVM/Clojure
- Envision and develop a system without Erlang idiosyncracies
- Reference original design goals of Erlang
- Use net(ty) and core.async
- Take maximal advantage of core.async features/abilities
- Implement whole system in pure-Clojure
- Process table
- New architecture taking advantage of the JVM/Clojure
-
Atomic hash-map used as store for data
- process list
- next available pid
- Message-passing to/from agent (via core.async)
-
Spawned Functions
- Process List per JVM
- Node list per host
Inter-JVMs, Same Host
- IPC?
- ???
Inter-host JVM
net
/netty
- ???
Erlang Implementation Tiers
empd
Integration
- Much of this already exists
- Supporting functions
- Use
clozhang.epmd
- Add
erl
-like feature that startsepmd
if it’s not running
Distribution Protocol
- Write a
net
/netty
pipeline - Implement
net
encoder & decoder - ???
- ???
OTP Nodes
TBD
OTP Message Boxes
TBD