- Problem statement
- memory usage - unbounded Mina buffers
- Overall solution
- fix buffer sizes
- unprocessed frames in one location only
- full network buffers on server use tcp flow control to prevent client writing more
- Areas which need to be addressed
- one heap per session vs total job heap
- push back on processing network traffic to client
- client needs to handle pause in network processing without OOM
- Specific changes to address those areas
- broker does not retain frames outside of the network buffer.
- network buffers are of a fixed, configurable, size.
- client does not retain frames outside of the network buffer
- client network writes block if the buffer is full
- see Producer flow control for more details of the higher level aspects of this, IO work is purely focussed on the network layer, not the AMQP semantics.
- Current requirements which need to be carried forward
- Buffer size tuning
- TCP nodelay toggle
- SSL - link level encryption, what about cert validation etc?
- Protect-io
- Multi-io
- Write biasing
- Plugability
- Define interface
- Decouple protocol handling from transport
- Allow arbitrary plugins to be loaded at runtime ?
Tasks
- Common
- Define common transport interface
- Client side
- Port to new common interface
- Replace MINA ByteBuffer with nio ByteBuffer for portability
- Broker side
- Port to new common interface
- Replace MINA ByteBuffer with nio ByteBuffer for portability
#Design Framework
##Objective and Scope.
###Overview:
###Problem Statement:
###Current Architecture:
###Exclusions: / Assumptions:
##High-Level Technical Architecture
###Functional Requirements:
###Non Functional Requirements:
###Architecture Design
####Overview of Design
####Breakdown of component parts.
##Testing Approach: