odyssey/INTERNALS.md

55 lines
2.3 KiB
Markdown

### Odissey architecture and internals
Odissey heavily depends on two libraries, which were originally created during its
development: Machinarium and Shapito.
**Machinarium**
Machinarium extensively used for organization of multi-thread processing, cooperative multi-tasking
and networking IO. All Odissey threads are run in context of machinarium `machines` -
pthreads with coroutine schedulers placed on top of `epoll(2)` event loop.
Odissey does not directly use or create multi-tasking primitives such as OS threads and mutexes.
All synchronization is done using message passing and transparently handled by machinarium.
Repository: [github/machinarium](https://github.yandex-team.ru/pmwkaa/machinarium)
**Shapito**
Shapito provides resizable buffers (streams) and methods for constructing, reading and validating
PostgreSQL protocol requests. By design, all PostgreSQL specific details should be provided by
Shapito library.
Repository: [github/shapito](https://github.yandex-team.ru/pmwkaa/shapito).
#### Core components
main()
┌──────────┐
│ instance │
thread └──────────┘
┌────────┐ ┌────────────┐
│ pooler │ │ relay_pool │
└────────┘ └────────────┘
┌─────────┐ ┌────────┐ ┌────────┐
│ servers │ │ relay0 │ ... │ relayN │
└─────────┘ └────────┘ └────────┘
┌────────┐ thread thread
│ router │
└────────┘
┌──────────┐
│ periodic │
└──────────┘
┌─────────┐
│ console │
└─────────┘
**Instance**
**Pooler**
**Servers**
**Router**
**Periodic**
**Console and signal handling**
**Relay pool**