Содержание
- 2. Об авторе В настоящее время – развлекательное приложение «Лице-Мер»: 5-е место в рунете по посещаемости в
- 3. Часть 1.
- 4. Приступая к разработке… Традиционный подход к разработке: ТЗ, функционал, ООП. Неправильные вопросы: выбор языка, базы, фреймворка.
- 5. Слово «Highload» обманчиво Проект, имеющий масштабирование, способен выдержать любую нагрузку, даже если там ужасный код и
- 6. Проблема первого шага [1] Все новое – принимается в штыки. Богатый опыт программирования – мешает. Вас
- 7. Проблема первого шага [2] 99% стартапов web 2.0 никогда не запустятся чисто по техническим причинам –
- 8. Честное горизонтальное масштабирование Проект разбит на множество независимых компонент, способных выполняться на разных серверах (честно). Все
- 9. Честное горизонтальное масштабирование Масштабирование – это не репликация. SQL кластеры и прочие «серьезные» решения – тупиковые,
- 10. Часть 2. Доказательства приведенной теории. Технические причины, почему ваш стартап гарантированно никогда не запустится. Примеры типичных
- 11. Невозможная задача №1 Мы делаем очередной клон самой популярной соц.сети. 100.000.000 пользовательских профайлов: Таблица с профайлами:
- 12. Страница «Мои друзья» Попробуем реализовать эту страницу. Список user_id друзей (100 шт.) Веб-страница должна показать друзьй
- 13. Как получить данные? Обращаться к 100 SQL серверам – нереально. Каждая веб-страница может сделать 2-3 SQL
- 14. Расширяем проблему Замените слово «друзья» на другую сущность крупного проекта: запись в блоге/форуме статья в СМИ
- 15. Невозможная задача №2 На всех социальных сайтах есть подписка на разные события по друзьям. Друг или
- 16. Вывод Забудьте про суть проекта, его функционал, назначение и т.д. Сегодня вы задумали обычный проект. Со
- 17. Часть 3. О главном: Правильное оперирование данными Многопоточность и атомарность в SQL/Memcache Отложенная обработка Memcache –
- 18. Какую БД выбрать? Выбор небольшой – MySQL и PostgreSQL. Разницы – нет, т.к. используем 1% их
- 19. Какой язык выбрать? Ответ: не важно. Проблема и задачи масштабирования лежат в иной плоскости. Рекомендую самые
- 20. Тщательность изучения Без тщательно изучения выбранных инструментов ничего не работает. Пример: Знание memcache на уровне команд
- 21. О главном [1/3] Основная задача, о которой нужно думать для создания горизонтально масштабируемого проекта – как
- 22. О главном [2/3] Очень важно думать о многопоточности и атомарности операций. Это нужно применять и в
- 23. О главном [3/3] Последняя из важнейших оптимизаций – все что можно (и нельзя) отложите в фоновую
- 24. Пример оперирования данными К тезису «О главном [1]». Допустим, для решения одной задачи, нужно получать данные
- 25. Memcache – это не кеш! Полноценная и надежная база данных с уникальными возможностями, недоступными в SQL.
- 26. Тонкости Memcache Memcache – с виду прост. На деле - в 100 раз сложнее, чем вы
- 27. Memcache::CAS() Вся мощь в атомарности операций вашего кода на PHP. CAS – это не транзакции и
- 28. Memcache и сессии Сессии на PHP блокируют потоки. Сессии в memcache - типичный антипаттерн и баги.
- 29. Memcache и большие массивы По аналогии с сессиями – в одном ключе удобно хранить большие сложные
- 30. Memcache Highload MemcacheDB, как и SQL, упирается в лимиты: iostat, CPU, MEM. Готовьтесь к дроблению и
- 31. SQL: атомарность и многопоточность Важность обдумывания многопоточности. Основное заблуждение: транзакции решают проблемы. Далее – характерная задача…
- 32. Характерная задача Изначально некий скрипт работал в один поток с неким абстрактным ресурсом. Пример ресурса: отправка
- 33. Типичное ошибочное решение С файлами: прочитать файл, если там нет флага «Занято», записать его туда и
- 34. Решения задачи SQL – блокировки: SELECT … FOR UPDATE, LOCK TABLES, GET_LOCK. SQL – транзакции SQL
- 35. Лучшее решение задачи UPDATE … SET flag=1 WHERE flag=0 SELECT … FOR UPDATE Memcache::lock() и unlock()
- 36. Статистика по задаче Из примерно 200 хороших программистов (новичков не приглашали) в год на собеседовании в
- 37. Часть 4 Конкретные технические подробности в Highload и масштабировании. Практика использования SQL и memcache в больших
- 38. SQL Highload [1] Все запросы – простейшие выборки по Primary key. Без JOIN или вложенных запросов.
- 39. SQL Highload [2] Auto_increment замените на Sequence, для возможной репликации SQL. Репликацию SQL для шардинга не
- 40. SQL Highload [3] Проблема отката транзакций: запросы на 2 сервера + memcache. Транзакции – зло. По
- 41. SQL Highload [4] Правильное оперирование данными: SQL потребляет мало CPU. Пропускная способность сервера упирается только в
- 42. SQL Highload [5] Очень редко обсуждаемая опция innodb_flush_log_at_trx_commit. 1 или 2 – часто сохранятся, сильно грузить
- 43. SQL кеш [1] Паттерн сохранения в кеш результатов (чтение и обновление). Типичные массовые ошибки: не правильно
- 44. SQL кеш [2] Самый сложный и часто встречаемый баг – это кусок кода, который вы забыли
- 45. Лавинообразные нагрузки Пусть, 100.000.000 пользователей разбиты в таблицы по 1000 пользователей (это называется «спот»). Таблица –
- 46. Защита от лавины Благодаря разбиению пользователей на мелкие пачки (споты), выявляем зависшие из них и зависшие
- 47. Причина лавины Их всего три. Первые – наиболее вероятны. Физическая. Сервер уперся в лимит по скорости
- 48. SQL шардинг [1] Представим, что мы делаем клон самой популярной социальной сети. Имеется 100.000.000 пользователей: профайлы,
- 49. SQL шардинг [2] Типы данных. Пользовательская информация: друзья, профайлы, сообщения, статьи, записи в блогах, файлы. «Социальность»,
- 50. SQL шардинг [3] Пользовательская информация: хранится по спотам. Споты добавляются по мере роста числа пользователей. Общая
- 51. SQL шардинг [4] Друзья, сообщения, профайлы и т.д. – пусть будет всего 50 типов таблиц. В
- 52. Невозможное возможно Очевидный вывод из шардинга –JOIN невозможен. Как решить «Невозможную задачу №1», чтобы вывести на
- 53. Авторайзер [1] Запустим 150 инстансов MemcacheDB, по числу SQL серверов. В них хранится только важное: ФИО,
- 54. Авторайзер [2] Не храним невосполнимых данных. Скрипт миграции по серверам и восстановления из SQL. Имеющиеся бекап
- 55. Ketama в memcache – зло «Ketama» отлично подойдет небольшому проекту и только для кеша. Для авторайзеров
- 56. Отложенная обработка 90% информации пишем не в SQL и Memcache, а в очереди. Иерархия очередей. Зависание
- 57. Часть 5.
- 58. Технические характеристики [1] Более 1.100.000 «уников» в сутки. Около 60.000 онлайн пользователей. База пользователей более 8.000.000.
- 59. Технические характеристики [2] Разработка – 3 месяца. Запуск – 2,5 месяца назад (6 августа). Более месяца
- 60. Технические характеристики [3] PHP 5.3, MySQL, php-fpm, APC/xcache (зависит от версии и глючности PHP), nginx, memcache
- 62. Скачать презентацию