SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Python в
инфраструктуре поиска
Леонид Васильев
Разработчик



Я.Субботник, Екатеринбург, 2 июля 2011 года
Инфраструктура поиска
Проблемы:

— Тысячи серверов в нескольких датацентрах
— Постоянный поток новых серверов
— Сервера ломаются и демонтируются
— Много активного сетевого оборудования
— Отключения питания и ошибки сети
— Разные ОС: Linux, FreeBSD

2
Как с этим бороться?

До:          После:




3
Как управляем кластером?
Наши инструменты:

— Skynet: выполение Python кода на кластере
— Sandbox: сборка, тестирование и выкладка
  программ на кластер
— И т. д. Инструментов у нас много :)




4
Skynet: выполнение
Python кода на кластере



5
Skynet: пример проблемы
Дедушкин метод:
    #!/bin/sh


    SCRIPT_NAME='/home/my_name/check_something.sh'


    for host in serv{1..50}; do
        echo "Checking $host"
        scp "$SCRIPT_NAME" "$host:/$SCRIPT_NAME"

        ssh $host "sh $SCRIPT_NAME"
    done




6
Skynet: пример проблемы
Современный подход:
    #!/usr/bin/env python

    from skynet import client

    class CheckSomething:
        def __init__(self, config): self.config = config
        def run(self): return self.check_something()
        def check_something(self): pass # check using config

    if __name__ == "__main__":
        c = client.Client()
        c.run("serv{1..50}", CheckSomething({'debug': True}))
        c.wait()
        print c.result()



7
Skynet: пример проблемы
  Сравнение

Дедушкин метод:        Современный подход:
системные требования   системные требования
функционал             функционал
поддержка              поддержка
кроссплатформенность   кроссплатформенноcть




 8
Skynet: как это работает?
— code = pickle.dumps(Task())
— modules = Zipfile.PyZipFile(sys.modules)
— Передаем (code, modules) на клиента
— import modules.zip
— result = pickle.loads(code.pсkl).run()
— Передаем result на сервер



9
Skynet: копирование данных
Используем torrent:
     #!/usr/bin/env python

     from skynet import copier

     def share(files):
         c = copier.Copier()
         return c.create(files).torrent

     def download(torrent, dest_dir):
         c = copier.Copier()
         c.get(torrent, dest_dir).wait()




10
Skynet: зачем torrent?
— Хорошо ложится на распределённую
  архитектуру
— Высокая отказоустойчивость




11
Sandbox: сборка,
тестирование и выкладка
программ на кластер



12
Sandbox: что это?
Небольшой кластер (десятки серверов) и среда
выполнения, которые нужны
Разработчикам: для сборки и отладки
программ на разных архитектурах (linux,
freebsd) и моделях CPU.
Тестировщикам: для проведения
ресурсоёмких тестов
Администраторам: для внедрения программ в
production систему

13
Sandbox: Архитектура




14
Sandbox:главные сущности
— Task: контейнер для кода и состояния,
  который будет выполняться на клиенте
— Ресурс: описывает данные, которые Task'и
  используют/создают в процессе работы
— Контекст выполения: параметры Task'а,
  которые были заданы при его создании
  (через веб-интерфейс или xmlrpc)




15
Sandbox: Состояния Task'а




16
Sandbox: типовой сценарий
— Грузим файлы необходимые для сборки
— Собираем проект#1
— Собираем проект#2
— Тестируем проект#1 и проект#2
— Получаем результаты от проекта#1 и
  проекта#2
— Сравниваем результаты проекта#1 и
  проекта#2

17
Sandbox: использование API
Сборка проекта:

     def build(branch, owner):
         con = xmlrpclib.ServerProxy('http://sandbox/xmlrpc')
         task_id = con.createTask({...})
         while True:
             status = con.getTaskStatus(task_id)
             if not is_in_progress(status):
                 break
             time.sleep(1)
         if is_failed(status):
             raise Exception(...)
         return con.listTaskResources(task_id)
     def main():
         print build("branches/my_project/rel-1.0.0", "chin")




18
Sandbox: Инфраструктура




19
Sandbox: клиенты
Обмен данными (ресурсами)

             Клиенты скачивают
             ресурсы через p2p
             сеть. Сервер
             используется как
             «треккер» ресурсов.
             Поддерживаемые
             протоколы: http, scp,
             rsync, bittorrent.


20
Полезные практики




21
Полезные практики

  Крайне полезно иметь в проекте:
— Хранилище файлов необходимых для сборки,
  отладки, профилирования и тестирования.
— Список релизов с веб-интерфейсом в котором
  есть иноформация о том, что, когда и куда
  выкладывалось.
— Утилиту или framework для выполнения
  скриптов на всем кластере.


 22
Open-source аналоги


— Execnet: http://codespeak.net/execnet/
— FileMap: http://mfisk.github.com/filemap/
— BuildBot: http://trac.buildbot.net/




 23
Литература




24
Леонид Васильев
Разработчик

chin@yandex-team.ru

Mais conteúdo relacionado

Mais procurados

Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка Unix
Yandex
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Tanya Denisyuk
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
nginx internals
nginx internalsnginx internals
nginx internals
redivy
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk
 

Mais procurados (20)

2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметки
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
 
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 
Сокеты
СокетыСокеты
Сокеты
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recovery
 
Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка Unix
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
 
nginx internals
nginx internalsnginx internals
nginx internals
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
 

Destaque

EPC 690C-Graduate School CONNECTION Point
EPC 690C-Graduate School CONNECTION PointEPC 690C-Graduate School CONNECTION Point
EPC 690C-Graduate School CONNECTION Point
Ryan Adams
 
12.1. short functional text
12.1. short functional text12.1. short functional text
12.1. short functional text
Heriyono Yono
 
Normal distribution and hypothesis testing
Normal distribution and hypothesis testingNormal distribution and hypothesis testing
Normal distribution and hypothesis testing
Lorelyn Turtosa-Dumaug
 
Curriculum Vitae
Curriculum VitaeCurriculum Vitae
Curriculum Vitae
Steve Perry
 

Destaque (17)

Portfolio
PortfolioPortfolio
Portfolio
 
Base Building for Direct Action Organizing Groups
Base Building for Direct Action Organizing GroupsBase Building for Direct Action Organizing Groups
Base Building for Direct Action Organizing Groups
 
EPC 690C-Graduate School CONNECTION Point
EPC 690C-Graduate School CONNECTION PointEPC 690C-Graduate School CONNECTION Point
EPC 690C-Graduate School CONNECTION Point
 
My evaluation!
My evaluation!My evaluation!
My evaluation!
 
12.1. short functional text
12.1. short functional text12.1. short functional text
12.1. short functional text
 
lkh iohoih
lkh iohoihlkh iohoih
lkh iohoih
 
Veinlite paper
Veinlite paperVeinlite paper
Veinlite paper
 
Sarah and frances vocab
Sarah and frances vocabSarah and frances vocab
Sarah and frances vocab
 
Access to cap sbw (may) (2)
Access to cap sbw (may) (2)Access to cap sbw (may) (2)
Access to cap sbw (may) (2)
 
Sport Arbitrage Method
Sport Arbitrage MethodSport Arbitrage Method
Sport Arbitrage Method
 
Normal distribution and hypothesis testing
Normal distribution and hypothesis testingNormal distribution and hypothesis testing
Normal distribution and hypothesis testing
 
Prezentare electotehnica emaia 2
Prezentare electotehnica emaia 2Prezentare electotehnica emaia 2
Prezentare electotehnica emaia 2
 
104.09.09 1-德國農莊-顧客行為分析-創造顧客價值與創造消費者需求-詹翔霖教授
104.09.09 1-德國農莊-顧客行為分析-創造顧客價值與創造消費者需求-詹翔霖教授104.09.09 1-德國農莊-顧客行為分析-創造顧客價值與創造消費者需求-詹翔霖教授
104.09.09 1-德國農莊-顧客行為分析-創造顧客價值與創造消費者需求-詹翔霖教授
 
Day 4 LAYER 2 SWITCHING
Day 4 LAYER 2 SWITCHINGDay 4 LAYER 2 SWITCHING
Day 4 LAYER 2 SWITCHING
 
Curriculum Vitae
Curriculum VitaeCurriculum Vitae
Curriculum Vitae
 
Presentation1
Presentation1Presentation1
Presentation1
 
Front cover and contents page pictures
Front cover and contents page picturesFront cover and contents page pictures
Front cover and contents page pictures
 

Semelhante a Леонид Васильев "Python в инфраструктуре поиска"

Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
InTRUEdeR
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 

Semelhante a Леонид Васильев "Python в инфраструктуре поиска" (20)

Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Tdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiTdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chai
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 

Mais de Yandex

Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Yandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Yandex
 

Mais de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Леонид Васильев "Python в инфраструктуре поиска"

  • 1. Python в инфраструктуре поиска Леонид Васильев Разработчик Я.Субботник, Екатеринбург, 2 июля 2011 года
  • 2. Инфраструктура поиска Проблемы: — Тысячи серверов в нескольких датацентрах — Постоянный поток новых серверов — Сервера ломаются и демонтируются — Много активного сетевого оборудования — Отключения питания и ошибки сети — Разные ОС: Linux, FreeBSD 2
  • 3. Как с этим бороться? До: После: 3
  • 4. Как управляем кластером? Наши инструменты: — Skynet: выполение Python кода на кластере — Sandbox: сборка, тестирование и выкладка программ на кластер — И т. д. Инструментов у нас много :) 4
  • 6. Skynet: пример проблемы Дедушкин метод: #!/bin/sh SCRIPT_NAME='/home/my_name/check_something.sh' for host in serv{1..50}; do echo "Checking $host" scp "$SCRIPT_NAME" "$host:/$SCRIPT_NAME" ssh $host "sh $SCRIPT_NAME" done 6
  • 7. Skynet: пример проблемы Современный подход: #!/usr/bin/env python from skynet import client class CheckSomething: def __init__(self, config): self.config = config def run(self): return self.check_something() def check_something(self): pass # check using config if __name__ == "__main__": c = client.Client() c.run("serv{1..50}", CheckSomething({'debug': True})) c.wait() print c.result() 7
  • 8. Skynet: пример проблемы Сравнение Дедушкин метод: Современный подход: системные требования системные требования функционал функционал поддержка поддержка кроссплатформенность кроссплатформенноcть 8
  • 9. Skynet: как это работает? — code = pickle.dumps(Task()) — modules = Zipfile.PyZipFile(sys.modules) — Передаем (code, modules) на клиента — import modules.zip — result = pickle.loads(code.pсkl).run() — Передаем result на сервер 9
  • 10. Skynet: копирование данных Используем torrent: #!/usr/bin/env python from skynet import copier def share(files): c = copier.Copier() return c.create(files).torrent def download(torrent, dest_dir): c = copier.Copier() c.get(torrent, dest_dir).wait() 10
  • 11. Skynet: зачем torrent? — Хорошо ложится на распределённую архитектуру — Высокая отказоустойчивость 11
  • 12. Sandbox: сборка, тестирование и выкладка программ на кластер 12
  • 13. Sandbox: что это? Небольшой кластер (десятки серверов) и среда выполнения, которые нужны Разработчикам: для сборки и отладки программ на разных архитектурах (linux, freebsd) и моделях CPU. Тестировщикам: для проведения ресурсоёмких тестов Администраторам: для внедрения программ в production систему 13
  • 15. Sandbox:главные сущности — Task: контейнер для кода и состояния, который будет выполняться на клиенте — Ресурс: описывает данные, которые Task'и используют/создают в процессе работы — Контекст выполения: параметры Task'а, которые были заданы при его создании (через веб-интерфейс или xmlrpc) 15
  • 17. Sandbox: типовой сценарий — Грузим файлы необходимые для сборки — Собираем проект#1 — Собираем проект#2 — Тестируем проект#1 и проект#2 — Получаем результаты от проекта#1 и проекта#2 — Сравниваем результаты проекта#1 и проекта#2 17
  • 18. Sandbox: использование API Сборка проекта: def build(branch, owner): con = xmlrpclib.ServerProxy('http://sandbox/xmlrpc') task_id = con.createTask({...}) while True: status = con.getTaskStatus(task_id) if not is_in_progress(status): break time.sleep(1) if is_failed(status): raise Exception(...) return con.listTaskResources(task_id) def main(): print build("branches/my_project/rel-1.0.0", "chin") 18
  • 20. Sandbox: клиенты Обмен данными (ресурсами) Клиенты скачивают ресурсы через p2p сеть. Сервер используется как «треккер» ресурсов. Поддерживаемые протоколы: http, scp, rsync, bittorrent. 20
  • 22. Полезные практики Крайне полезно иметь в проекте: — Хранилище файлов необходимых для сборки, отладки, профилирования и тестирования. — Список релизов с веб-интерфейсом в котором есть иноформация о том, что, когда и куда выкладывалось. — Утилиту или framework для выполнения скриптов на всем кластере. 22
  • 23. Open-source аналоги — Execnet: http://codespeak.net/execnet/ — FileMap: http://mfisk.github.com/filemap/ — BuildBot: http://trac.buildbot.net/ 23