-Поиск по дневнику

Поиск сообщений в golotyuk

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 18.11.2009
Записей: 71
Комментариев: 0
Написано: 70





Кеширование страниц - ускоряем сайт в 100 раз (Varnish + ESI)

Пятница, 22 Января 2010 г. 15:31 + в цитатник
Оригинал сообщения

varnish-logo-red-64


В этой статье поговорим о кешировании страниц и их частей, а также о том, какие плюсы это дает.


Если на Вашем сайте практически нет динамики (например, новостной сайт или блог), то Вы легко можете складывать все его страницы в кеш и практически не делать запросов к бекенду. Но что делать если на сайте есть авторизация, и зависящая от этого логика?


В этой статье речь пойдет о том, как кешировать страницы с персональными данными используя Varnish и язык ESI.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

система хостинга медиа

Среда, 23 Декабря 2009 г. 00:43 + в цитатник
Оригинал сообщения

flash_logo


После статьи об архитектуре connect.ua многие спрашивали о подсистеме обслуживания медиа файлов, поэтому в этой статье речь пойдет о масштабируемых и производительных системах обслуживания медиа.


Что такое подсистема хостинга медиа вообще? Это часть системы, которая отвечает за загрузку, сохранение, преобразование (транскодирование) и отдачу медиа файлов. Зачастую эта система является наиболее ресурсоемкой ввиду больших объемов данных и процессорных затрат.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Connect.ua - история роста

Четверг, 10 Декабря 2009 г. 01:00 + в цитатник
Оригинал сообщения

connectua_logo


Connect.ua - это первый украинский социальный сервис. За два года проект вырос в достаточно крупный, а следовательно имеет свою собственную историю масштабирования и роста.


Во время роста мы перепробовали большое количество технологий и подходов, которыми я и хочу поделиться в этой статье.


Наши показатели и цифры


Некоторые цифры проекта


  • 720 тыс. пользователей

  • 2 миллиона фотографий

  • 400 тысяч видео роликов

  • 20 миллионов личных сообщений

  • 50 миллионов оценок в ЖЖОТ

  • 25 миллионов событий в ленте новостей

  • 40 миллионов отправленных Подмигнуть


Технические показатели


  • 500 запросов в секунду на MySQL

  • 300 активных соединений на фронте + 200 активных соединений на медиа серверах (HTTP)

  • 1.5 тысячи запросов в секунду на каждом из бекендов

  • 8 миллионов запросов к бекендам в день

  • 7 Тб медиа (видео + аудио + фото)

  • 3 сервера баз данных

  • 4 бекенд сервера

  • 1 фротенд

  • 4 медиа сервера

  • 2 сервера транскодирования

  • 20 Гб памяти под Memcached


Технологии


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



  • MySQL

  • Sphinxsearch

  • Memcached

  • MemcacheDB

  • PHP

  • PHP-FPM

  • Eaccelerator

  • Nginx

  • Imagemagick

  • FFmpeg

  • Mencoder

  • Flvtools

  • Varnish

  • GFS

  • Munin

  • Nagios

  • Xhprof

  • Minify (библиотека сжатия статики)

  • Linux shell :)


Далее наш опыт, архитектура, решения, ошибки и выводы:


Мониторинг и статистика


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


Для мониторинга используем Nagios.


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


Оборудование


Мы используем подход горизонтального расширения, а не вертикального. Поэтому мы делаем выбор в сторону недорого оборудования. Что это дает:



  • Избавляет от SPOF (единых узлов падения)

  • Покупая дорогое и мощное оборудование, Вам нужно больше платить и за все остальное (коммутаторы, сеть, поддержка и т.п.)

  • Стоимость вертикального роста имеет экспоненциальный характер

  • В любом случае вертикальный рост ограничен


СУБД: не в MySQL проблема, проблема в эффективности


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


В качестве архитектурного решения мы используем федерацию (вертикальное разделение СУБД по таблицам). Часть таблиц работает на одном сервере, часть на другом. Необходимость федерации появилась, когда некоторые особо большие таблицы препятствовали эффективной работе буфера MySQL.


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


Для полнотекстового поиска используем Sphinx. Работает по схеме дельта индексации. Самая тяжелая часть - полная переиндексация, поэтому запускаем ее раз в неделю. Планируем внедрить объединения индексов (index merging).


Наиболее тяжелые функциональные части для СУБД - это личные сообщения и лента новостей. Ленту новостей недавно перевели на MemcacheDB. Стратегию выбрали масштабируемую, у каждого пользователя есть свой личный список событий, который обновляется, когда генерируется новое событие. Это позволит очень легко масштабировать этот функционал.


Что мы делали для оптимизации нагрузки


  • Кеширование (подробнее - ниже)

  • Тюнинг настроек сервера MySQL - никогда не используйте настройки по умолчанию

  • Оптимизировали (и все еще продолжаем) запросы. EXPLAIN + maatkit - это наш набор оптимизатора.

  • Тяжелые запросы зачастую можно упростить на порядки выкинув малозначимые части логики

  • Для особо тяжелых и не поддающихся ускорению запросов есть слейв

  • Денормализация + индексация - постоянные задачи


Кеширование: кешируйте все и еще немножко


Кеширование - первое, что мы начали делать для оптимизации приложения. Memcached выбрали по нескольким причинам: простой и эффективный, поддержка распределенного кеширования, встроенный алгоритм консистентного хеширования (необходимо при добавлении новых серверов), поддержка сессий PHP.


Сейчас хитрейт доходит до 95%, показатели вынужденного вытеснения из памяти стремятся к нулю.


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


Система кеширования носит двухслойных характер: кеш приложения => memcached.


Клиентская оптимизация


Клиентская оптимизация - это второе, что мы начали делать для оптимизации производительности. Клиентская оптимизация позволила увеличить скорость загрузки страниц в несколько раз. После базовой оптимизации клиентской части, удалось повысить показатель просмотров страниц в полтора раза. Кроме всего прочего клиентская оптимизация позволяет сэкономить канал.


Что мы делали:



  • Gzip всего

  • Склеивание и сжатие статики

  • Вынос статики на другой домен

  • Установка необходимых заголовков для кеширования на клиентах


Сейчас наиболее медленное место в клиентской части - это система управления банерными показами.


Медиа


Наиболее ресурсоемкой частью проекта является то, что относится к медиа. Поэтому все медиа ресурсы изолированы от основной части системы. В качестве стратегии роста используем разделение по серверам. Каждый сервер работает независимо от других, что делает всю систему устойчивой к сбоям.


PHP


С PHP было меньше всего проблем. Единственным шагом, который привел к ощутимому росту скорости работы, стала установка eAcceleratora. Большинство изменений в коде были связаны с архитектурными изменениями.


Для профилирования используем XhProf - хорошо подходит для работы в продуктивных условиях.


Что мы планируем



  • Переводить часть логики с MySQL на key=value базы данных

  • Внедрить систему очередей сообщений

  • Оптимизировать клиентскую часть дальше

  • Искать затычки и исправлять их :)


В качестве итога


После проделанной работы мы пришли к нескольким простым правилами, которыми пользуемся и сейчас:



  • Если решение работает у кого-то, это еще не значит, что оно будет работать для Вас

  • Во многих случаях приходиться экспериментировать. Нужно позаботиться о том, чтобы небольшие изменения в системе не вызывали огромных трудностей

  • Думайте о росте заранее, но не решайте не существующих проблем

  • Многие технологии умеют гораздо больше, чем кажется - гораздо больше

  • Творчество Ваш самый необходимый инструмент

  • Не делайте того, о чем ничего не знаете :)


Надеюсь будет полезно!



Google Bookmarks Digg I.ua Ru-marks Ruspace Zakladok.net Reddit delicious Technorati Yahoo My Web News2.ru БобрДобр.ru Memori.ru rucity.com

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Google analytics - отслеживание скорости загрузки страниц

Вторник, 08 Декабря 2009 г. 00:28 + в цитатник
Оригинал сообщения

google-analytics-logo


Google analytics имеет расширенные возможности, которые далеко не ограничиваются подсчетом количества просмотров страниц Web сайтов. В GA есть возможность собирать статистику пользовательских событий. На основе этой статистики можно собирать практически любую информацию о пользователях и их действиях.


Рассмотрим, как использовать Google Analytics, чтобы отслеживать скорость загрузки страниц Вашего Web сайта у пользователей.

Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Асинхронность с помощью fastcgi_finish_request()

Воскресенье, 06 Декабря 2009 г. 15:50 + в цитатник
Оригинал сообщения

php-fastcgi


При оптимизации приложения важно не забывать о том, что оптимизируем мы прежде всего для клиента. Сайт, который работает медленно, это всегда неудобно и плохо.


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

Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Twitter.com - архитектура и масштабирование

Четверг, 03 Декабря 2009 г. 23:15 + в цитатник
Оригинал сообщения

twitter-bird-logo


В этой статье поговорим об одном из самых шумных и растущих проектов - Twitter.com (далее - Твиттер).


Разработка и развитие этого проекта совпадает с классической схемой удачного стартапа. Стартовал проект с простенького прототипа, написаного на скоркую руку на платформе Ruby-on-Rails. После этого в проекте было сделано огромное количество изменений в архитектурном и техническом плане. Твиттер не раз сталкивался и преодолевал проблемы быстрого роста нагрузки.


Разработчики Твиттера делятся своим опытом.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Кеширование тяжелых запросов (на примере memcache)

Среда, 02 Декабря 2009 г. 00:54 + в цитатник
Оригинал сообщения

memcached_banner75


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


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Sphinxsearch - объединение индексов (index merging)

Понедельник, 30 Ноября 2009 г. 19:11 + в цитатник
Оригинал сообщения

sphinx search logo


В сфинксе (sphinx-search) существует очень хорошее решение для оптимизации процесса индексации.


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


Использование дельта индексов тем не менее требует периодичного обновления основного индекса, чтобы обновить изменившиеся и выбросить удаленные сущности. Да и сам по себе дельта индекс растет со временем, требуя все больше ресурсов для переиндексации (что делает его неэффективным).


Самое простое решение этой задачи - полная переиндексация в непиковые часы (или дни). Это не самый оптимальный подход, т.к. полная переиндексация может занимать часы, а иногда и дни. Существует другое решение для обновления основного индекса, которое может сэкономить множество ресурсов - объединение индексов (index merging).

Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

check-unused-keys - проверка неиспользуемых индексов в MySQL

Четверг, 26 Ноября 2009 г. 14:45 + в цитатник
Оригинал сообщения

check-unused-keys - это PERL утилита, которая выводит статистику о неиспользуемых индексах (и таблиц) в MySQL. Утилита собирает информацию, основываясь на патче user_stats (от Google + Percona). Патч пользовательской статистики добавляет несколько таблиц в БД INFORMATION_SCHEMA, в том числе таблицу INDEX_STATISTICS. Она содержит данные по использованию того или иного индекса.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Масштабирование Web - опыт Ebay

Пятница, 20 Ноября 2009 г. 01:19 + в цитатник
Оригинал сообщения

ebay - масштабирование, архитектура


Ebay - один из самых больших интернет проектов сегодня во всех смыслах, в том числе и по техническим показателям. Рэнди Шуп, архитектор проекта, делится опытом в вопросах масштабирования. Он подготовил отличную презентацию, в которой касается не только практических вопросов, но и общих принципов того, как нужно думать при построении крупных масштабируемых систем.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Memcached - настройка под малые объекты

Среда, 18 Ноября 2009 г. 15:51 + в цитатник
Оригинал сообщения

логотип memcached


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


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

PgQ - система очередей

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

PgQ - это система очередей, разработанная на базе PostgreSQL. Разработчики - компания Skype, известная своим вкладом в развитие технологий на базе PostgreSQL.




Особенности



  • Высокая производительность благодаря особенностям Postgres

  • Общая очередь, с поддержкой нескольких обработчиков и нескольких генераторов событий

  • PgQ гарантирует, что каждый обработчик увидит каждое событие, как минимум один раз

  • События достаются из очереди пачками (batches)

  • Чистое API на SQL функциях

  • Удобный мониторинг


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

XHprof - профилирование PHP от Facebook

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

php


PHP был и остается одной из самых популярных платформ для разработки Web приложений любого уровня сложности и размера. О преимуществах этой технологии мы поговорим отдельно, а сегодня исследуем вопрос профилирования PHP.


Не забывая о главных правилах масштабируемых приложений следует еще раз подчеркнуть важность инструментов по сбору статистики различных технологичных аспектов Вашей системы.


Рассмотрим решение от создателей Facebook - XHProf.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

XtraBackup - резервное копирование для innoDB

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

percona-xtradb


В системах с высокими нагрузками особое внимание следует уделять резервному копированию (бекапам) данных. Зачастую самая важная часть данных находиться в СУБД. Проблема заключается в том, что копирование данных нужно проводить незаметным для работающей системы образом. Блокировка данных на момент создания бекапа тут не работает, т.к. время блокирования будет неприемлемым.


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


Другой подход резервного копирования - это использование специальных утилит, которые позволяют делать снимки состояния СУБД на жесткий диск, и восстанавливать состояние обратно по такому снимку. На этом остановимся подробнее.


Поскольку MySQL является одним из самых популярных решений в Webе сегодня, рассмотрим инструменты для бекапов для этой СУБД.

XtraBackup - это утилита от Percona Labs, предназначенная для горячих бекапов таблиц InnoDB и XtraDB.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

PHP + Redis платформа “Ключ=Значение”

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

php-redis-logo-small


Что такое и зачем нужны базы данных Ключ=Значение мы рассматривали ранее. Преимущества перед РСУБД в своем классе задач очевидные. Технических решений сегодня множество, и сегодня мы поговорим об одном из них - Redis.


Отличительной особенностью этого продукта в том, что он поддерживает атомарные операции работы со списками и наборами объектов. Сегодня опробуем это решение на практике.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Настройка nginx для отдачи файлов

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

800px-nginx-logosvg


Системы хранения и отдачи файлов - это отдельная часть в практике построения масштабируемых систем. Сегодня рассмотрим вопросы отдачи медиа (и не только) файлов с помощью Web сервера Nginx. У Вас уже есть система хранения файлов, установлен сервер отдачи.



На что следует обратить внимание для оптимальной настройки Nginx?


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Maatkit - расширенные возможности MySQL

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

maatkit


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


Пакет Maatkit входит во все распространенные дистрибутивы Linux систем, поэтому не придется терять время на установке. Хотя, если Вы хотите получить наиболее последнюю версию, следует качать версию с сайта (обновления выходят очень часто).


После установки Вам станет доступно почти 20 различных инструментов, входящих в поставку. Некоторые из них мы и рассмотрим.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Siege — утилита для нагрузочного тестирования веб-серверов

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

Siege – это утилита для нагрузочного тестирования веб-серверов.

Она была создана для того чтоб дать разработчикам возможность проверить ресурсоёмкость своего кода в условиях, максимально приближенных к реальным. Так же Siege может имитировать обращения к сайту сразу нескольких пользователей. Это позволяет держать сервер как бы «под осадой» долгое время. Количество запросов, произведённых при «осаде», рассчитывается из общего количества пользователей и количества их обращений к серверу. Например 20 пользователей, обратившись по 50 раз, создают в общей сложности 1000 запросов. Результат, выводимый программой после тестирования, включает в себя время затраченное на проверку, общее количество переданной информации ( включая заголовки ), среднее время ответа сервера, его пропускную способность и число запросов на которые пришёл ответ с кодом 200. Эти данные формируются и выдаются при каждой проверке. Подробно они описываются ниже.

Siege имеет 3 основных модели работы – режим регрессионного тестирования, режим имитации Интернета и режим грубой силы. Программа считывает порцию ссылок из конфигурационного файла и обращается к ним по очереди ( режим регрессионного тестирования ) или случайно ( имитация интернета ). Или же пользователь может указать один единственный адрес к которому будут производиться все обращения – режим грубой силы.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Memcached Multi-Get, зачем?

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

memcached


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


Мы рассмотрим очень полезную функциональную особенность про которую многие забывают (а некоторые даже и не знают). Это операция множественного чтения или multi-get. В чем ее суть и действительно ли ее использование оправдано?


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP

Curl Loader

Среда, 18 Ноября 2009 г. 04:21 + в цитатник
Оригинал сообщения

Curl Loader - это бесплатный инструмент, который позволяет симулировать нагрузку на приложение по протоколам HTTP(s) и FTP(s). Эта утилита позволяет проводить нагрузочное тестирование сайтов с десятками и сотнями тысяч виртуальных клиентов.


Читать далее...

Я сейчас нахожусь: Киев
Мой настрой: Супер
Я слушаю: Все подряд

LIci WP


Поиск сообщений в golotyuk
Страницы: 4 [3] 2 1 Календарь