Thursday, August 15, 2013

Твиттер без интернета



@briztaker: Интересно, сколько бы почтовых голубей потребовалось, чтобы запустить Твиттер без интернета.


Допустим, все станции стационарны. Из статьи [1] имеем следующие данные: средняя скорость голубя 65 км/ч, дальность среднего преодолеваемого им отрезка пути = 300 км. А для гарантии доставки на один пакет с данными в среднем нужно 3 голубя.


По имеющейся информации [2], в 2010 году было 3 × 10⁹ запросов к API в сутки, что составляло 75% трафика твиттера. Обычный размер пакета данных (MTU) в Интернете = 1400 байт, чего должно быть вполне достаточно на передачу 1 API call. Данные взяты отсюда [3], если кто не верит.


А вот эти данные являются моими допущениями:
  1. если предположить, что голуби летают свои 300 км (пять часов) раз в два дня, то аптайм птицы (время нахождения в полёте) составляет 10%;
  2. если расстояние больше 300 км, то следующий голубь со станции вылетает мгновенно после прилёта предыдущего;
  3. коммуникации осуществляются вне зависимости от местонахождения серверов Твиттера, напрямую между адресатами, т.е. голубь вылетает из точки отправителя до точки получателя;
  4. станции голубиной почты работают со 100% аптаймом, и сервисного трафика вроде смены маршрутизации между ними нет;
  5. и отправка, и получение твита совершаются за 1 API call. Запросы считаем совершаемыми по протоколу HTTP over TCP/IP, и на 1 API call нужно 2 пакета (пакет и подтверждение), т.к. условно говоря, TCP-соединения между станциями голубиной почты уже установлены;
  6. в данной калькуляции учитываются только запросы к API, а content delivery network, сервирующий аватарки и картинки, не учитывается;
  7. среднее расстояние до подписчика (судя по моим фолловерам) = 1000 км;
  8. в настоящее время трафик Твиттера в 10 раз больше, чем в 2010 году.


Считаем:
Из среднего расстояния до подписчика, количество голубей на один API call:
1000 км / 300 км = 4 отрезка пути,
(4 отрезка × 3голубя/отрезок) / 2 пакета/call = 24 голубя/call  .


Время, необходимое для передачи одного API call:
1000 км / 65 км/ч=15,4 часа.


Итого, чтобы обслужить все API calls в сутки, с учётом аптайма голубя, нужно:
(15,4 ч / (24 ч/сут  10% аптайма)) × ((3 × 10⁹ calls/сут × 10) / 75%) = 257 миллиардов голубей.


Конечно же, допущений очень много, и получившийся результат годится лишь для оценки порядка величины.


No comments:

Post a Comment