Организация работы на нескольких CDN

LmSys

New Member
Вводная часть: есть две группы серверов (edge и origin в каждой группе), в USA и EU, каждая группа объединена в свой CDN по географическому признаку.

1. Могут ли инстансы из одного CDN знать о потоках (потреблять их) на инстансах другого CDN? Если нет - то следующие два вопроса, видимо, теряют актуальность, так как в них подразумевается, что вопросы роутинга запросов между инстансами разных CDN решаются силами самого же CDN путём его правильной конфигурации, без какого-либо вмешательства третьей стороны или принудительной публикации потока через API в другой CDN.
2. Поток публикуется на origin в CDN EU, пользователь запрашивает поток с edge в CDN USA. Может ли edge в CDN USA тянуть поток с origin в CDN EU?
3. Поток публикуется на origin в CDN EU, пользователь запрашивает поток с edge в CDN USA. Может ли edge в CDN USA тянуть поток с origin в CDN USA, который, в свою очередь, сам стянет его с origin в CDN EU?

Необходимость в двух (и более) CDN обусловлена требованиями отказоустойчивости: скажем, если не заморачиваться с этим, то, объединив все сервера в один CDN, в случае отказа хоста в "cdn_point_of_entry", проблема коснётся всех узлов во всех регионах. Тогда как, в случае независимых CDN со своими "cdn_point_of_entry" но "знающих" о других CDN, такая проблема была бы локализована в одном CDN.
 

Max

Administrator
Staff member
1. Могут ли инстансы из одного CDN знать о потоках (потреблять их) на инстансах другого CDN? Если нет - то следующие два вопроса, видимо, теряют актуальность, так как в них подразумевается, что вопросы роутинга запросов между инстансами разных CDN решаются силами самого же CDN путём его правильной конфигурации, без какого-либо вмешательства третьей стороны или принудительной публикации потока через API в другой CDN.
Могут только в том случае, если имеют общие точки входа (на них прописан одинаковый cdn_point_of_entry, либо узел из одной группы прописан как точка входа для серверов другой группы). Т.е. это должны быть две группы в одной CDN, например
Code:
cdn_groups=EU
включает o-eu1, e-eu1, e-eu2
Code:
cdn_groups=US
включает o-us1, e-us1, e-us2
При этом на e-eu1 и e-eu2 точкой входа прописан o-eu1
Code:
cdn_point_of_entry=o-eu1
на e-us1 и e-us2 прописан o-us1
Code:
cdn_point_of_entry=o-us1
а на самом o-us1 точкой входа прописан o-eu1
2. Поток публикуется на origin в CDN EU, пользователь запрашивает поток с edge в CDN USA. Может ли edge в CDN USA тянуть поток с origin в CDN EU?
Да, может, если CDN настроить, как описано выше
3. Поток публикуется на origin в CDN EU, пользователь запрашивает поток с edge в CDN USA. Может ли edge в CDN USA тянуть поток с origin в CDN USA, который, в свою очередь, сам стянет его с origin в CDN EU?
В текущей реализации, origin не может забирать поток с другого origin. Настройка cdn_origin_to_origin_route_propagation может принимать только значение false. По этой теме есть тикет WCS-2686, но его реализация потребует значительной переработки протокола CDN.
Необходимость в двух (и более) CDN обусловлена требованиями отказоустойчивости: скажем, если не заморачиваться с этим, то, объединив все сервера в один CDN, в случае отказа хоста в "cdn_point_of_entry", проблема коснётся всех узлов во всех регионах.
Узел, выполняющий функцию точки входа в CDN, не является точкой отказа. Если сервер, указанный в cdn_point_of_entry, прекратит работу, CDN продолжит нормально работать без него.
Поясним алгоритм работы.
В CDN каждый узел устанавливает соединение с каждым по служебному websocket порту 8084 (по умолчанию). При запуске сервера, он пытается установить первое такое соединение с узлом, указанным в его настройке cdn_point_of_entry. Затем он получает с этого узла список всех узлов CDN и устанавливает служебное соединение непосредственно с каждым из списка.
Таким образом, при отказе сервера, который прописан как точка входа, каждый узел продолжит обмениваться служебными пакетами с каждым и, соответственно, сможет забирать потоки с origin-узлов.
Однако те узлы, которые были отключены на момент отказа точки входа, не смогут войти в CDN до тех пор, пока точка входа не восстановится.
 
Last edited:

LmSys

New Member
Т.е.
Поток паблишится на o-eu1
Пользователь №1 из USA хочет просмотреть поток на e-us1 эдж будет тянуть поток с o-eu1.
Пользователь №2 из USA хочет просмотреть поток на e-us2 эдж будет тянуть поток с o-eu1.
 

LmSys

New Member
Я немного тогда не понимаю что нам дает использования групп. Если не использовать группы и прописать всем инстансам точку входа o-eu1 то чем это будет отличатся от реализации выше?
 

Max

Administrator
Staff member
Поток паблишится на o-eu1
Пользователь №1 из USA хочет просмотреть поток на e-us1 эдж будет тянуть поток с o-eu1.
Пользователь №2 из USA хочет просмотреть поток на e-us2 эдж будет тянуть поток с o-eu1.
Да, именно так.
Origin и Edge узлы размещаются ближе к паблишерам и зрителям.
Если пользователь №3 подключится к e-us1 и будет смотреть этот же поток, он не будет вторично тянуться с o-eu1. Т.е. один поток тянется на один Edge только один раз, это снижает нагрузку на канал между регионами.
Я немного тогда не понимаю что нам дает использования групп.
Группы пригодятся в будущем, при использовании транскодинга. Transcoder серверы также размещаются по группам, что позволяет контролировать нагрузку на них и, опять-таки меньше грузить каналы до Origin серверов.
 
Top