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
epmdin 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 startsepmdif it’s not running
Distribution Protocol
- Write a
net/nettypipeline - Implement
netencoder & decoder - ???
- ???
OTP Nodes
TBD
OTP Message Boxes
TBD