У нас в Яндексе вчера был Бретт Слаткин и мы тёплой компанией инженеров общались про его с Брэдом Фицпатриком детище — PubSubHubbub.
Кто не знает, что такое PubSubHubbub — сходите на страницу проекта, там очень понятная презенташка, лучше и короче не расскажешь. Вещь очень перспективная, как по мне. А после общения с Бреттом я воодушевился технологией ещё больше, потому что ребята придумывают её из очень правильных предпосылок. Он подчеркнул, что простота и практичность ценятся больше теоретической чистоты, и для них пока главное — решить конкретную задачу быстрого обновления фидов, заменив периодический poll на более эффективный push.
Изюминка в том, что этот push отличается от всех предыдущих fail'ов как раз тем, что делается инженерами, и архитектура у него соответствующая (HTTP, слабая связность, отсутствие необходимости в дремучих тулзах).
Вот несколько лично мне запомнившихся хайлайтов из разговора:
- Между собой они называют протокол "Hubbub" или "PSHB", потому что полное название трудно говорить быстро.
- Рефрен про то, что они стараются "make things a bit less awful" удивительно совпал с моей собственной подписью в рабочих email'ах "Making things suck less".
- Сокращение "WS-*" произносится как "WS-crap", очень позабавило :-).
- Впечатлила демка с FriendFeed'ом, который показывает в браузере новый пост в ленте через примерно 1.5 секунды после его написания в совершенно другом месте.
- Да, FriendFeed оказывается поддерживает hubbub, и реализация заняла у них что-то типа одного дня.
- Идея о том, что какой-нибудь блогохостинг, получая новый пост, может сначала разослать апдейты всем получателям, а потом только заняться неспешным складыванием его в БД, экономя на том, чтобы их потом оттуда сразу же вынимать, действительно "hits over the head", как Бретт и обещал. Очень похоже на write-through кеш.
- Как и ожидалось от инженера, ответ на вопрос про бизнес-модель для публичных хабов был куда менее конкретным, чем на все технические вопросы. Кому это интересно, действительно? :-)
В практическом плане я, кажется, воодушевился реализовать на sm.org персональный хаб для блога (как руки дойдут™). Будем ли мы что-то делать в рамках Яндекса, пока не знаю. Это всё пока требует внутреннего технического евангелизма. Но мне очень хочется :-).
Комментарии: 21
Да, было здорово, давно не слышал столь внятных tech talk'ов. Думаю, выступление на GDD перед тысячной аудиторией было не таким клевым :)
Насчет friendfeed - ну вряд ли они за день это сделали, client side там не вполне тривиальный.
Тысячной аудитории в том зальчике не поместилось банально. но клёвости выступления это не отменило.
И клиент- и сервер- сайды тривиальнее некуда. Вся сложность ушла в хаб, это тоже один из поинтов PSHB.
Я за вечер прикрутил к php-форуму рассылку уведомлений о постах в жабер и джанго-приложение.
А вот хаб не на appspot действительно хотелось бы иметь. Пока ничего дельного не нашёл.
Про ffeed кстати, он умеет тягать из гуглеридера shared items, а ридер поддерживает PSHB. В результате пост в вашей ленте появляется быстрее, чем вы страницу переключите, после нажатия "share". И это реально круто.
Под клиентской частью friendfeed'а имеется в виду не то, что он умеет апдейты от хаба принимать, а что его HTML'ная страница держит long-poll соединение со своим сервером и тоже этот апдейт получает. Это уже к самому PSHB не относится.
А этого разве до PSHB небыло?
Как я понимаю это только для чтения новостных лент, но для них никогда и не использовались технологии обмена сообщениями! Весьма различные задачи в данном контексте получаются.
Но вообще понравилось, если не сильно критична небольшая задержка в обновлениях, то реализация протокола во многом проще всяких amqp, в основном из-за развитых средств для работы с HTTP.
Это я так понял из презентации. Если это так, и хаб работает только с лентами, то это несколько ограничивает применение по моему - мне вообще не понятно, зачем хабу ходить за лентой после уведомления о новом контенте - просто отдать контент в уведомлении разве нельзя?
Тут я на самом деле увидел потенциал технологии за пределами RSS и Atom, но для этого видимо придется сделать свой хаб с другой логикой. Опять же - подтверждение подписки для механизма общей шины нечто лишнее - удобнее сделать аутентификацию.
Заметьте - не я начал сравнивать с монстроидными amqp и тп : )
PS Вот это прогресс - из-за косого плагина в процессе написания комментария броузер пришлось убить, но текст не потерялся - ave Mozilla :)
Думаю, выступление на GDD перед тысячной аудиторией было не таким клевым :)
Одна из самых интересных и, на мой взгляд, - удачных сессий на GDD (из тех, что удалось посетить).
Client-to-Hub взаимодействие они пока не рассматривают. На этот вопрос Брет ответил, мол есть куча разных методик реализации онного на клиенте и, в связи с этим, они решили не стандартизовывать этот вид взаимодействия.
Да, хаб основан на семействе протоколов RSS, т.е. работает только с "новостными лентами" (кто сказал, что там должны быть ленты и только ленты?). Почему в уведомлении не отдать? На этот вопрос Брет ответил что-то вроде следующего: есть ряд проблем, как то - необходимо убедиться в identity уведомляющего, необходимо как-то его авторизовывать, необходимо как-то убеждаться в успешной доставке сообщения и т.д. - если Вы можете решить все эти проблемы, то, с тем же успехом Вы можете запустить свой хаб - это настолько же сложная задача. Действительно, если подумать - хабов, подписанных на уведомления может быть несколько тысяч, рассылать им весь контент полностью на каждый чих - не так просто решить эту задачу...
Это делается для предотвращения спама/DoS эффектов на подписчика. Сделать этот процесс удобнее невозможно. Если бы и было возможным - у тех же Google Apps давно появилась бы "удобная" возможность подтверждения того, что домен действительно твой.
Владельцам популярных текстовых генераторов: при достаточном развитии технологии обязательно появится ready-to-deploy решение, устанавливающееся на отдельном сервере, тем самым разгружая основной сервер от раздачи обновлений.
Хаб может вставлять контекстно-зависимую рекламу.
Вот из презентации я тоже нифига не понял пока сам от него вживую не услышал всё это.
Так это и есть проверка на легитимность контента. По сути нотификацию может послать кто угодно, но он не может внедрить посторонний контент в другую ленту, т.к. хаб сам сходит к нему на урл фида.
Я правильно понимаю, что это все для ускорения получения данных из лент и уменьшения нагрузки на сервер?
А в чём проблема с бизнес-моделью? Держат же люди джаббер-серверы не имея с них ни грамма дохода... С точки зрения бизнеса - разницы никакой.
Тоже с удовольствием слушали доклад Бреда Слаткина на GDD. Hubbub действительно радует практичностью, красотой и смелостью.
Я кстати понял теперь зачем нужен Твиттер :-)
Он же как раз и является реализацией pubsub протокола :-)
Проблема как раз в том, что не является: все Твиттер-клиенты периодически опрашивают сайт. И как раз Твиттер очень сильно выиграл бы от push-технологии. Проблема только в том, что pubsubhubbub подразумевает, что сервер (тот же Твиттер) может послать POST-запрос клиенту. А если клиент — это реальная консумерская машина за файрволом или мобильный телефон или что-то такое, то она в большинстве случае не открыта для внешних коннектов. И это пока нерешённая проблема.
Ну long poll конечно костыль, но иначе по моему файрволы, наты и прокси не обойти. С другой стороны правильно сконструированные приложения могут держать огромное количество соединений.
Таким образом проблемы то как бы нет, но общее впечатление от костылей всегда портится.
На GDD Brett отлично ответил на интересный вопрос. Чем оно хуже RabbitMQ? Барабанная дробь. Тем, что для AMQP нет железных балансеров. А для HTTP есть. Ещё он сказал, что RabbitMQ, возможно, лучше подойдёт внутри компании, в то время как PSHB рассчитан исключительно на внешние, интер-сервисные отношения.
Поддержка PSHB в FriendFeed, отчасти заняла так мало времени (по-моему) потому, что он изначально задумывался как универсальный агрегатор. То есть там есть такой бизнес процесс - принятие новых фидов и PSHB стал просто очередным "плагином". Это я к тому, что прикрутить PSHB для своего уютного бложика может занять не один вечер на коленке.
А как же durability? Нет, я согласен, что рассылать можно сразу. Но не надо ждать рассылки до складывания в базу. Так, мелочь.
Я за PSHB, если чо. Тоже очень нравится.
Жутко, яростно завидую вашей команде, что он к вам сам пришёл, а я для этого день выделил на конференцию, рисковал не попасть и пр.
Deepwalker, в HTML5 есть WebSockets, которые позволяют открыть не-HTTP конект к серверу. Там можно делать настоящий push в клиента.
Насколько я понял, в PSHB клиент, это некоторый другой сервис(планеты, ридеры и т.п.). А конечный пользователь уже работает с ним (а там ChromeOS своё слово скажет ).
Все-таки Твиттер является pubsub, но немного с другой стороны: ты являешься subscriber а те кого ты фолловишь являются publishers.
Соответственно подписываешься на нескольких паблишеров и получаешь сообщения от них проверяя лишь одно место (!) твою home ленту.
Так что в каком-то виде это PubSub.