Юрий Буянов «Архитектура goozy»
DESCRIPTION
Юрий БуяновCode Camp 2011TRANSCRIPT
![Page 1: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/1.jpg)
GOOZYВ поисках идеальной архитектуры
2011, e-Legion ltd.Goozyware inc.
Юрий Буянов@digal
![Page 2: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/2.jpg)
•Пара слов о проекте
•Первая версия и первые проблемы
•Новые требования и новая архитектура
•В самом низу
•Приключения с хостингом
•Синяки и шишки
•Looking Forward
![Page 3: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/3.jpg)
![Page 4: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/4.jpg)
СПЕЦИФИКА
• Социальность: пользователь хочет быть постоянно в курсе
• 2 req/min от каждого пользователя (даже когда он ничего не делает).
• Вездесущность: работает на всех сайтах
• Запрос при открытии каждой страницы.
![Page 5: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/5.jpg)
V.1
Django
Memcached
Portal Users Client Users
MySQL
![Page 6: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/6.jpg)
ПЕРВАЯ НАГРУЗКА
![Page 7: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/7.jpg)
ПЕРВАЯ НАГРУЗКА
![Page 8: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/8.jpg)
ПЕРВАЯ НАГРУЗКА
![Page 9: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/9.jpg)
ПОДРОБНЕЕ О НАГРУЗКЕ
Django
Memcached
Portal Users Client Users
MySQL
![Page 10: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/10.jpg)
ПОДРОБНЕЕ О НАГРУЗКЕ
Django
Memcached
Portal Users Client Users
MySQL
![Page 11: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/11.jpg)
LOAD TEST
• Пропускная способность: 50 TPS
•Отклик: 2500 ms
![Page 12: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/12.jpg)
НЕМНОГО ЧИСЕЛ
• 11 000 пользователей
• 1000 онлайн (в пике)
• 2 сервера
• 500 мб данных
![Page 13: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/13.jpg)
НЕМНОГО ЧИСЕЛ
• 11 000 пользователей
• 1000 онлайн (в пике)
• 2 сервера
• 500 мб данных
• 11 000 пользователей
• 23 000 стикеров
• 30 000 комментариев
• 2 200 000 таймлайн-записей
![Page 14: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/14.jpg)
НОВЫЕ ТРЕБОВАНИЯ
1 000 000
![Page 15: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/15.jpg)
НОВЫЕ ТРЕБОВАНИЯ
•1 000 000 пользователей•> 100 000 онлайн•> 10 000 TPS•> 50 Гб данных•200 серверов
![Page 16: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/16.jpg)
НОВЫЕ ТРЕБОВАНИЯ
•1 000 000 пользователей•> 100 000 онлайн•> 10 000 TPS•> 50 Гб данных•200 серверов НЕ ОК !
![Page 17: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/17.jpg)
V.2
Django
Portal Users Client Users
Storage
API Server
![Page 18: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/18.jpg)
V.2
Django
Portal Users Client Users
Storage
Scala + Lift
![Page 19: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/19.jpg)
SCALA
• Работает на JVM
• Полностью совместима с Java
• Статическая типизация
• Лаконичность и выразительность
•ООП + ФП
![Page 20: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/20.jpg)
V.2
Django
Portal Users Client Users
MongoDB
Scala + Lift
![Page 21: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/21.jpg)
MONGODB
•Document - Oriented
• Вторичные индексы
• Язык запросов
• Атомарные апдейты
• Скорость
• Автошардинг и репликация
> db.users.findOne( { "phones.mob" : "+792194234"})
{ "_id" : ObjectId("4d94d822596f0e3f4d4a51bc"), "name" : "Vasya", "age" : 22, "phones" : { "mob" : "+792194234", "home" : "+812342341" }, "roles" : [ "admin", "staff" ]}
![Page 22: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/22.jpg)
РЕЗУЛЬТАТЫ
0
125
250
375
500
Old Old tuned New
450
10050
TPS
![Page 23: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/23.jpg)
ТЕСТЫ И CIprintln("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.") }}
![Page 24: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/24.jpg)
ТЕСТЫ И CI
• Scala (main + unit) : 10 500
• Groovy (functional): 5 500
• Прогон при каждом Push
• Тестирование интеграции с поиском, Twitter, S3, etc.
![Page 25: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/25.jpg)
РАЗНОЕ
• Полнотекстовый поиск: ElasticSearch
• Сборка: Gradle
• VCS: Git
• CI: Jenkins (ex-Hudson)
![Page 26: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/26.jpg)
ХОСТИНГ
•Май 2009 - OVH (Франция)
• Декабрь 2010 - Exchange Guru (NY)
• Апрель 2011 - Amazon EC2
![Page 27: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/27.jpg)
US-EAST-1B VPC
API API Portal
DB1 DB2 DB3
Memcached Stats & MuninElasticSearch
HAProxy HAProxy
![Page 28: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/28.jpg)
21 АПРЕЛЯ 2011
![Page 29: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/29.jpg)
US-EAST-1B
API
DB Master
...
HAProxy
... ...
Portal
US-EAST-1B
API
DB Replica 1
...
HAProxy
... ...
Portal
US-EAST-2B
DB Replica 2
![Page 30: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/30.jpg)
•Сервера и реплики в нескольких зонах
•Бэкап-реплика в другом регионе
•Автоматическое управление конфигурацией для быстрого развёртывания (Opscode Chef)
•Полное устранение SPOF (Memcached)
•Мониторинг и алерты
![Page 31: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/31.jpg)
СИНЯКИ И ШИШКИ
• Bleeding edge не такой уж bleeding
• Scala: разработчиков мало, но они в тельняшках
• Gradle + Scalac - время сборки
•MongoDB - просто RTFM
• EC2 - непостоянные IP-адреса
![Page 32: Юрий Буянов «Архитектура Goozy»](https://reader034.vdocuments.mx/reader034/viewer/2022051323/5484287fb479590f0d8b4aa3/html5/thumbnails/32.jpg)
LOOKING FORWARD
• Уход от tomcat и сервлетов
• Автоматизация нагрузочного тестирования
• Comet / Websockets
• Push для мобильных
• Автоматическое управление конфигурацией и развёртыванием