Как создавать самые надежные веб-сервисы

Рубрика:

Разработчик таких масштабных проектов, как Todoist и Wodoist, Amir Salihefendic в своем блоге поделился своим многолетним опытом создания надежных веб-сервисов. Его стратегия применима к  любому языку и любому веб-сайту.

Общая стратегия

Создание масштабируемых и надежных сервисов сводится к следующему:

Иметь полный контроль: Вы должны иметь четкое представление того, что происходит в  любой момент времени. Необходимо вести журнал производительности, ошибок, ключевых метрик в приложении, иметь визуализацию каждого компьютера в сети, времени отклика и т.д. Аналитики Google Using не достаточно, нужны намного более мощные инструменты.

Быть превентивными: Резервное копирование и ожидание будущей нагрузки должны быть превентивными. Если сегодня ваша нагрузка приближается к максимальной, не ждите когда сайт упадет, пока вы начнете оптимизацию. Нужно знать все о системах, таким образом, вы можете более точно предугадать, скольких  пользователей вы можете  обработать. Подумайте, какие стратегии вы можете применить, если вам нужно масштабироваться  до 10x, 100x, 1000x от текущей загрузки.

Знать, когда происходят отказы: Можно получать уведомления по SMS, использую такие службы, как Pingdom, или библиотеку с открытым исходным кодом, как crash_hound.

Инструменты

В свеем посте Amir Salihefendic советует использовать инструменты, проверенные им, которые не изобретают снова велосипед, но все же являются необходимыми.

Контроль в реальном времени

Для этих целей Amir предпочитает использовать statsd и Graphite. Graphite сложноват в установке, но пройдя это, вы измените свою жизнь! Эта программа позволяет отслеживать что-либо в реальном времени без какой-либо потери производительности (так как statsd использует неблокирующую UDP связь). Amir отслеживает среднее время отклика, число ошибок, число регистраций, число sync команд, среднего времени отклика на sync команду и т.д. Они отслеживаются по серверам и по службам.

Это особенно полезно, когда делаете несколько развертываний в день, так что вы можете быстро увидеть, если последнее развертывание вызвало ошибки или проблемы производительности.

Вот пример инструментальной панели Graphite:

Контролируйте производительность и получайте уведомления, когда происходят отказы

Для этого подойдет программа Pingdom, поскольку она может отследить производительность от множества расположений по всему миру. Она может также уведомить по SMS, когда отказывает веб-сайт. Pingdom предоставляет также общедоступные данные пользователям о времени работы и производительности вашего сервиса.

Для более мощных сервисов Амир предлагает использовать его разработку crash_hound, которая позволяет получать уведомления о программе. Например, получать SMS, если очередь сотрудника не обрабатывается. Большинство наших уведомлений - система, использующая маленькие сценарии, содержащие менее 10 строк кода.

Вот как одна выглядит одна из страниц мониторинга Pingdom:

Регистрируйте в журнале каждую ошибку

В компании Амира есть центральный регистратор, который записывает каждую ошибку и выводит ее на экран по центру. С каждой ошибкой можно видеть окружение запроса. Это - обязательный инструмент для любого веб-сервиса, так как вы можете намного проще отслеживать ошибки и баги.

Вот как выглядит центральный регистратор компании:

 

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

SQL и регистратор запросов

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

Эти два инструмента важны, когда нужно знать, какую часть кодовой базы стоит оптимизировать.

Амир открыл исходный код одного регистратора запросов некоторое время назад (он очень прост и вполне изящен)

Вот его скриншот:

Контроль серверов

Очень удобно быть размещенным на Amazon AWS, так как они обеспечивают много больших инструментов мониторинга (таких как использование ЦП и аварийные сигналы, если серверы начинают использовать больше ресурсов, чем необходимо).

Существуют некоторые инструменты с открытым исходным кодом. В Plurk Амир использовал Cacti и Nagios. Cacti и Nagios - сложные и мощные инструменты, но определенно стоящие вашего времени, так как они могут дать намного лучшую картину серверов и служб, которые вы используете.

Вот как выглядят некоторые инструменты мониторинга Amazon:

Думаю, эти подсказки будут вам полезны. Тем более, что Амир обещает открыть код некоторых своих разработок, таких как центральный регистратор или монитор SQL, в ближайшем будущем.

Источник: 
http://amix.dk/blog/post/19709

Рекомендуем просмотреть раздел Все новости нашего сайта