
Выбирайте самое простое решение с наиболее общими гарантиями, которые практически полезны.
— Дао YouTube
YouTube практически на протяжении всех 7 лет своего существования является мировым лидером в сфере интернет-видео. С точки зрения технической реализации проект оказался достаточно консервативным — команда придерживается того же курса и стека технологий, с которых все начиналось еще до приобретения проекта Google. Но с 2008 года, когда я написал первый обзор архитектуры YouTube, все же произошли интересные изменения, о которых я и хотел бы сегодня вкратце рассказать.
Статистика
- 4 млрд. просмотров страниц в день
- 60 часов видео загружается каждую минуту
- 350 миллионов устройств подключено к YouTube
- На февраль 2012 года в США по данным comScore:
- 147,4 млн. уникальных зрителей
- 16,7 млрд. просмотров видео (в октябре 2011 было больше 20 млрд.)
- Каждый зритель посмотрел в среднем 7 часов видео за месяц
- 1.1 млрд. просмотров видео рекламы, суммарной длительностью в 10.8 млн. часов
Технологии
- Linux — операционная система
- Apache — основной HTTP-сервер
- lighttpd — отдача видео из YouTube CDN
- Zookeeper — распределенные блокировки, хранение конфигураций
- Python:
- wiseguy — FastCGI-прослойка между Apache и Python
- pycurl — лучшая доступная реализация HTTP-клиента, но в итоге все равно заменили на самописное низкоуровневое решение, выиграв 8% в потреблении вычислительных ресурсов.
- spitfire — высокопроизводительный шаблонизатор на основе абстрактного синтаксического дерева с регулируемым уровнем оптимизации (как в gcc)
- bson в качестве формата сериализации
Vitess
- Основная цель проекта — предоставление всех необходимых инструментов и серверов для горизонтального масштабирования баз данных на основе MySQL, с учетом потребностей современных интернет-проектов.
- Реализован на Go — все еще экзотическом языке программирования, также родившемся в стенах Google. Сравним по производительности с C++ и Java, но несколько более «выразителен».
- Опубликован в opensource 24 февраля 2012 года, совсем недавно, так что YouTube — по-прежнему единственный пример его использования на практике в крупном проекте.
- Готовые клиентские библиотеки пока только для Python и Go, что не удивительно, но есть и универсальные интерфейсы на основе HTTP и просто TCP-сокетов.
- Основной формат данных — bson, как и в MongoDB, но по словам разработчиков Vitessих реализация выполняет (де)сериализацию в 10-15 раз быстрее.
- Ядром проекта выступает Vtocc, SQL-прокси с RPC интерфейсом, позволяющий перераспределять запросы от большого количества (более 10 тыс.) одновременно подключенных клиентов в сравнительно небольшое количество соединений с базами данных. Пропускная способность порядка 10 тыс. запросов в секунду.
- Встроенные возможности Vtocc:
- парсер и анализатор SQL-запросов для оптимизации их выполнения;
- заполнение типичных запросов переменными с поддержкой кэширования результатов;
- управление транзакциями и сроками их выполнения («убивает» затянувшиеся);
- для каждого пространства ключей (логической таблицы) можно указать фактор репликации, что создаст необходимое количество второстепенных баз данных в дополнение к мастеру;
- можно явно указать, что чтение необходимо произвести с мастера (важно когда пользователь только что выполнил какое-то действие и должен сразу же увидеть его результат);
- отдельные пулы соединений для выполнения операций чтения и записи;
- исключение «зависших» соединений из пулов;
- перезапуск без простоя системы;
- поддержка DML.
Партиционирование
- Во всех таблицах должна быть колонка с уникальным ключем, на основе которого данные будут распределяться по кластеру.
- Партиционирование основано на диапазонах ключей, что позволяет держать «карту» партиций в памяти и очень быстро определять где располагаются те или иные данные, но обратной стороной медали является вероятное возникновение «горячих» узлов в кластере, особенно при монотонно увеличивающихся значениях ключей (рекомендуется использовать случайные).
- Поддерживаются ключи в виде натуральных чисел или произвольных бинарных данных.
- При высокой нагрузке на одну партицию она может быть распределена на две путем фильтрованной репликации; в дальнейшем планируется реализовать и обратный процесс.
- Еще в планах:
- Поэтапное внесение изменений в схему данных без видимого простоя системы;
- Поддержка работы в нескольких датацентрах с концентрацией мастер-серверов в одном датацентре и использования остальных в режиме только для чтения.
Подводим итоги
- YouTube — еще один проект мирового масштаба, который с самого начала использовал MySQL и оказался не в силах от него отказаться, не смотря на трудности с горизонтальным масштабированием.
- По аналогичному пути пошли и другие проекты, схожие с Vitess надстройки над MySQL используются в Facebook и Twitter:
- В Facebook она дополнена сильной интеграцией с memcached и сильно ограниченным интерфейсом, не имеющим практически ничего общего с SQL. Планы о публикации в opensource, кажется, были, но я не слышал чтобы они воплотились в жизнь. // Уже почти дописав статью случайно заметил в коде, а потом и мелким шрифтом в документации, что в Vitess тоже используется memcached для кэширования из-за проблем со сборщиком мусора Go.
- Twitter по-прежнему использует свою связку FlockDB + Gizzard на Scala, которые уже пару лет публично доступны. В отличии от Vitess она заточена на хранение информации о социальных графах, по-этому сфера её применения как в Twitter, так и за его пределами ограничена.
В комментариях предлагаю обсудить слабые и сильные стороны использования надстроек над реляционными базами данных, скажем по сравнению с использованием изначально-распределенных СУБД, таких как Riak, Cassandra и многих других. Может быть кто-то уже успел прикрутить к своему проекту Vitess или хотя бы FlockDB и готов поделиться впечатлениями?
Для чего нужны библиотеки?
Источники информации
- Mike Solomon на PyCon’12 (один из первых разработчиков проекта)
- О проекте Vitess
- Статистика comScore на февраль ’12
Источник: www.insight-it.ru
Библиотеки. Расширяем возможности контроллера

1) Войдите в меню «Скетч» и наведите курсор на строку «Подключить библиотеку».

2) «Подключить библиотеку». При наведении курсора на подменю справа отобразится список доступных библиотек. Для того, чтобы добавить новую, нажмите «Добавить .ZIP библиотеку».

3) «Добавить библиотеку». Укажите путь к заранее скачанному архиву с библиотекой и дважды щелкните клавишей мыши по файлу.

4)«Библиотека добавлена». После того, как архив будет загружен, в области уведомлений Вы увидите сообщение о том, что библиотека загружена. Найти её Вы можете в меню «Скетч» → подменю «Подключить библиотеку».
Давайте сразу скачаем и подключим все библиотеки, которые нам понадобятся при работе с машинкой. Так нам не придётся при использовании нового модуля возвращаться к этому уроку.
Скачайте и установите аналогично iarduino_I2C_Motor следующие библиотеки:
- iarduino_HC_SR04 — для работы с ультразвуковым датчиком расстояния;
- iarduino_HC_SR04_tmr — вторая библиотека для работы с ультразвуковым датчиком расстояния (пояснение ниже);
- iarduino_IR — для работы с инфракрасным приёмником;
- iarduino_I2C_IR— вторая библиотека для работы с инфракрасным приёмником (пояснение ниже);
- iarduino_I2C_Bumper — для работы с модулем Бампер-датчик линии;
- iarduino_I2C_Matrix_8x8 — для работы с матрицей 8х8;
- iarduino_I2C_Track — для работы с дорожными знаками и светофорами;
- iarduino_I2C_Address — для установки адресов модулей серии I2C-flash.
Убедитесь, что библиотеки добавлены. Все они должны быть в списке:

Щелкните клавишей мыши по строке с именем нужной библиотеки, и она будет добавлена в скетч. Кстати, в меню «Файл», подменю «Примеры» можно увидеть примеры работ с библиотеками. Там можно найти уже готовые интересные и полезные скетчи, обязательно загляните туда.
Как Вы заметили, мы установили по две библиотеки для работы с ультразвуковым датчиком расстояния и инфракрасным приёмником. Вторые библиотеки пригодятся нам в следующей главе, сейчас мы просто установили их заранее.
Проверка модулей-моторов. Функции управления моторами
Теперь, после того как библиотека для работы с модулем-мотором подключена, мы можем загрузить в контроллер небольшой скетч, который позволит вращать колесо сначала в одну сторону, а затем — в другую (напомним, мы пока подключили только правое колесо).
#include // Подключаем библиотеку для работы с шиной I2C #include // Подключаем библиотеку для работы с мотором iarduino_I2C_Motor mot(0x09); // Объявляем объект mot для работы с функциями и методами библиотеки // iarduino_I2C_Motor, указывая адрес модуля на шине I2C void setup() < mot.begin(); // Инициируем работу с мотором. >void loop()< mot.setSpeed(100, MOT_PWM); // Запускаем мотор на скорости 100% ШИМ delay(2000); // Ждём 2 секунды mot.setStop(); // Останавливаем мотор delay(2000); // Ждём 2 секунды mot.setSpeed(-100, MOT_PWM); // Запускаем мотор на скорости 100% ШИМ в обратном направлении delay(2000); // Ждём 2 секунды mot.setStop(); // Останавливаем мотор delay(2000); // Ждём 2 секунды >
- Директива #include(1, 2 строки) используется для подключения библиотек в наш скетч. Некоторые библиотеки уже установлены в Arduino IDE, а некоторые нужно установить самостоятельно, как мы делали ранее. Однако, все они подключаются с помощью этой директивы.
- Библиотека Wire .h позволяет работать с шиной I2C (именно по ней передаётся сигнал управления модулями). Библиотека уже установлена в нашу среду разработки.
- Библиотека iarduino_I2C_Motor .h. Библиотека добавляет удобные функции управления моторами. Постепенно мы с ними познакомимся.
- iarduino_I2C_Motor mot(0x09);(3 строка). С помощью подключенной нами библиотеки iarduino_I2C_Motor создаём объект мотора с именем mot. Объект имеет имя и свойства. Одно из свойств — адрес. В нашем случае — 0х09 (это просто номер, записанный в шестнадцатеричной системе счисления).
- mot.setSpeed(100,MOT_PWM); (9 строка) setSpeed() — это одна из тех удобных функций управления мотором, про которые мы писали выше. В неё передаётся два параметра: скорость (в нашем случае 100%) и способ её задания. MOT_PWM означает, что число, переданное в функцию, — это процент заполнения ШИМ. Чем меньше число, тем медленнее вращается колесо. Подробнее про ШИМ мы расскажем позже.
Отлично! У машинки вращается одно колесо, правда, так далеко не уедешь. Теперь можете попробовать подключить левое колесо к плате и снова включить машинку. Теперь оба колеса вращаются, но в разные стороны, а машинка крутится на месте. Но ведь это совсем не то, чего мы хотели, что же произошло? С этим мы разберёмся в следующем уроке.
Источник: robotraffik.ru
Обзор медиасетей YouTube. Нужна ли медиасеть? Медиасеть GTRussia и другие
![]()
Данная тема будет интересна каждому автору, кто работает и зарабатывает на YouTube и хочет развивать свой канал. Нужны ли вообще медиасети или это лишние посредники и лучше работать с Adsense? Подробный разбор в видео:
К сожалению, действительно существуют медиасети, из-за которых сложилось мнение, что с сетями лучше не сотрудничать. Но, к счастью, от таких медиасетей YouTube с некоторого времени позволяет отключиться в одностороннем порядке.
2 модели работы медиасетей
- Модель №1 — это когда берут количеством в прямом смысле, т.е. просто набирая каналы, «выжимают» их и затем выкидывают.
- 2 модель предполагает качественную работу на перспективу.
Те, кто работают по 1 модели, оказывают помощь лишь топовым каналам, отвечая остальным авторам шаблонными ответами (порой, это делают чат-боты). В таком случае недовольство авторов абсолютно обоснованно.
Модель №2 представлена на YouTube в меньшинстве. Но зато она реальна и авторы каналов получают реальную помощь с развитием (с контент-стратегией, в частности). Здесь ситуация, когда выигрывает и медиасеть и автор канала. Это рационально и логично.
Правильная медиасеть заинтересована «поднимать» авторов, ведь когда растут доходы канала, то растут и доходы сети.
Смысл работать с медиасетью, когда есть Adsense?
Во-первых, в медиасети реально безопаснее. Вы избегаете ряда рисков, связанных с неправомерным отключением монетизации (в том числе и за накрутку кликов по рекламе от ваших конкурентов). Также избегаете риска бана каналов, подключенных к одному Adsense (когда из-за проблем с 1 каналом на Adsense можно потерять всё).
Кто-то может сказать: «но ведь я отдаю комиссию медиасети — не значит ли, что я буду зарабатывать меньше?». Дело в том, что доходность канала в медиасети выше из-за дополнительных форматов рекламы, а также медиасеть занимается дополнительной закупкой рекламы. Это всё положительно влияет на CPM и итоговую доходность канала.
Также в качественной медиасети есть:
- музыкальные библиотеки;
- инструменты, помогающие при оптимизации;
- возможность работы с Content ID;
- удобство выплат заработанных денег;
- поддержка;
Важно, что при работе в медиасети вы не нарвётесь на проблемы с законом. Подробнее в видео (см. на 5 минуте 56 секунде).
Подробный разбор преимуществ работы в медиасети смотрите в методичке: «Что выбрать: Медиасеть или AdSense?»
Навигация по видео выше:
- 00:19 Нужны ли вообще медиасети?
- 02:14 про 2 модели работы медиасетей
- 03:51 принцип работы многих крупных медиасетей
- 04:11 правильная модель сотрудничества
- 04:41 так стоит ли вообще работать с медиасетью, а не Adsense?
- 05:19 доходность в медиасети https://konoden.ru/obzor-mediasetej-youtube-nuzhna-li-mediaset-mediaset-gtrussia-i-drugie/» target=»_blank»]konoden.ru[/mask_link]