Как мы выдерживаем высокую нагрузку
Аудитория Почты и Главной страницы
              Mail.Ru


• 20 млн человек в день
• Более 500 млн хитов в день на
  динамические страницы
Аспекты проблемы нагрузки

Инфраструктура                Организация




Сервера                       Технологии
Традиционные решения не работают



   WEB
                    = 50000
  LAMP              человек в
                    день
  MySQL
Примеры проблем нагрузки

• Хранение быстроменяющихся данных
• Хранение и отдача счетчиков (чиселок)
• Уведомление о новых письмах в почте
• Проверка спама, доставленного в ящики; хранение
  спама, не доставленного в ящики
• Хранение больших файлов (files.mail.ru)
• Установление большого количества сессий к MySQL
Хранение быстроменяющихся данных




Data                  WEB

       10-100 KRPS
Хранение и отдача счетчиков (чиселок)




                            WEB


                            Data
Уведомление о новых письмах в почте


                                 WEB


                                 Data
Проверка спама, доставленного в ящики




                 Хранилищ
Антиспам
                     е
Хранение больших файлов (files.mail.ru)




                Хранилище
                 Больших
                 файлов
Установление большого количества сессий к
                 MySQL

 WEB                                WEB




 WEB               MySQL           WEB




 WEB                               WEB
Хранение сессий, статистики антиспама, базы
              антирбутфорса



 Сессии            ?                Стат
                                 антиспама

                База
            Антибруфорса
Хранение сессий, статистики антиспама, базы
               антирбутфорса
 1KRPS

                                     MySQL

 3KRPS




                                    MySQL
                                     MySQL
                                      MySQL
100KRPS                                MySQL
                                        MySQL
Дороговизна администрирования




MySQL
 MySQL
  MySQL
   MySQL
    MySQL
      MySQL
Неравномерность загрузки




                 MySQL
         MySQL

                                   MySQL
                         MySQL
MySQL
Сложность добавления новых шардов




MySQL
 MySQL                    MySQL
  MySQL
   MySQL
    MySQL
Общая дороговизна решения


                        RAM
                        RAM
                         RAM
                         RAM
                          RAM
MySQL
 MySQL
  MySQL
   MySQL
    MySQL
                         HDD
                          HDD
                           HDD
                            HDD
                             HDD
Высокий хитрейт – не повод для шардинга!


                  100Gb




 20Gb     20Gb     20Gb    20Gb     20Gb
Зачем нам оверхеды СУБД?

                        Disk +
SQL   Locks   Threads            DB-engine
                        cache




                 CPU
Хранение сессий, статистики антиспама, базы
              антирбутфорса
                                      Key-
100KRPS                              Value
                                    storage

                      No SQL
                     No Locks
                    No Threads
                    No dbengine
               No random disk access
Key-Value storage. Схема электрическая,
              принципиальная.


CLIENT               RAM




                     LOG              SNAPSHOT
Хранение и отдача счетчиков на главной странице
                   и в шапке
Хранение и отдача счетчиков на главной странице
                   и в шапке
                                 Сервер
                                счетчиков




   Хранилище                      Веб
                                 сервер
Уведомление о новых письмах в почте
Уведомление о новых письмах в почте

  Веб                             Веб
 сервер
                                 сервер


                    Сервер
                  изменений



                                Хранилище
Хранилище
Проверка и удаление спама, уже доставленного в
                    ящики




Антиспам        Хранилище               Антиспам
Хранение спама, не доставленного в ящики



                               Хранилище
                                 спама

    Антиспам


                               Хранилище
                                 писем
Хранение спама

Письмо 1    Письмо 4    Письмо 7




Письмо 2    Письмо 5    Письмо 8   Cron




Письмо 3    Письмо 6    Письмо 9
Хранение больших файлов (files.mail.ru)


User 1                                 File 1
User 2                                 File 2
User 3                                 File 3


                  Индекс


User 4                                 File 4
User 5                                 File 5
User 6                                 File 6
Соединения с MySQL

WEB                        WEB




WEB          MySQL         WEB




WEB                        WEB
Соединения с MySQL

                    В
                    Р
                    Е    CP
                    М
                    Я
                         U

MySQL
                    RAM
Соединения с MySQL

                            LOCAL
     WEB                    MySQL
(PERL/PYTHON)                               MySQL
                             Proxy




                     CONN    CONN    CONN
Соединения с MySQL


WEB                        WEB
            MySQL
            Proxy


WEB                        WEB
Как создавать высоконагруженные сервисы?
                                                               Perl
                     nginx                                     PHP Apache
                                                                         nginx
   HTML/CSS/JS                                                Python
                                                    Dynamic
            nginx                In memory
             or                   database                        Tarantool
  Critical similar                                                  Redis
 dynamic                     Counters
                                                       Critical data
                             (чиселки)
                                                                                 MySQL
          Big
                                           Spread
Temporaryfiles                                                           Proxy
                                   User files            Non critical data
   data
СПАСИБО!
             Денис Аникин
Технический руководитель Почты@Mail.Ru
           anikin@corp.mail.ru

Как мы в Почте@Mail.Ru выдерживаем высокие нагрузки