Расчеты

1. Расчет нагрузки на сеть (bandwidth)

1.1. Исходящий трафик - который идет от нашей системы до клиента


1.1.1 Объем данных на одного клиента в секунду.

- Кол-во обновлений в секунду на одного клиента:
Обновления = 1,000 тикеров * 10 обновлений = 10,000 обновлений в секунду

- Объем данных в секунду на одного клиента:
10,000 обновлений * 12 байт = 120,000 байт = 117.19 КБ/сек

1.1.2 Общая нагрузка на исходящий трафик (на всех клиентов)
Всего клиентов: 1,000,000

- Общий объем данных в секунду:
1,000,000 клиентов * 120,000 байт = 120,000,000,000 байт/сек = 120 ГБ/сек


1.2. Входящий трафик - который идет от биржи в нашу систему

RPS: 1,000,000 * 10 = 10,000,000. Так как 1 mln tickers с обновлением 10 раз в сек

10,000,000 * 12 = 120,000,000 байт/сек = 120 Мб/сек = 0.12 ГБ/сек


2. Storage

2.1 Real-time данные
Общее количество тикеров: 1,000,000
Размер одного тикера: 12 байт

Общий объем активных данных:
1,000,000 * 12 байт = 12,000,000 байт = 12 МБ

Комментарий: Это кажется очень маленьким, но это только "сырые" данные.
Обычно к ним добавляются служебные данные, ключи, индексы и т.д. Реально стоит считать с запасом, например, 3-5x:
12 МБ * 5 = 60 МБ — ориентировочный объем памяти под активные данные.

2.2 State данных на какой-то момент времени (разберем дальше, что это и зачем)
~60 МБ (активные данные с запасом)

2.3 Redis должен уметь обрабатывать 10 млн обновлений в секунду (write ops)
10 обновлений в сек * 1 million tickers = 10 mln

Как мы видим, входящая нагрузка не такая большая, а вот исходящая — серьезная.