Специализированные  http-демона <ul><li>Качественное решение вопроса производительности;
Высокая стоимость разработки;
Особенности эксплуатации; </li></ul>
Когда нужны и когда нет? Нет <ul><li>Менее 1000 запросов в секунду;
Работает неплохо на стандартных решениях;
Нет уверенности в квалификации специалистов; </li></ul>ДА! <ul><li>Принципиально решить вопрос производительности;
Есть время и деньги на разработку; </li></ul>
Где используются? <ul><li>Системы статистики (счётчики);
Рекламные системы;
Внутренние модули посещаемых сайтов;
Чаты, мессенджеры на крупных сайтах; </li></ul>
Вопросы архитектуры Архитектура определяется задачей, чаще всего язык C или C++. <ul><li>Однопоточная или многопоточная мо...
Принцип работы с сетевыми соединениями;
Необходимость работы с ФС;
Upcoming SlideShare
Loading in …5
×

Highload 2011-demona

691 views

Published on

  • Be the first to comment

  • Be the first to like this

Highload 2011-demona

  1. 1. Специализированные http-демона <ul><li>Качественное решение вопроса производительности;
  2. 2. Высокая стоимость разработки;
  3. 3. Особенности эксплуатации; </li></ul>
  4. 4. Когда нужны и когда нет? Нет <ul><li>Менее 1000 запросов в секунду;
  5. 5. Работает неплохо на стандартных решениях;
  6. 6. Нет уверенности в квалификации специалистов; </li></ul>ДА! <ul><li>Принципиально решить вопрос производительности;
  7. 7. Есть время и деньги на разработку; </li></ul>
  8. 8. Где используются? <ul><li>Системы статистики (счётчики);
  9. 9. Рекламные системы;
  10. 10. Внутренние модули посещаемых сайтов;
  11. 11. Чаты, мессенджеры на крупных сайтах; </li></ul>
  12. 12. Вопросы архитектуры Архитектура определяется задачей, чаще всего язык C или C++. <ul><li>Однопоточная или многопоточная модель;
  13. 13. Принцип работы с сетевыми соединениями;
  14. 14. Необходимость работы с ФС;
  15. 15. Необходимость выполнения фоновых задач;
  16. 16. Общие RW-данные, вопросы блокировок;
  17. 17. Вопросы старта и завершения, непредвиденные падения; </li></ul>
  18. 18. Однопоточный демон wz-httpd http://github.com/bachan/wz-httpd <ul><li>Простейший однопоточный сервер, копипаст 0w;
  19. 19. Подключаемые so-модули;
  20. 20. Простота разработки модулей;
  21. 21. Ответы не длиннее 32К;
  22. 22. Моментальный ответ, никаких ожиданий;
  23. 23. Допускается создание фоновых потоков, почти не блокирующих основной процесс;
  24. 24. kevent/FreeBSD + epoll/Linux;
  25. 25. Нежелательна работа с диском при обработке запросов; </li></ul>
  26. 26. Многопоточный демон blizzard http://github.com/bachan/blizzard Проектировался для обработки запросов, которые могут обращаться к диску. <ul><li>Подключаемые so-модули;
  27. 27. Два набора потоков — быстрые и медленные;
  28. 28. Быстрые запросы — моментальный ответ, обращение к диску не допускается;
  29. 29. Медленные запросы могут обращаться к диску или иному хранилищу данных; </li></ul>
  30. 30. Предыстория демонов-сборщиков Чего хотелось? <ul><li>Демон-сборщик
  31. 31. Однопоточная архитектура
  32. 32. Несколько источников данных
  33. 33. Сложная логика дозапросов </li></ul>
  34. 34. Демона-сборщики на nginx Плюсы <ul><li>Решают задачу;
  35. 35. Простая эксплуатация; </li></ul>Минусы <ul><li>Сложно разрабатывать;
  36. 36. Ещё сложнее корректировать логику запросов;
  37. 37. Отсутствие so-модулей;
  38. 38. Отсутствие запросов класса «отправил и забыл». </li></ul>
  39. 39. Требования к новому демону <ul><li>Сравнимые с модулями nginx по производительности и требованиям к ресурсам;
  40. 40. Простота разработки модулей;
  41. 41. Модули могут не дожидаться ответов бекендов; </li></ul>
  42. 42. Архитектура демона ugh <ul><li>Не отдаляться от зарекомендовавших себя ключевых идей демона nginx;
  43. 43. Однопоточный http-демон;
  44. 44. Работа с сетью через libev;
  45. 45. Подгружаемые so-модули;
  46. 46. Переключение между контекстами осуществляется с помощью корутин; </li></ul>
  47. 47. Кратко о корутинах на примере ugh_subreq_t *r = ugh_subreq_add( c, url, url_size UGH_SUBREQ_WAIT); ugh_subreq_set_body(r, body, body_size); ugh_subreq_set_header(r, ...); ugh_subreq_set_timeout(r, 0.1); ugh_subreq_run(r); ugh_subreq_wait(c); /* switch coroutine */
  48. 48. Демон ugh Исходники и пример использования: http://github.com/bachan/ugh
  49. 49. Настоящее и будущее ugh Сегодня <ul><li>Работающая альфа-версия;
  50. 50. 2 типа запросов: с ожиданием и без ожидания ответа;
  51. 51. Возможность сделать несколько запросов параллельно;
  52. 52. Некоторые плюшки nginx (переменные, мапы, апстримы и др.); </li></ul>Завтра <ul><li>Развитие возможностей конфигурирования, директива location;
  53. 53. Запросы в БД (mysql, pgsql и другие) и другие типы источников (fastcgi);
  54. 54. Язык высокого уровня для написания скриптов (например язык Рамблер.NL :) );
  55. 55. Больше плюшек; </li></ul>
  56. 56. Спасибо за внимание! Сергей Боченков ( [email_address] ) Панков Александр ( [email_address] ) Компания Advaction

×