Thursday, October 25, 2012

CDN, безопасность

​Продолжение предыдущего поста.
Для обеспечения возможности безопасной работы нужно обеспечить возможность подписывания пакетов ключом и размещения узла, обеспечивающего взаимосвязь классический протокол - пириговая сеть, в подконтрольном базовому сайту узле с возможностью иметь два канала: 
  • первый непосредственный для связи с базовым узлом. Максимально защищенный с возможность проверки корректности, этот канал необходим для передачи ключей и других данных для проверки и преобразования классический url в хеши;
  • и второй канал для передачи данных - полностью открытый, но можно проверить целостность пакетов по информации с первого канала.

Tuesday, October 23, 2012

​CDN, общие идеи

Это описание абстрактной реализации, 
не имеющей ничего общего с реальными реализациями.

Сеть доставки контента содержит три уровня: 
  • первый нацелен на получение обновления с сервера сайта, должен быть максимально ближний к исходному серверу на сетевом уровня, географически это не обязательно главное максимальная скорость и минимальная задержка получения данных; 
  • второй уровень содержит систему передачи данных между уровнями, основная цель быстрая доставка данных внутри сети между узлами первого уровня и узлами третьего уровня - обеспечивает максимальную скорость передачи данных между географически удаленными частями различных уровней; 
  • третий уровень узел ближайший к клиенту, ответственен за максимально быструю отдачу контента конечному пользователю. В общем случае наибольший объем трафика идет от первого уровня к третьему - но это не обязательно так как конечный клиент также может генерировать трафик. 


Общая логика работы: 
  • при получения запроса от клиента ближайший узел к клиенту ищет сервер который является наиболее близким к исходному узлу назначения; 
  • после нахождения наилучшего пути, узел с первого уровня получает контент с конечного узла и генерирует хеш от данных и другие идентифицирующие контент данные и передает на третий уровень; 
  • если у третьего уровня нет подобных данных он запрашивает данные с первого уровня, через второй уровень который может быть пиринговой сетью; 
  • все данные при передаче должны быть сжаты и по возможности очищены от не критичных для результата данных, таких как переводы строчек и пробелы. Если возможно то и от описания изображений вида даты создания которые не критичны для пользователя; 
  • внутри сети передачи и на конечных узлах данных идентифицируются по описателям характерным для сжатого контента с сохранением изначальных характеристик - для последующей идентификации изменения исходных данных; 
  • на узлах первого уровня контент хранится также в исходном в виде - чтобы избежать вероятности коллизий хеш функции и позволяет перепроверять данные, при последующем получении подобных; 
  • при новом запросе клиента - делается только дополнительный запрос на первый уровень и если изменений нет, то передается оригинальный заголовок. Данные разбиваются на две части заголовки запроса и контент запроса. Что позволяет кешировать и передавать их отдельно. 

Для ускорения работы возможно имеет смысл иметь функциональность третьего уровня на пользовательском устройстве с поддержкой интерфейса второго уровня для упрощений и ускорения получения контента. Это должно быть достаточно эффективно, но для более эффективной защиты безопасности - данные должны кешироваться и доставлять только в случае когда шифрование не требуется, так как в этом случае возможен подбор и получение какого-то контента без шифрации. 
Также сложно обеспечить шифрование между сетью и конечным клиентом.  Так как ключи нельзя передавать в потенциально не безопасные среды, так как возможна подмена данных для конечного пользователя. 
Для открытой сети: желательно дополнительно передавать дополнительный ключ соединения и если данные потенциально могут быть привязаны к клиенту и не давать пользовательским системам получать доступ без корректного ключа соединения.

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

Thursday, October 11, 2012

CDN

​Идея относительно оптимизации обновления кеша в CDN(впрочем как и любого reverse proxy): можно запоминать кроме самого контента и максимального времени хранения с параметрами обновления (хеш и время обновления) еще время за которое контент был получен. И на основе количества запросов к контенту после первого получения делать для топового контента запрос перед окончанием времени хранения, как раз на время получение первого результата, дополнительный запрос для получения обновления контента. Перед этой операцией также анализировать эффективность данного решения: и для быстро генерируемого, контента который генерируется за время сравнимое с временем кеширования или редко запрашиваемого предварительный запросы не делать. Также можно на первый запрос после окончания времени кешированияно до окончания времени ожидания ответа на изначальный запрос, еще выдавать старый контент, если это время еще в пределах разумного.

Wednesday, October 3, 2012

Android прошивки

​Существуют общность возможно даже недостаток прошивок Android и стабильных версий дистрибутивов и в общем-то любых прошивок - используются старые версии библиотек. Но все же ближе к обычным прошивкам - так как после релиза не вносятся изменения в базовые компоненты. Возможно, что версия библиотек определяется как последняя стабильная версия на момент начала разработок, и основные изменения вносятся только во внутренние части продуктов, разрабатываемых внутри компании и как следствие представляющие наибольший интерес для компании разработчика.
Было бы удобно, если бы бекпортировали изменения в ядре и библиотеках связанных с безопасностью openssl, openvpn и тому подобное. И обновляли все библиотеки у которых не меняется внешний интерфейс, например libxml и bash и sudo. И прошивка для телефонов поддерживающих по каким-то причинам только версию 2.3.* с обновленными ssl библиотеками и браузером, была достаточно полезна. Так же было бы не неплохо иметь возможность устанавливать и обновлять все пользовательские приложения не относящиеся к базовой функциональности в виде пакетов, например обновлять браузер(не html движок)и телефонное приложение, а в базовой обновляющееся только с прошивкой: сервисы, виртуальная машина и все остальные части в отдельном обновляемом разделе, который можно перекрывать как сейчас, когда обновленные версии хранятся в отдельном разделе.
Результатом моей попытки по обновления компонентов которые собираются без проблем со старым abi без изменений в критических компонентах к которым привязаны бинарные библиотеки для поддержки аппаратуры можно посмотреть сдесь.