Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Архитектура нового
сайта Alawar.ru
с учётом высоких
нагрузок

Технический руководитель
проекта Alawar 7.0
Сапегин Андрей
Компания Alawar


Издатель и дистрибутор игр на разных платформах
• 60 стран
• 28 сайтов
• >1500 партнёрских сайтов
• Петабайт дистрибутивов в месяц




                                              2
Веб-отдел Alawar
Бизнес-задачи


Дистрибуция:
• Сайты
• Партнерская программа
Издательство:
• Социальные игры
• ММО
Внутренние системы



                          3
Об авторе


            Сапегин Андрей

            Окончил НГТУ.
            Начал работать в Alawar в 2009 году
              ведущим PHP программистом.
            Сейчас технический руководитель
              проекта Alawar 7.0.

            Задачи:
            • Архитектура сайта
            • Техническое развитие проекта

                                                  4
О чём пойдёт речь?




                     5
6
7
Какую задачу решали?




                       8
Задача


Архитектура:
•миллионы пользователей
•тысячи товаров на нескольких платформах
•десятки языков
•персонализированный контент
•скорость




                                           9
Требования к архитектуре


1. Как обеспечить быстродействие системы
   независимо от количества пользователей?
2. Как персонализировать контент под каждого
   пользователя?
3. Как реализовать мультиязычность и
   мультиплатформенность?
4. Как осуществить поддержку старых версий
   сайтов?



                                               10
Факторы
быстродействия


•   Объём данных
•   Структура данных
•   Количество серверов
•   Количество ресурсов у сервера
•   Настройки серверов и оптимизация кода
Причины медленной
скорости


•   CPU
•   RAM
•   IO disk
•   IO Net
•   другой сервер
Что было сделано?




                    13
Основные принципы
архитектуры


•   Минимум действий на хите
•   Шардирование данных
•   Горячие данные вместо кеширования
•   Сохраняем старые сайты
Структура данных



                 Back End      MySQL
                Старый сайт
 Front End
www.alawar.ru
                 Back End
                Новый сайт    RabbitMQ




    Sphinx
                   Redis      MySQL




                                         15
Структура данных
шардирование в NoSQL


data:item:preview@ru#1234
data:user:preview#1234567    Redis 1

list:item:hit@game-pc:ru     Redis 2

                             Redis 3

            KeyDistributor   Redis 4



                config       Redis N


                                       16
Структура данных
шардирование в MySQL


                     БД
  Основная                         БД
                пользователей
     БД                         товаров 1
                      1

                     БД
                                   БД
                пользователей
                                товаров 2
                      2
 профиль

 заказы              БД
                                   БД
                пользователей
                                товаров M
 история              N




                                            17
Облачное размещение
серверов


Возможности и плюсы:
•количество и время жизни серверов
•количество CPU, объем RAM, HDD
•логически разбивать сервера на типы
выполняемых задач
•риск поломки жесткого диска
Безоблачное размещение
в облаках


Особенности:
•производительность сервера с увеличением
числа ядер с 4 до 32 будет расти нелинейно
•тесты производительности
•профилактические работы
Какие были проблемы?




                       20
Проблемы


Redis
•Коннект к Redis через Rediska + PHP (Can't read
from socket.)

RabbitMQ
•Потеря коннекта
•Ротация логов
•Забывчивость роутов
Проблемы


Yii framework
•повторное выполнение action
•urlManager
•findAll (и модификации)
•отсутствие шардирования в коробке
Какие результаты?




                    23
Результаты
нагрузка на 1 из Back End-ов
при 300 тыс. хитов в день
Результаты
нагрузка на 1 из Back End-ов
при 300 тыс. хитов в день
Результаты
нагрузка на Redis
Результаты
нагрузка на MySQL
Выводы?




          28
Выводы


• Выделяйте основные типы запросов
• Выбирайте структуру данных под каждый тип
  запросов
• Закладывайте возможность масштабирования




                                              29
Спасибо за внимание!
                Сапегин Андрей
            sapegin@alawar.com
                        @sapeg

               г. Новосибирск, 2012

More Related Content

CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагрузок, различного типа контента и элементов социальности