Yandex Lego Oleg Obolensky

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Yandex Lego Oleg Obolensky - Presentation Transcript

    1. LEGO в Как собрать из кубиков большой web-проект Оболенский Олег руководитель отдела разработки [email_address]
    2. О чем все это
      • Как программные системы в Яндексе (и вообще крупные web-проекты) могут быть устроены в целом, и как их части могут взаимодействовать между собой?
      • Что это дает?
      • Это красивая идея или есть работающие реализации?
      • внедрено и работает с 2001 года
      • Почта (~ 12 млн хитов в сутки), Каталог (3,5 млн), Маркет (2,2 млн), Словари (1,3 млн), Карты (1,1 млн), Погода (800 тыс), Телепрограмма (400 -600 тыс), Открытки (350 тыс.), Игрушки (350 тыс.), Адреса (250 тыс.), Афиша (200 тыс), ППБ (200 тыс.) и еще примерно 20 мелких проектов (stat.yandex.ru, music.yandex.ru, и т.д.)
      Статистика
    3. Условия жизни
      • Распределенность – следует из нефункциональных требований к проекту (масштабируемость, отказоустойчивость)
      • Компонентный подход – научились пользоваться достоинствами, в связи с чем активно применяется
      • Компоненты развернуты на бекендах и взаимодействуют с фронтендами и друг с другом при помощи открытых протоколов (HTTP, CORBA)
    4. Проблема
        • Как интегрировать проекты, не затрачивая усилий каждый раз при появлении нового?
      `
    5. Application server
      • называется XScript
      • многопоточный
      • выполняется, как правило, в адресном пространстве веб-сервера, (что накладывает ограничения на архитектуру последнего), однако может взаимодействовать с ним и по протоколу FastCGI.
      • использует основанное на XML декларативное описание вызовов для формирования страницы.
      • необходимая функциональность выполняется преимущественно на бекендах.
    6. Как это выглядит <?xml version=&quot;1.0&quot;?> <page> <block timeout=&quot;1500&quot;> <name>Yandex/PPB/Rating.id</name> <method>getRatingFor</method> <param type=&quot;QueryArg&quot; default=&quot;abc&quot;>feed</param> <param type=&quot;Auth&quot;/> </block> <http xslt=&quot;xsl/sample.xsl&quot;> <method>getHttp</method> <param type=&quot;String&quot;>http://www.ya.ru?q=</param> <param type=&quot;QueryArg&quot;>num</param> </http> </page>
    7. Детали
      • Разобранные XML и XSL хранятся в памяти XScript.
      • Yandex/PPB/Rating.id – имя распределенного объекта в стандартном CORBA NameService
      • NameService поднят на каждой машине на локальном интерфейсе.
      • в IOR объекта «зашит» IP-адрес балансирующего маршрутизатора
      • Почему IPVS, а не балансирующий NameService?
    8. Ээээ..... Отлично, но что при этом показать пользователю?
    9. Как это выглядит
      • По соглашению, CORBA- и HTTP-сервера возвращают xml
      • его можно трансформировать при помощи xsl
      • полученный от бекендов xml (возможно, после xsl-преобразования) подставляется в документ вместо узлов, описывающих соответствующие вызовы
      • На сформированный xml-документ накладывается xsl – получается html (m3u, rss, e.t.c)
    10. Адаптация к нагрузке Ура! Проект сделали. Чего бы теперь такого предпринять, чтобы он еще и заработал нормально?
    11. Параллельность
      • Декларации XScript, как и шаблонные правила в XSLT, описывают конечный результат, но не порядок выполнения – это хороший повод вызывать бекенды параллельно.
      • Последовательно тоже можно
      • Параллельность выполнения прозрачна для бекенда
      • в XScript есть набор механизмов для передачи данных между вызовами
    12. Кеширование
      • Кешируются ответы бекендов, а не сформированные страницы.
      • ключ в карте кеша зависит от имени удаленного объекта, названия метода и переданных параметров и не зависит от всего остального
      • HTTP-ответы кешируются стандартно.
      • по соглашению CORBA-серверам, результаты выполнения методов на которых можно кешировать, последним параметром передается дополнительный inout-параметр специального типа Tag.
    13. Кеширование в CORBA ... module Yandex { typedef long TimeT; struct Tag { TimeT expire_time; TimeT lasl_modified; boolean not_modified; }; }; // module Yandex ...
    14. Кеширование в CORBA
      • Механизм действия очень похож на кеширование в HTTP
      • Явное кеширование – если бекенд вернул expire_time, то кеш-копия валидна до наступления expire_time.
      • Неявное кеширование – если бекенд вернул на первом вызове last_modified, то на каждый вызов ходим в бекенд и not_modified в ответе означает, что кеш-копия валидна.
    15. Если авария
    16. Деградация сервисов
      • Явное кеширование – если вызов кешируется в принципе, и его кеш-копия его результата валидна, то деградация незаметна
      • Версткой – шаблонные правила на данные и на сообщения об ошибках
    17. Все хорошо
    18. Упал демон карточек моделей
    19. Упал демон структуры категорий
    20. Спасибо за внимание

    vitlicvitlic, 2 years ago

    custom

    1964 views, 1 favs, 0 embeds more stats

    More Info

    © All Rights Reserved

    Go to text version
    • Total Views 1964
      • 1964 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 24
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as innappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel