How to rebuild a websocket
service by golang and redis
LY @MaiCoin 2020.08.25
Slide 2
Slide 2 text
BACKGROUND
Slide 3
Slide 3 text
CRYPTOCURRENCY EXCHANGE
Slide 4
Slide 4 text
API EVERYWHERE
Slide 5
Slide 5 text
API EVERYWHERE
/depth
Slide 6
Slide 6 text
API EVERYWHERE
/markets
Slide 7
Slide 7 text
API EVERYWHERE
/kline
Slide 8
Slide 8 text
API EVERYWHERE
/public_trades
/private_orders
Slide 9
Slide 9 text
Websocket v1
• Rails em-websocket
• RabbitMQ
• Ticker
• Push when data changed
• Order Book Push order book operation
• Private channel
• Account only
Slide 10
Slide 10 text
Websocket v2
• Golang gorilla/websocket
• Deploy with Rails
• Ticker
• Push when data changed Push data every 5 seconds
• Order Book
• Not production ready
• Private channel
• Not implement
Slide 11
Slide 11 text
PAIN POINTS
Slide 12
Slide 12 text
Too Many Requests
Polling
Every 3 seconds
6 requests
120 requests/minutes
Slide 13
Slide 13 text
Slow Response
Polling
1.5 seconds
CDN issues
Slide 14
Slide 14 text
Low priority
New Features
Bug fix
Operations
Slide 15
Slide 15 text
ARCHITECTURE
Slide 16
Slide 16 text
At the Beginning
Slide 17
Slide 17 text
Final
RabbitMQ Worker Redis
WebSocket
Server
WebSocket
Client
Slide 18
Slide 18 text
THE RIGHT WAY
Slide 19
Slide 19 text
Good Infra
Kubernetes
Helm chart
Jenkins
Gitflowd
Grafana
Kibana
Machine
Management
CI/CD
Monitor/Log