Как построить видеоплатформу на 200 Гбитс /...

29
Building 200 Gbit/s video platform Vyacheslav Olhovchenkov

Upload: ontico

Post on 16-Apr-2017

804 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Building 200 Gbit/svideo platformVyacheslavOlhovchenkov

Page 2: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Load profile• Peak bandwidth 210Gbit/s• Peak bandwidth per edge

40Gbit/s• Daily traffic 1PTB• Views per day 6M • RPS to ruby app: 1000• RPD to ruby app: 60M

Page 3: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Core components• Balancers• Edge servers• Video manager• Encoders• Storage servers• Stats server• Player w/ adv.support: IMA; VPAID,

VAST 2,3• API

Page 4: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Core components (2)

Page 5: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Request flowchart

Page 6: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Balancer (architecture)

Page 7: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Balancer (features)• Geo targeting• Stats• Edge selection• Serving player iframe• Secured manifest transfer• URL signing• Advertising module

Page 8: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Balancer (configuration)• CPU: E3-1270 V2 @ 3.50GHz• RAM: 8GB• SSD• Ubuntu 14.04• RoR, unicorn• PostgreSQL, redis

Page 9: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Balancer• 1000 RPS at peak• 75% CPU utilization

Page 10: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Balancer (tips & tricks)• PgSQL => Redis for hot data• ORM optimization

joins, indexes, pure sql• Linux/nginx optimization

net.core.somaxconn=65535net.ipv4.tcp_fin_timeout = 25…

• RoR optimizationworker_processes = 24timeout = 60

Page 11: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge — history. V1.0. 5Gbit/s• Dual E5-2620@ 2.00GHz• RAM: 32GB• 1x10Gbit Intel NIC• ZMIRROR:

– 12 SATA 3TB– L2ARC (6SSD 256GB)

• ZFS default settings

Page 12: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge (tuning 1)Reason for multiple writes?

zfs set atime=off tank8Gbit/s

Page 13: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge (tuning 2)• HDS, HLS: segment size 300-

500K• Too many files• Prefetch isn’t working

Concatenate segmentsSecond NIC12 Gbit/s

Page 14: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

HDD performancetotal = seek + rotate + transfer

Seek: 9ms (datasheet)Rotate: 7200rpm, 4.17 ms half turnTransfer: BlockSize/160MB/s

Total: 13ms + transfer time128KB: 0.8 ms => 71.4 IOPS, 9.1MB/s1MB: 6.4ms => 53.8 IOPS, 55MB/s

Page 15: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge (tuning 3)• zfs set recordsize=1M

ZFS larger block supportMatthew Ahrens

• HEAD: r274673• STABLE: r27608

• vfs.zfs.prefetch_disable=1• Limited by CPU: 20Gbit/s

Page 16: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge — configuration (CPU)

• Xenon E3 vs E5E3: 32GB RAM Limit

• 40Gbit => 50K clients• 1MB/client => 50GB buffers

• UP E5 vs DP E5High end => high priceLess PCIe slots

Page 17: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge — configuration (disk)SATA average transfer:• 160MB/s linear:

40/(.160*8) = 31 SATA HDD• 50MB/s random:

40/(.050*8) = 100 SATA HDDSSD cost:• x8 expensive $/TB• x4 less size

Page 18: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge — configuration (final)• CPU: 2x E5-2640v3

8 core @ 2.60GHz)• RAM: 128GB• NIC: Chelsio 40Gbit• HBA: LSI2308 + onboard• HDD: SATA x18 (storage)• SSD: 477GB x 8 (cache)

Page 19: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge — performance• 40 Gbit• 40-50K clients• 5Mpps

Page 20: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Edge — tips & tricks• No HT• Dedicated package for

apps• Dedicated package for

NIC• No NUMA

Page 21: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Warm content

Page 22: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Warm content (2)

Page 23: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Warm content (3)

Page 24: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

200Gbit

Page 25: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

P2P (WebRTC)• Streamroot (Fr)• Hot content: wins 67%

13:00

14:00

15:00

16:00

17:00

18:00

19:00

20:00

21:00

22:00

23:00

23:59

0

2.25

4.5

6.75

9

P2PCDN

Page 26: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

P2P Architecture

• Viewer authenticates and initializes the connection with Integros load balancer

• At the same time, viewer connects to Streamroot tracker and requests peers

• Tracker sends back intelligently-selected list of peers• A P2P webRTC data channel is created among viewers to exchange

segments

INTEGROS LOAD BALANCER

STREAMROOTTRACKER

PEER POOL

% SERVERWebRTC

WebRTC

WebRTC

Page 27: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

P2P Issues and Current Status• Issue Aug 2015: Significant traffic

offload followed by partial playback issues

• Reason: Flash-JavaScript interface:– Javascript based WebRTC module – Callback is not error resilient– Fun fact: not documented anywhere

in Flash• Solution: fixed by tweaking Flash-JS

interface• Next step: HTML5 first (hls.js / Dash.js)

to avoid Flash associated issues

Page 28: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

P2P Future• 80% Offload• More clients

TODAY 2016Chrome YES YESFirefox YES YESOpera YES YESEdge BETA YESSafari NO ?iOS SDK NO YESAndroid SDK NO YESSTBs BETA YES

Page 29: Как построить видеоплатформу на 200 Гбитс / Ольховченков Вячеслав (Integros)

Linkshttps://www.youtube.com/watch?v=tujArcDozq0 (railsclub Ruby Meetup №2) https://events.yandex.ru/lib/talks/2694/ (ruBSD2104)[email protected]