@startuml participant User User -> HAProxy: tcp activate HAProxy HAProxy -> SPOA: on-client-session activate SPOA SPOA -> "SPAN/HAProxy session" activate "SPAN/HAProxy session" "SPAN/HAProxy session" -> "SPAN/Client session": child-of activate "SPAN/Client session" SPOA --> HAProxy deactivate SPOA HAProxy -> SPOA: on-frontend-tcp-request activate SPOA SPOA --> "SPAN/Client session" "SPAN/Client session" -> "SPAN/Frontend TCP request": child-of activate "SPAN/Frontend TCP request" HAProxy -> HAProxy: frontend/tcp-request content rules SPOA --> HAProxy deactivate SPOA HAProxy -> SPOA: on-frontend-http-request activate SPOA SPOA --> "SPAN/Frontend TCP request" "SPAN/Frontend TCP request" -> "SPAN/Frontend HTTP request": follows from activate "SPAN/Frontend HTTP request" deactivate "SPAN/Frontend TCP request" SPOA --> HAProxy deactivate SPOA HAProxy -> HAProxy: frontend/http-request content rules HAProxy -> SPOA: on-backend-tcp-request activate SPOA SPOA --> "SPAN/Frontend HTTP request" "SPAN/Frontend HTTP request" -> "SPAN/Backend TCP request": follows from activate "SPAN/Backend TCP request" deactivate "SPAN/Frontend HTTP request" SPOA --> HAProxy deactivate SPOA HAProxy -> HAProxy: backend/tcp-request content rules HAProxy -> SPOA: on-backend-http-request activate SPOA SPOA --> "SPAN/Backend TCP request" "SPAN/Backend TCP request" -> "SPAN/Backend HTTP request": follows from activate "SPAN/Backend HTTP request" deactivate "SPAN/Backend TCP request" SPOA --> HAProxy deactivate SPOA HAProxy -> HAProxy: backend/http-request content rules HAProxy -> SPOA: on-server-session activate SPOA SPOA --> "SPAN/HAProxy session" "SPAN/HAProxy session" -> "SPAN/Server session": child-of activate "SPAN/Server session" SPOA --> "SPAN/Backend HTTP request" deactivate "SPAN/Backend HTTP request" SPOA --> HAProxy deactivate SPOA HAProxy -> SPOA: on-tcp-response activate SPOA SPOA --> "SPAN/Server session" "SPAN/Server session" -> "SPAN/TCP response": child of activate "SPAN/TCP response" SPOA --> HAProxy deactivate SPOA HAProxy -> SPOA: on-http-response activate SPOA SPOA --> "SPAN/TCP response" "SPAN/TCP response" -> "SPAN/HTTP response" activate "SPAN/HTTP response" deactivate "SPAN/TCP response" SPOA --> "SPAN/Server session" deactivate "SPAN/Server session" SPOA --> "SPAN/HTTP response" deactivate "SPAN/HTTP response" SPOA --> "SPAN/Client session" deactivate "SPAN/Client session" SPOA --> "SPAN/HAProxy session" deactivate "SPAN/HAProxy session" SPOA --> HAProxy deactivate SPOA HAProxy -> User: http/response deactivate HAProxy @enduml
| |
| |
7001v v8001
+-----------------+
| HAProxy~1 |
| |
| +------+ |
| | SPOE | |
| +----+-+ |
| | |
| v |
| +----+----+-----+
| | | | cBLU|
+-+-+--+--+-+--+--+ +-------------------+
| | | | 700x with SPOA {d}|
| | \-------\ | 800x no SPOA cFE7|
7002v v8002 | +-------------------/
+-----------------+ |
| HAProxy~2 | |
| | |
| +------+ | | (devenv/conf/haproxy~2.conf)
| | SPOE | | | (devenv/conf/spoe.cfg)
| +----+-+ | |
| | | |
| backends v | |
| +-------+-----+ |
| | | cBLU| | +-------------+
+---+--+----+--+--+ \-->| SPOA |
| | :7000 | |
| +---------->| cBLU |
| SPOP +-----+-------+
| |
:8080 v v
+------------+ +-------------+
| FakeServer +------------>| OTEL/jaeger |
+------------+ +-------------+
Start local haproxy + fake-server + jaeger
cd devenv/
docker-compose up -d
curl http://localhost:7000Jaeger UI |
|
HAProxy stats |
|
Rust SPOA |
:7001 |
-
SPOP specifications: http://www.haproxy.org/download/2.6/doc/SPOE.txt
-
"Official" HAProxy SPOA "sample" (in c): https://github.com/haproxy/spoa-example
-
"Official" HAProxy SPOA open tracing "sample" (in c): https://github.com/haproxytech/spoa-opentracing
-
HAProxy SPOA example (in rust): https://github.com/vkill/haproxy-spoa-example
-
"Extending HAProxy with the Stream Processing Offload Engine" : https://www.haproxy.com/fr/blog/extending-haproxy-with-the-stream-processing-offload-engine/