SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
GOOZY
     В поисках идеальной архитектуры




2011, e-Legion ltd.               Юрий Буянов
 Goozyware inc.                     @digal
• Пара   слов о проекте

• Первая    версия и первые проблемы

• Новые    требования и новая архитектура

•В   самом низу

• Приключения     с хостингом

• Синяки    и шишки

• Looking   Forward
СПЕЦИФИКА

• Социальность: пользователь   хочет быть постоянно в курсе

 •2  req/min от каждого пользователя (даже когда он
   ничего не делает).

• Вездесущность: работает   на всех сайтах

 • Запрос   при открытии каждой страницы.
V.1
Portal Users               Client Users




                Django


               Memcached


                MySQL
ПЕРВАЯ НАГРУЗКА
ПЕРВАЯ НАГРУЗКА
ПЕРВАЯ НАГРУЗКА
ПОДРОБНЕЕ О НАГРУЗКЕ
   Portal Users               Client Users




                   Django


                  Memcached


                   MySQL
ПОДРОБНЕЕ О НАГРУЗКЕ
   Portal Users               Client Users




                   Django


                  Memcached


                   MySQL
LOAD TEST




• Пропускная   способность: 50 TPS

• Отклик: 2500   ms
НЕМНОГО ЧИСЕЛ


• 11   000 пользователей

• 1000   онлайн (в пике)

•2   сервера

• 500   мб данных
НЕМНОГО ЧИСЕЛ


• 11   000 пользователей   • 11   000 пользователей

• 1000   онлайн (в пике)   • 23   000 стикеров

•2   сервера               • 30   000 комментариев

• 500   мб данных          •2   200 000 таймлайн-записей
НОВЫЕ ТРЕБОВАНИЯ




    1 000 000
НОВЫЕ ТРЕБОВАНИЯ


•1 000 000 пользователей
•> 100 000 онлайн
•> 10 000 TPS
•> 50 Гб данных
•200 серверов
НОВЫЕ ТРЕБОВАНИЯ


•1 000 000 пользователей
•> 100 000 онлайн
•> 10 000 TPS
•> 50 Гб данных
•200 серверов        НЕ ОК !
V.2
Portal Users             Client Users




  Django                 API Server




               Storage
V.2
Portal Users             Client Users




  Django                 Scala + Lift




               Storage
SCALA

• Работает   на JVM

• Полностью   совместима с Java

• Статическая   типизация

• Лаконичность   и выразительность

• ООП   + ФП
V.2
Portal Users             Client Users




  Django                 Scala + Lift




               MongoDB
MONGODB

• Document   - Oriented        > db.users.findOne( {
                                      "phones.mob" : "+792194234"
                                  })


• Вторичные   индексы          {
                                   "_id" : ObjectId
                               ("4d94d822596f0e3f4d4a51bc"),
                               	    "name" : "Vasya",
• Язык   запросов              	
                               	
                                    "age" : 22,
                                    "phones" : {
                               	    	    "mob" : "+792194234",
                               	    	    "home" : "+812342341"
• Атомарные   апдейты          	    },
                               	    "roles" : [
                               	    	    "admin",
                               	    	    "staff"
• Скорость                     	    ]
                               }


• Автошардинг   и репликация
РЕЗУЛЬТАТЫ
                  TPS

500


375


250
                            450
125

      50          100
  0
      Old       Old tuned   New
ТЕСТЫ И CI
println("Trying to create group with slug $slug")
reqBody = [name: “Test Group”, slug: “test”, ... ]

builder.request(POST, JSON) {
  requestContentType = URLENC
  uri.path = "internal/groups/create.json"
  body = reqBody

    response.success = { resp, json ->
      println(json.toString())
      assertEquals(201, resp.status)
      assert json.name == reqBody.name
      assert json.description == reqBody.description
      assert json.slug == reqBody.slug.toLowerCase()
      assert json.creatorId == reqBody.creatorId
      assert json.counters.members == 1
      assert json.counters.notes == 0
    }

    response.failure = { resp, json ->
      println(resp.statusLine)
      println(json.toString())
      fail("Request for creating group $slug failed.")
    }
}
ТЕСТЫ И CI

• Scala   (main + unit) : 10 500

• Groovy    (functional): 5 500

• Прогон     при каждом Push

• Тестирование  интеграции
 с поиском, Twitter, S3, etc.
РАЗНОЕ

• Полнотекстовый      поиск: ElasticSearch

• Сборка: Gradle

• VCS: Git

• CI: Jenkins   (ex-Hudson)
ХОСТИНГ


• Май   2009 - OVH (Франция)

• Декабрь   2010 - Exchange Guru (NY)

• Апрель   2011 - Amazon EC2
US-EAST-1B
VPC
              HAProxy               HAProxy


      API                  API                Portal



      DB1                  DB2                DB3



  Memcached             ElasticSearch     Stats & Munin
21 АПРЕЛЯ 2011
US-EAST-1B                US-EAST-1B               US-EAST-2B
        HAProxy                   HAProxy


   API           Portal      API          Portal


        DB Master             DB Replica 1           DB Replica 2


  ...      ...      ...     ...     ...      ...
• Сервера   и реплики в нескольких зонах

• Бэкап-реплика   в другом регионе

• Автоматическоеуправление конфигурацией для
 быстрого развёртывания (Opscode Chef)

• Полное   устранение SPOF (Memcached)

• Мониторинг   и алерты
СИНЯКИ И ШИШКИ

• Bleeding   edge не такой уж bleeding

• Scala: разработчиков   мало, но они в тельняшках

• Gradle   + Scalac - время сборки

• MongoDB     - просто RTFM

• EC2   - непостоянные IP-адреса
LOOKING FORWARD
• Уход   от tomcat и сервлетов

• Автоматизация   нагрузочного тестирования

• Comet   / Websockets

• Push   для мобильных

• Автоматическое   управление конфигурацией и
 развёртыванием
Q&A


Юрий Буянов
yuri.buyanov@e-legion.com     http://www.e-legion.ru
@digal                               http://goozy.com

Mais conteúdo relacionado

Mais procurados

Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)Ontico
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахOntico
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Ontico
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Ontico
 
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)Badoo Development
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Ontico
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Ontico
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей СитникCodeFest
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Ontico
 

Mais procurados (20)

Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
 
переезд мониторинга
переезд мониторингапереезд мониторинга
переезд мониторинга
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей Ситник
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
 

Semelhante a Юрий Буянов «Архитектура Goozy»

Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Ontico
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Dmitry Degtyarev
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Ontico
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBStepan Stolyarov
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhonePavel Bashmakov
 
Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networkingguest57eb8a
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Ontico
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Ontico
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 

Semelhante a Юрий Буянов «Архитектура Goozy» (20)

Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Sivko
SivkoSivko
Sivko
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhone
 
Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networking
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 

Mais de e-Legion

MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Puree-Legion
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricae-Legion
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobilee-Legion
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restoranye-Legion
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startupse-Legion
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasalese-Legion
 
MBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank OnlineMBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank Onlinee-Legion
 
Rx Java architecture
Rx Java architectureRx Java architecture
Rx Java architecturee-Legion
 
MBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, SpotifyMBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, Spotifye-Legion
 
MBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderliste-Legion
 
MBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, SoundcloudMBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, Soundcloude-Legion
 
MBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&CoMBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&Coe-Legion
 
MBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, PostforpostMBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, Postforposte-Legion
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallelse-Legion
 
MBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITMBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITe-Legion
 
MBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, LitresMBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, Litrese-Legion
 
MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box e-Legion
 
MBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, MicrosoftMBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, Microsofte-Legion
 
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank e-Legion
 

Mais de e-Legion (20)

MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Pure
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobile
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restorany
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startups
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasales
 
MBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank OnlineMBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank Online
 
Rx Java architecture
Rx Java architectureRx Java architecture
Rx Java architecture
 
Rx java
Rx javaRx java
Rx java
 
MBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, SpotifyMBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, Spotify
 
MBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderlist
 
MBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, SoundcloudMBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, Soundcloud
 
MBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&CoMBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&Co
 
MBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, PostforpostMBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, Postforpost
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallels
 
MBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITMBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DIT
 
MBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, LitresMBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, Litres
 
MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box
 
MBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, MicrosoftMBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, Microsoft
 
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
 

Юрий Буянов «Архитектура Goozy»

  • 1. GOOZY В поисках идеальной архитектуры 2011, e-Legion ltd. Юрий Буянов Goozyware inc. @digal
  • 2. • Пара слов о проекте • Первая версия и первые проблемы • Новые требования и новая архитектура •В самом низу • Приключения с хостингом • Синяки и шишки • Looking Forward
  • 3.
  • 4. СПЕЦИФИКА • Социальность: пользователь хочет быть постоянно в курсе •2 req/min от каждого пользователя (даже когда он ничего не делает). • Вездесущность: работает на всех сайтах • Запрос при открытии каждой страницы.
  • 5. V.1 Portal Users Client Users Django Memcached MySQL
  • 9. ПОДРОБНЕЕ О НАГРУЗКЕ Portal Users Client Users Django Memcached MySQL
  • 10. ПОДРОБНЕЕ О НАГРУЗКЕ Portal Users Client Users Django Memcached MySQL
  • 11. LOAD TEST • Пропускная способность: 50 TPS • Отклик: 2500 ms
  • 12. НЕМНОГО ЧИСЕЛ • 11 000 пользователей • 1000 онлайн (в пике) •2 сервера • 500 мб данных
  • 13. НЕМНОГО ЧИСЕЛ • 11 000 пользователей • 11 000 пользователей • 1000 онлайн (в пике) • 23 000 стикеров •2 сервера • 30 000 комментариев • 500 мб данных •2 200 000 таймлайн-записей
  • 15. НОВЫЕ ТРЕБОВАНИЯ •1 000 000 пользователей •> 100 000 онлайн •> 10 000 TPS •> 50 Гб данных •200 серверов
  • 16. НОВЫЕ ТРЕБОВАНИЯ •1 000 000 пользователей •> 100 000 онлайн •> 10 000 TPS •> 50 Гб данных •200 серверов НЕ ОК !
  • 17. V.2 Portal Users Client Users Django API Server Storage
  • 18. V.2 Portal Users Client Users Django Scala + Lift Storage
  • 19. SCALA • Работает на JVM • Полностью совместима с Java • Статическая типизация • Лаконичность и выразительность • ООП + ФП
  • 20. V.2 Portal Users Client Users Django Scala + Lift MongoDB
  • 21. MONGODB • Document - Oriented > db.users.findOne( { "phones.mob" : "+792194234" }) • Вторичные индексы { "_id" : ObjectId ("4d94d822596f0e3f4d4a51bc"), "name" : "Vasya", • Язык запросов "age" : 22, "phones" : { "mob" : "+792194234", "home" : "+812342341" • Атомарные апдейты }, "roles" : [ "admin", "staff" • Скорость ] } • Автошардинг и репликация
  • 22. РЕЗУЛЬТАТЫ TPS 500 375 250 450 125 50 100 0 Old Old tuned New
  • 23. ТЕСТЫ И CI println("Trying to create group with slug $slug") reqBody = [name: “Test Group”, slug: “test”, ... ] builder.request(POST, JSON) { requestContentType = URLENC uri.path = "internal/groups/create.json" body = reqBody response.success = { resp, json -> println(json.toString()) assertEquals(201, resp.status) assert json.name == reqBody.name assert json.description == reqBody.description assert json.slug == reqBody.slug.toLowerCase() assert json.creatorId == reqBody.creatorId assert json.counters.members == 1 assert json.counters.notes == 0 } response.failure = { resp, json -> println(resp.statusLine) println(json.toString()) fail("Request for creating group $slug failed.") } }
  • 24. ТЕСТЫ И CI • Scala (main + unit) : 10 500 • Groovy (functional): 5 500 • Прогон при каждом Push • Тестирование интеграции с поиском, Twitter, S3, etc.
  • 25. РАЗНОЕ • Полнотекстовый поиск: ElasticSearch • Сборка: Gradle • VCS: Git • CI: Jenkins (ex-Hudson)
  • 26. ХОСТИНГ • Май 2009 - OVH (Франция) • Декабрь 2010 - Exchange Guru (NY) • Апрель 2011 - Amazon EC2
  • 27. US-EAST-1B VPC HAProxy HAProxy API API Portal DB1 DB2 DB3 Memcached ElasticSearch Stats & Munin
  • 29. US-EAST-1B US-EAST-1B US-EAST-2B HAProxy HAProxy API Portal API Portal DB Master DB Replica 1 DB Replica 2 ... ... ... ... ... ...
  • 30. • Сервера и реплики в нескольких зонах • Бэкап-реплика в другом регионе • Автоматическоеуправление конфигурацией для быстрого развёртывания (Opscode Chef) • Полное устранение SPOF (Memcached) • Мониторинг и алерты
  • 31. СИНЯКИ И ШИШКИ • Bleeding edge не такой уж bleeding • Scala: разработчиков мало, но они в тельняшках • Gradle + Scalac - время сборки • MongoDB - просто RTFM • EC2 - непостоянные IP-адреса
  • 32. LOOKING FORWARD • Уход от tomcat и сервлетов • Автоматизация нагрузочного тестирования • Comet / Websockets • Push для мобильных • Автоматическое управление конфигурацией и развёртыванием
  • 33. Q&A Юрий Буянов yuri.buyanov@e-legion.com http://www.e-legion.ru @digal http://goozy.com