SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Максимальная производительность
  и масштабируемость Magento

         15 июня 2012. Минск
          Михаил Жалевич
Немного теории. Performance




   Обеспечение приемлемой скорости загрузки
    страницы.
        0.1 – 1 – 10


   Обеспечение приемлемой скорости загрузки
    страницы при одновременном пребывании в
    приложении N пользователей.
Каких результатов нужно достичь?


   Сервер:
    CPU:Intel(R) Xeon(R) CPU X3320 @ 2.50GHz
    Memory: 4GB
    HDD: 1 HDD without raid


   Magento:
    Magento Community Edition 1.7


   Желаемый результат от одного сервера:
    Время генерации страницы в пределах 0.1 – 1 секунды при
     нагрузке в 20 конкурентных запросов.
Немного теории. Чем измерять?



    http_load
    Apache HTTP server benchmarking tool – или ab
    Siege
    Apache JMeter
Дефолтная конфигурация сервера




    Ваша задача:
     Обеспечить максимальную скорость работы
      приложения на сервере.


    Задача дефолтной конфигурации:
     Обеспечить максимальное кол-во поддерживаемых
      приложений.
Дефолтная конфигурация сервера


        6
                            5.12
        5

        4          3.5
        3                                 Response time
                                          (secs)
        2                                 Transaction rate
                                          (trans/sec)
        1

        0
            Magento with default server
                     configs
Выбор ОС



    BSD: FreeBSD, OpenBSD, etc

    Debian: Debian, Ubuntu

    Gentoo, Slackware

    RHEL
Выбор связки веб-сервер + php



      Nginx + Apache + mod_php

      Apache + mod_php

      Nginx + php-fpm
Выбор связки веб-сервер + php


         10                       9.47
          9
          8
          7     5.79     5.75
          6
          5
          4   3.34     3.37
          3                     2.08     Response time
          2                              (secs)
          1
          0                              Transaction rate
                                         (trans/sec)
PHP-FPM - FastCGI Process Manager




     advanced process management with graceful
      stop/start;

     emergency restart in case of accidental opcode
      cache destruction

     "slowlog" - logging scripts that are executed
      unusually slow;
PHP: Остаться на php 5.3.*
или переходить на php 5.4.*


    Плюсы перехода
     PHP-5.4 быстрее
     В дальнейшей работе можно использовать
      нововведения языка


    Минусы
     Возможные проблемы с миграцией кода на новую
      версию
PHP: Остаться на php 5.3.*
или переходить на php 5.4.*

         12
                                 10.14
         10           9.47

          8
                                         Response time
          6                              (secs)
                                         Transaction rate
          4                              (trans/sec)
               2.08          1.95
          2

          0
              PHP 5.3.13     PHP 5.4.3
Opcode cacher. Must have



      Open Source
       APC
       Xcache
       eAccelerator

      Propietary
       ionCube
       Zend Server
Opcode cacher. Must have


        20
        18                      17.43
        16
        14
        12        10.14
        10                                 Response time
                                           (secs)
         8
         6                                 Transaction rate
                                           (trans/sec)
         4
              1.95
         2                  1.13
         0
              PHP 5.4.3   PHP 5.4.3 with
                              APC
Что еще можно сделать?



     Изменить кол-во child-process в PHP-FPM

     Перенести пользовательские сессии в memcached

     Перенести кэш в apc или memcached

     Установить более высокие значения в
      конфигурационных параметрах php -
      realpath_cache_size и realpath_cache_ttl
Подведем небольшие итоги


        25
                                   19.79
        20

        15
                                           Response time
                                           (secs)
        10
                                           Transaction rate
                     5.12                  (trans/sec)
        5      3.5
                               1
        0
               Before           After
             optimization   optimization
Какие инструменты не дали
ожидаемого результата


     Memory file system

     Facebook HIPHOP PHP

     PHP Daemon
Конфигурация Nginx для Magento




    Запретить доступ к каталогам Magento



            location /app/ { deny all; }

            location ~ /.ht { deny all; }

            location /.svn/ { deny all; }
Конфигурация Nginx для Magento



  Отключить запись логов, там где они не нужны

               location /media/catalog/ {
                      access_log off;
               }

               location /js/ {
                      access_log off;
               }
Конфигурация Nginx для Magento



   Включить сжатие для js и css


             location /media/js/ {
                    gzip           on;
                    gzip_min_length 1000;
                    gzip_disable "MSIE [1-6].";
                    expires 5d;
                    access_log off;
             }
Конфигурация Nginx для Magento




    Увеличить время ожидания ответа от FastCGI
         fastcgi_read_timeout
БД MySQL. Версии и ответвления



     MySQL
         5.1 (5.1.49)
         5.5 (5.5.25)

     MariaDB (ver 5.5.24)

     Percona Server (ver 5.5.24)
БД MySQL. Версии и ответвления


                          CPU us. Avg.
        25    23

        20

        15

        10                                 CPU us. Avg.
                      6       6     6
         5

         0
             MySQL MySQL MariaDB Percona
              5.1   5.5           Server
Масштабирование системы




    Вертикальное
        Предполагает увеличение ресурсов на сервере

    Горизонтальное
         Предполагает увеличение кол-ва серверов
Масштабирование Magento



    Априори распределенная архитектура.


                         Web - сервер




                         Приложение




               Статика                  БД
Масштабирование Magento



    Шаг 1. Вынесение БД на отдельный(-ые) сервер(а).


    Шаг 2. Увеличение кол-ва frontend серверов. Вынесение
     Magento backend’а на отдельный(-ые) сервер(а).

           Балансировка нагрузки
           Общий кэш приложения
           Хранение пользовательских сессий
           Хранение статики
           Репликация MySQL
Масштабирование Magento.
Балансировка нагрузки


        upstream backend {
          server backend1.example.com weight=5;
          server backend2.example.com:8080;
          server unix:/tmp/backend3;
        }

        server {
          location / {
            proxy_pass http://backend;
          }
        }
Масштабирование Magento.
Общий кэш приложения. Хранение
пользовательских сессий



       Хранилище
            Redis
            Memcached


      Не нужно хранить пользовательские сессии и кэш в
      одном storage.
Масштабирование Magento.
Хранение статики


     Использовать для статики отдельный домен


     Физически хранить статику на одном из frontend
      серверов либо на балансировщике нагрузки


     К frontend серверам монтировать как sshfs или nfs
Масштабирование Magento.
Репликация MySQL

    Пока возможно вертикальное масштабирование
     MySQL, лучше нарастить мощность сервера БД.

    Перед запуском репликации сделайте Code Review
        Убедитесь, что никто не пишет в core_read
        Убедитесь в отсутствии запросов вида «update t1
          set updatet_at = NOW()»
        Включите slow log, оптимизируйте все медленные
          (> 0.5 секунды) запросы на
          вставку/редактирование.

    Используйте репликацию вида master-slave, либо
     цепочки репликаций master-slave
Мониторинг. Обеспечение
отказоустойчивости


    Системы мониторинга:
     Nagios
     Zabbix

    Отказоустойчивость:
     Держите несколько резервных балансировщиков
     Раз в сутки синхронизируйте на них статику
     Используйте цепочки репликаций.
     Используйте отложенную репликацию для создания
      резервных копий
Подведем итоги



   Оптимизация производительности – это…

         всегда компромисс

         всегда эксперименты

         постоянный поиск и совершенствование
Михаил Жалевич

Ведущий программист
Email: zhalevich@aheadworks.com
Skype: cheshirskycode

Weitere ähnliche Inhalte

Was ist angesagt?

Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)
Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр ТобольКадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
odnoklassniki.ru
 
Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.
odnoklassniki.ru
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
Evgeny Uskov
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
Media Gorod
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPS
Yandex
 

Was ist angesagt? (20)

Scaling PostgreSQL
Scaling PostgreSQLScaling PostgreSQL
Scaling PostgreSQL
 
Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр ТобольКадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
 
Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQ
 
Резервное копирование MySQL в экстремальных условиях
Резервное копирование MySQL в экстремальных условияхРезервное копирование MySQL в экстремальных условиях
Резервное копирование MySQL в экстремальных условиях
 
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPS
 

Ähnlich wie Magento performance

ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
kuchinskaya
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
Ontico
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1
rit2011
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
Ontico
 
Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted Python
HighLoad2009
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
Stepan Tanasiychuk
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Ontico
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
IT-Portfolio
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 

Ähnlich wie Magento performance (20)

ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяны
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted Python
 
Highload++ 2015
Highload++ 2015Highload++ 2015
Highload++ 2015
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
PHP: SAPI
PHP: SAPIPHP: SAPI
PHP: SAPI
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 

Mehr von aheadWorks

Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...
Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...
Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...
aheadWorks
 
Пять кейсов из практики aheadWorks с прологом и эпилогом
Пять кейсов из практики aheadWorks с прологом и эпилогомПять кейсов из практики aheadWorks с прологом и эпилогом
Пять кейсов из практики aheadWorks с прологом и эпилогом
aheadWorks
 

Mehr von aheadWorks (16)

Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...
Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...
Moving from Projects to Products: How Newcomers Can Do as Good as Veterans of...
 
Guiding rules for choosing a reliable Magento development partner
Guiding rules for choosing a reliable Magento development partnerGuiding rules for choosing a reliable Magento development partner
Guiding rules for choosing a reliable Magento development partner
 
Пять кейсов из практики aheadWorks с прологом и эпилогом
Пять кейсов из практики aheadWorks с прологом и эпилогомПять кейсов из практики aheadWorks с прологом и эпилогом
Пять кейсов из практики aheadWorks с прологом и эпилогом
 
Writing extensions for Xcommerce
Writing extensions for XcommerceWriting extensions for Xcommerce
Writing extensions for Xcommerce
 
Developing trusted Magento extension
Developing trusted Magento extension Developing trusted Magento extension
Developing trusted Magento extension
 
Magento integration
Magento integrationMagento integration
Magento integration
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customers
 
Magento Meetup Belarus 2012 opening
Magento Meetup Belarus 2012 opening Magento Meetup Belarus 2012 opening
Magento Meetup Belarus 2012 opening
 
How to survive on Magento platform
How to survive on Magento platformHow to survive on Magento platform
How to survive on Magento platform
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debugging
 
Magento Test Automation Framework
Magento Test Automation FrameworkMagento Test Automation Framework
Magento Test Automation Framework
 
How to Use Email Marketing More Effectively
How to Use Email Marketing More EffectivelyHow to Use Email Marketing More Effectively
How to Use Email Marketing More Effectively
 
Феномен IT-менеджера
Феномен IT-менеджераФеномен IT-менеджера
Феномен IT-менеджера
 
Email marketing для IT-стартапов
Email marketing для IT-стартаповEmail marketing для IT-стартапов
Email marketing для IT-стартапов
 
Первые шаги бизнеса
Первые шаги бизнесаПервые шаги бизнеса
Первые шаги бизнеса
 
Заставьте их покупать!
Заставьте их покупать!Заставьте их покупать!
Заставьте их покупать!
 

Magento performance

  • 1. Максимальная производительность и масштабируемость Magento 15 июня 2012. Минск Михаил Жалевич
  • 2. Немного теории. Performance  Обеспечение приемлемой скорости загрузки страницы.  0.1 – 1 – 10  Обеспечение приемлемой скорости загрузки страницы при одновременном пребывании в приложении N пользователей.
  • 3. Каких результатов нужно достичь? Сервер:  CPU:Intel(R) Xeon(R) CPU X3320 @ 2.50GHz  Memory: 4GB  HDD: 1 HDD without raid Magento:  Magento Community Edition 1.7 Желаемый результат от одного сервера:  Время генерации страницы в пределах 0.1 – 1 секунды при нагрузке в 20 конкурентных запросов.
  • 4. Немного теории. Чем измерять?  http_load  Apache HTTP server benchmarking tool – или ab  Siege  Apache JMeter
  • 5. Дефолтная конфигурация сервера Ваша задача:  Обеспечить максимальную скорость работы приложения на сервере. Задача дефолтной конфигурации:  Обеспечить максимальное кол-во поддерживаемых приложений.
  • 6. Дефолтная конфигурация сервера 6 5.12 5 4 3.5 3 Response time (secs) 2 Transaction rate (trans/sec) 1 0 Magento with default server configs
  • 7. Выбор ОС  BSD: FreeBSD, OpenBSD, etc  Debian: Debian, Ubuntu  Gentoo, Slackware  RHEL
  • 8. Выбор связки веб-сервер + php  Nginx + Apache + mod_php  Apache + mod_php  Nginx + php-fpm
  • 9. Выбор связки веб-сервер + php 10 9.47 9 8 7 5.79 5.75 6 5 4 3.34 3.37 3 2.08 Response time 2 (secs) 1 0 Transaction rate (trans/sec)
  • 10. PHP-FPM - FastCGI Process Manager  advanced process management with graceful stop/start;  emergency restart in case of accidental opcode cache destruction  "slowlog" - logging scripts that are executed unusually slow;
  • 11. PHP: Остаться на php 5.3.* или переходить на php 5.4.* Плюсы перехода  PHP-5.4 быстрее  В дальнейшей работе можно использовать нововведения языка Минусы  Возможные проблемы с миграцией кода на новую версию
  • 12. PHP: Остаться на php 5.3.* или переходить на php 5.4.* 12 10.14 10 9.47 8 Response time 6 (secs) Transaction rate 4 (trans/sec) 2.08 1.95 2 0 PHP 5.3.13 PHP 5.4.3
  • 13. Opcode cacher. Must have Open Source  APC  Xcache  eAccelerator Propietary  ionCube  Zend Server
  • 14. Opcode cacher. Must have 20 18 17.43 16 14 12 10.14 10 Response time (secs) 8 6 Transaction rate (trans/sec) 4 1.95 2 1.13 0 PHP 5.4.3 PHP 5.4.3 with APC
  • 15. Что еще можно сделать?  Изменить кол-во child-process в PHP-FPM  Перенести пользовательские сессии в memcached  Перенести кэш в apc или memcached  Установить более высокие значения в конфигурационных параметрах php - realpath_cache_size и realpath_cache_ttl
  • 16. Подведем небольшие итоги 25 19.79 20 15 Response time (secs) 10 Transaction rate 5.12 (trans/sec) 5 3.5 1 0 Before After optimization optimization
  • 17. Какие инструменты не дали ожидаемого результата  Memory file system  Facebook HIPHOP PHP  PHP Daemon
  • 18. Конфигурация Nginx для Magento  Запретить доступ к каталогам Magento location /app/ { deny all; } location ~ /.ht { deny all; } location /.svn/ { deny all; }
  • 19. Конфигурация Nginx для Magento  Отключить запись логов, там где они не нужны location /media/catalog/ { access_log off; } location /js/ { access_log off; }
  • 20. Конфигурация Nginx для Magento  Включить сжатие для js и css location /media/js/ { gzip on; gzip_min_length 1000; gzip_disable "MSIE [1-6]."; expires 5d; access_log off; }
  • 21. Конфигурация Nginx для Magento  Увеличить время ожидания ответа от FastCGI  fastcgi_read_timeout
  • 22. БД MySQL. Версии и ответвления  MySQL  5.1 (5.1.49)  5.5 (5.5.25)  MariaDB (ver 5.5.24)  Percona Server (ver 5.5.24)
  • 23. БД MySQL. Версии и ответвления CPU us. Avg. 25 23 20 15 10 CPU us. Avg. 6 6 6 5 0 MySQL MySQL MariaDB Percona 5.1 5.5 Server
  • 24. Масштабирование системы  Вертикальное  Предполагает увеличение ресурсов на сервере  Горизонтальное  Предполагает увеличение кол-ва серверов
  • 25. Масштабирование Magento  Априори распределенная архитектура. Web - сервер Приложение Статика БД
  • 26. Масштабирование Magento  Шаг 1. Вынесение БД на отдельный(-ые) сервер(а).  Шаг 2. Увеличение кол-ва frontend серверов. Вынесение Magento backend’а на отдельный(-ые) сервер(а).  Балансировка нагрузки  Общий кэш приложения  Хранение пользовательских сессий  Хранение статики  Репликация MySQL
  • 27. Масштабирование Magento. Балансировка нагрузки upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; } server { location / { proxy_pass http://backend; } }
  • 28. Масштабирование Magento. Общий кэш приложения. Хранение пользовательских сессий  Хранилище  Redis  Memcached Не нужно хранить пользовательские сессии и кэш в одном storage.
  • 29. Масштабирование Magento. Хранение статики  Использовать для статики отдельный домен  Физически хранить статику на одном из frontend серверов либо на балансировщике нагрузки  К frontend серверам монтировать как sshfs или nfs
  • 30. Масштабирование Magento. Репликация MySQL  Пока возможно вертикальное масштабирование MySQL, лучше нарастить мощность сервера БД.  Перед запуском репликации сделайте Code Review  Убедитесь, что никто не пишет в core_read  Убедитесь в отсутствии запросов вида «update t1 set updatet_at = NOW()»  Включите slow log, оптимизируйте все медленные (> 0.5 секунды) запросы на вставку/редактирование.  Используйте репликацию вида master-slave, либо цепочки репликаций master-slave
  • 31. Мониторинг. Обеспечение отказоустойчивости Системы мониторинга:  Nagios  Zabbix Отказоустойчивость:  Держите несколько резервных балансировщиков  Раз в сутки синхронизируйте на них статику  Используйте цепочки репликаций.  Используйте отложенную репликацию для создания резервных копий
  • 32. Подведем итоги Оптимизация производительности – это…  всегда компромисс  всегда эксперименты  постоянный поиск и совершенствование
  • 33. Михаил Жалевич Ведущий программист Email: zhalevich@aheadworks.com Skype: cheshirskycode