webew
Войти » Регистрация
 
PHP
MySQL/MariaDB

кое-что о высоких нагрузках

28 октября 2013, 20:52
Автор: 1234ru
Вчера побывал на Учебном дне конференции Highload++ 2013, посвященном проектированию высоконагруженных систем.
Вел мероприятие сам Олег Бунин, что было некоторой неожиданностью, т.к. доводилось видеть его исключительно в роли организатора. Я вообще думал, что он все время только этим и занимается.
Олег эту точку зрения развеял в первые же минуты выступления, рассказав о своем опыте. Компания "Онтико", которую он возглавляет (и которую я, опять же, привык видеть только в качестве органзиатора конференций), занимается консультированием в области высоконагруженных систем и за это время успела поучаствовать во многих известных проектах (например, Вконтакте на заре своего существования - в 2007 году - консультировались именно у них, и др). На практике Олегу приходилось иметь дело с системами, принимающими десятки тысяч запросов в секунду (миллиард в день), так он знает, о чем говорит.


Теперь собственно о том, что мне показалось особенно интересным.


Довольно распространено мнение, что код высоконагруженных систем сложнее. На самом деле он проще, и получается так вот почему.
Высоконагруженная система должна легко масштабироваться и иметь высокую отказоустойчивость. Для этого ее делят на сервисы, отвечающие за разные задачи. Эти сервисы должны работать абсолютно независимо друг от друга, лишь предоставляя программный интерфейс для обращений к себе. Взаимодействие сервисов осуществляется с помощью специальными средствами, и писать код, который это делает, не нужно.
Таким образом, некое монолитное приложение разбивается на несколько составляющих, каждая из которых проста, поскольку решает какую-то довольно узкую задачу. В общем случае, практически любые операции, которые напрямую друг от друга не зависят и могут выполняться не атомарно, в конечном итоге разносят на разные независимые сервисы (выделяя сервис под каждую такую задачу).

Другой причиной, почему код высоконагруженных систем прост, является стремление иметь его простым, поскольку серьезные архитектурные усложнения внутри кода одного приложения (сервиса) как правило снижают и масштабируемость, и отказоустойчивость.


Девяносто пять из ста высоконагруженных сайтов в российском вебе - это самописный PHP.


Во многих высоконагруженных системах, где свежие, недавно добавленные записи являются сильно более популярными (т.н. "голова" - недавние посты во френдлентах, свежие новости у новостных агенств и т.п.), применяется следующий подход. Помимо обычного партиционирования вводится избыточность: данные последних добавленных записей копируются в специально выделенное хранилище, спроектированное в расчете на быструю отдачу (схема базы данных запросто может отличаться от основного), которое поддерживается в актуальном состоянии (периодически очищается от устаревших записей).


Механизм шардинга лучше писать самим. Поскольку его обязательно нужно не только понимать, но и мочь влиять на его поведение (в противном случае универсальный чужеродный механизм может принять неоптимальные решения - поэтому, например, перенос приложений на облачные хранилища может не дать ожидаемого результата), легче реализовать его самостоятельно и иметь полную свободу действий, чем разбираться в чужой системе и иметь дело с ее ограничениями и непрозрачностью.



P.S. Это сообщение не является заказным ни в каком смысле и написано исключительно по собственной инициативе с целью поделиться интересной информацией и поблагодарить высокопрофессионального и интересного докладчика.
Добавить комментарий
NO USERPIC

rgbeast

Миша, спасибо за комментарий. Это неплохое введение, поэтому хочется продолжения - на доступном уровне примеры создания всего перечисленного.
28.10.2013, 21:14
Ответить
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100