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
Как мы видим, входящая нагрузка не такая большая, а вот исходящая — серьезная.