DCAS handbook

CDN architecture draft

Порядок запуска:

Раз: Бутается основной сервач

  • В этот момент у нас нет никакого CDN вообще, и юзер не может ни читать, ни грузить пикчи

Два: Мастер-CDN коннектится к основному сервачу

  • Теперь юзер читает и пишет пикчи на мастер-cdn
  • Т.к. может быть только один мастер (чтобы иметь single source of truth), то имеет смысл в конфиге основного сервача добавить поле “вот этот user id – master cdn”

Три: Slave-CDN коннектятся к основному сервачу:

  • Теперь юзер пишет пикчи на мастера, а читает их со слейвов;
  • По-хорошему, неплохо бы раскидывать нагрузку между слейвами в зависимости от региона юзера и текущей нагруженности CDN’ов;
  • Но объективно в обозримом будущем у нас или вообще не будет слейвов, или он будет только один (где-нибудь в Мск или Спб?);
  • Если slave CDN подцепился раньше мастера – юзер сможет читать пикчи, но не сможет грузить;

Порядок работы:

  1. Юзер стучится на основной сервач, мол, хочу загрузить пикчу;
  2. Основной сервач отправляет грант мастеру;
  3. Основной сервач говорит юзеру “грузи вон туда с таким-то токеном”;
  4. Юзер грузит пикчу на мастер-сервач;
  5. Мастер сервач говорит основному серверу “у меня появилась новая пикча”;
  6. Основной сервач говорит слейвам “на мастере появилась новая пикча”;
  7. Слейвы скачивают пикчу с мастера;
  8. Примерно в этот момент юзер отправляет свое сообщение (для которого он грузил пикчи);
  9. Мастер рассылает сообщение юзерам, подставляя нужный CDN URL для каждого пользака;
  10. Пользаки ломятся на CDN и запрашивают пикчу;
  11. CDN проверяет есть ли у него эта пикча;
  12. Если нет – спрашивает ее у мастера;
  13. Если есть – дожидается пока будет снят лок с фаила;
  14. CDN отдает пикчу юзеру;

!!! Ванилла-юзер и загружает, и тягает мелочевку (аватары, стикеры) с захардкоженного CDN