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

Preview:

DESCRIPTION

Юрий БуяновCode Camp 2011

Citation preview

GOOZYВ поисках идеальной архитектуры

2011, e-Legion ltd.Goozyware inc.

Юрий Буянов@digal

•Пара слов о проекте

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

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

•В самом низу

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

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

•Looking Forward

СПЕЦИФИКА

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

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

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

• Запрос при открытии каждой страницы.

V.1

Django

Memcached

Portal Users Client Users

MySQL

ПЕРВАЯ НАГРУЗКА

ПЕРВАЯ НАГРУЗКА

ПЕРВАЯ НАГРУЗКА

ПОДРОБНЕЕ О НАГРУЗКЕ

Django

Memcached

Portal Users Client Users

MySQL

ПОДРОБНЕЕ О НАГРУЗКЕ

Django

Memcached

Portal Users Client Users

MySQL

LOAD TEST

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

•Отклик: 2500 ms

НЕМНОГО ЧИСЕЛ

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

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

• 2 сервера

• 500 мб данных

НЕМНОГО ЧИСЕЛ

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

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

• 2 сервера

• 500 мб данных

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

• 23 000 стикеров

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

• 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

Django

Portal Users Client Users

Storage

API Server

V.2

Django

Portal Users Client Users

Storage

Scala + Lift

SCALA

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

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

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

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

•ООП + ФП

V.2

Django

Portal Users Client Users

MongoDB

Scala + Lift

MONGODB

•Document - Oriented

• Вторичные индексы

• Язык запросов

• Атомарные апдейты

• Скорость

• Автошардинг и репликация

> db.users.findOne( { "phones.mob" : "+792194234"})

{ "_id" : ObjectId("4d94d822596f0e3f4d4a51bc"), "name" : "Vasya", "age" : 22, "phones" : { "mob" : "+792194234", "home" : "+812342341" }, "roles" : [ "admin", "staff" ]}

РЕЗУЛЬТАТЫ

0

125

250

375

500

Old Old tuned New

450

10050

TPS

ТЕСТЫ И 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.") }}

ТЕСТЫ И 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

API API Portal

DB1 DB2 DB3

Memcached Stats & MuninElasticSearch

HAProxy HAProxy

21 АПРЕЛЯ 2011

US-EAST-1B

API

DB Master

...

HAProxy

... ...

Portal

US-EAST-1B

API

DB Replica 1

...

HAProxy

... ...

Portal

US-EAST-2B

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@digal

http://www.e-legion.ruhttp://goozy.com