18. HTCPCP
RFC 2324, Extended by RFC 7168
"there is a strong, dark, rich requirement for a protocol designed
espressoly [sic] for the brewing of coffee"
http://en.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol
@toddlmontgomery
30. Nuklei
Multi-Lingual
(and Polyglot)
Connected. Services. Tools.
Location
Transparency
Multi-Protocol
& Data Format
Basic
Low-Level API
31. Protocols
Deployment Container
Nuklei
Logic
Reactive
Message Stream
Depends on language,
runtime, platform, etc.
Asynchronous
Binary
“Loose” Ordering
32. Choice of protocols becomes
deployment concern
Protocols
Simple, consistent usage
allows functional
composition of protocols
Deployment Container
Nuklei
Logic
Reactive
Message Stream
Basic
read/write
API
Various
Protocol
Options
Asynchronous Binary Boundary
33. HTTP/1.1
Protocols?
Shared Memory IPC
CoAP AMQP
WebSocket
JMS
WebRTC
Not just in the traditional sense…
MQTT
HTTP/2
TCP/UDP/IP
Aeron 0MQ
34. pro·to·col noun ˈprō-tə-ˌkȯl, -ˌkōl, -ˌkäl, -kəl
@toddlmontgomery
!
...
!
3 b : a set of conventions governing the treatment and especially the
formatting of data in an electronic communications
system <network protocols>
...
3 a : a code prescribing strict adherence to correct etiquette
and precedence (as in diplomatic exchange and in the military
services) <a breach of protocol>
!
35. Protocols are the key to Integration
REST has demonstrated this!
@toddlmontgomery
36. Packet/Frame is common
building block (Ethernet,
ATM, etc.)
Functional Protocol Composition
@toddlmontgomery
e.g. HTTP over TCP looks
same as HTTP over IPC or
HTTP over WebSocket or
HTTP over JMS
e.g. Streams over Messages
is a form of Fragmentation/
Reassembly
Layering becomes natural &
trivial. Also forces
boundaries & decoupling
Not New
37. @toddlmontgomery
TCP
HTTP
Shared Memory WebSocket … JMS
Everything below the
boundary can change even
at runtime
Everything above the
boundary can assume a
constant interface
… … …
Boundary might be
asynchonrous
38. FIX / SBE CBOR
HPACK
XML JMS
Data Format
Divorced from Data Association
@toddlmontgomery
JSON
Message
YAML
Map<> and other native
associations are better than
format specific APIs
39. Addressing
Define an Endpoint
for Connectivity
URIs - Just, but not only Strings
https://www.ietf.org Think about how much
@toddlmontgomery
context this contains!
Simple, Natural,
& Familiar
40. Endpoint can be
anywhere
Location Transparency
More Forced Decoupling
@toddlmontgomery
Bind
Address to “Proxy”
“Proxy” Object Migration
41. Isolation &
Deployment Containment
OS level isolation, don’t duplicate
at the application layer
VM
AMI
App Server
42. BSD Sockets has it right
Read/Write BLOBs
Basic Low-Level API
“Common”
Message/Packet/Frame -based
read(buffer, offset, length)
write(buffer, offset, length)
@toddlmontgomery
43. In Process or Out
/mikro1
Nuklei
/mikro2
Proxy
Proxy
https://localhost:80
https://example.com
https://localhost:80/mikro2
https://example.com
44. Struct Overlays Semi-Stateful Parsers
Flyweights
Know how to access fields efficiently
Prefer to access via dead reckoning (stateless)
@toddlmontgomery