?

Log in

No account? Create an account
парам пам пам
Первый раз в жизни столкнулся с серьезным хайлоадом. Не призрачным… 
18-апр-2012 07:08 pm
пришельцы, мозговой слизень
Первый раз в жизни столкнулся с серьезным хайлоадом. Не призрачным таким, когда-нибудь-вероятным, а настоящим.

Нужно перепилить текущую систему(веб) так, чтобы она смогла обрабатывать для начала 10-30 тысяч нестатических запросов в секунду и могла бы легким движением руки(добавлением сервера БД или веб считалки) расширяться и жить дальше. Причем на каждый запрос нужно что-то читать\писать в базу.

Кажется, начинаю изменять SQL базам с NoSQL хранилищами.

А именно, второй день фапаю пока что только на Redis(буду еще смотреть). В голове начинают всплывать прочитанные давным давно на хабре опасные мысли типа «за NoSQL будущее», «нужно все взять и поделить^Wпереписать» и так далее, там много кричали и говорили какие-то сумасшедшие цифры. Когда читал, не придавал им особого значения, но сейчас как-то подзадумался.
Пока что эти мысли под контролем, но вырываются.

100к запросов на запись вот так вот из коробки на моем ноутбуке – не в тапки срать

Еще много думать и читать, взвешивать, проводить нагрузочное тестирование на разные базы на настоящем сервере. Как ни странно, в этот раз никто особо не торопит.

А еще давайте расскажу про великий и ужасный Амазон.
Все у них хорошо: EC2, S3, DynamoDB и много всего-всего, что отлично скалируется и делает жизнь программистов и администраторов растущей системы беззаботной и безоблачной. То есть наоборот – облачной.

Все в одну глотку орут, что у амазона все относительно дешево.
Когда-то давно смотрели на их EC2 и выяснили, что это не совсем так, но сегодня я пошел считать сколько будет стоить хостинг базы DynamoDB для нужных нам нагрузок.

Параметры поставил такие:
Размер базы - 10 гигабайт;
Размер одной записи - 1кб;
Количество чтений и записей в секунду - 100000.

Получается 87 тысяч долларов. В месяц. За 87 тысяч баксов в месяц можно построить датацентр в европе. И не один, думаю.

Идут они в хуй с таким ценником.

Амазон хорош, для маленьких штучек. Которые поместятся на одну виртуальную машинку с 256мб оперативной памяти, 1ггц процессором и небольшой нагрузкой. Тогда действительно получится все дешево. Первым делом нужно уходить с амазона, когда вырастаешь из одной машины.

Пока все.
Comments 
18-апр-2012 12:18 pm
пиши ещё, интересно :)
18-апр-2012 12:38 pm
Напишу обязательно, если кукунька не поедет =)
19-апр-2012 05:41 am
У Амазона есть распизадатый Elastic Load Balancing который самое то юзать с Auto Scaling'ом. Одна беда с ним — не умеет балансировать между территориальными DC, но в одной Zone.

Кстати, Redtube где-то говорил, что полностью переехал на Redis и нагрузка далеко за 300k запросов в секунду. Порно таки двигатель концуперных технологий.
19-апр-2012 07:30 am
Про Elastic Load Balancing ничего не читал. У них действительно все круто с сервисами, но дорого.
19-апр-2012 07:35 am
Пашка, я про то, что с помощью этой халабуды можно собрать пепелац, который будет автоматом добавлять сколько тебе надо серверов, но маленьких, но только когда тебе действительно надо, а когда не надо, например, нагрузка ухнула вниз, выключать их нафик. И, может быть, не придётся даже думать про ДинамикДБ.

То, что у Амазона дорого — факт. Но если у тебя сто тыщ запросов в секунду, то, может быть, в консерватории что-нибудь подправить, т.е. "поменять такую нагрузку на деньги", в смысле зарабатывания денех?
19-апр-2012 07:22 am
Объясни для простых людей - NoSQL это чо за хуйня? Это типа когда просто key-value чтоли?
19-апр-2012 07:28 am
Для простых людей, да. key-value storage.
Но сейчас это немного больше. Из чистых key-value я знаю только memcached.
Вот, почитай, например, что можно хранить в redis'e. Там немного.

В нем все хорошо, кроме того, что пока что нет кластеризации. Она типа в разработке
19-апр-2012 09:38 am
Я, конечно, ничего не замерял сам, но мне почему-то кажется, что смысл тут не в sql vs nosql, а только в разнице в подходах к хранению. Если у тебя классическая реляционная БД, то тебе нужно очень сильно стараться, чтобы не спроектировать базу в какой-нибудь там нормальной форме, чтобы любой запрос с сайтега приводил к чтению over 9000 таблиц с адовым джойном. В key-value хранилищах так сделать нельзя по определению, вот и работает всё быстро.

То есть: если взять какой-нибудь oracle (кстати, как у него с кластеризацией?) или там не знаю кого ещё и спроектировать всю свою базу в виде key-value хранилища со всеми возможными оптимизациями (ключи-индексы, что там ещё бывает), неужели это будет медленее, чем новомодное nosql чонить? Я подозреваю, к примеру, что всякий разный биллинг в банках, опять же биллинг и СМС-центры в МТСах и прочие такие в общем-то нехило хайлоадные приложения работают over classic СУБД (просто потому что когда всё это делали, слова такого ещё не было "nosql"). Но работает же как-то?
19-апр-2012 10:05 am
Да, ты прав.

Сила SQLных баз в их языке запросов. Одним SQL запросом можно сделать практически все, что угодно.
У оракла с кластеризацией, по-моему, все хорошо, но, оракл стоит денежек.

> неужели это будет медленее, чем новомодное nosql чонить?
Думаю, что да. Скажем так, для обработки тех же нагрузок понадобится меньше мощностей, чем при использовании NoSQL.

Дело в том, что никому на свете не нужно делать все то, что умеет SQL. Но всем хочется соответствовать стандарту, поэтому разработчикам приходится жертвовать производительностью.

Вот пример. В редисе есть тип данных SET. Простое неупорядоченное множество.
Возможные операции и сложность:
Проверка существования элемента - O(1)
Добавление - O(1)
Удаление - O(1)
Пересечение M множеств - O(N*M), где N - мощность наименьшего множества. В, общем-то, следует из константной сложности доступа к элементу.

А ну-ка найди мне пересечение нескольких наборов данных через SQL за такое же время.

Я пока что не уверен в утверждении, что с nosql можно сделать то же самое, что и с SQL, потратив чуть больше времени.
Во-первых, ни о каких аналогах нормальных форм говорить не приходится. Избыточность данных(конкретно у нас) получается нефиговая. И это не потому что я дурак, а потому что по другому никак. Ну либо мы тут все дураки =)
Во-вторых, сложно начать думать не таблицами, а новыми ограниченными типами данных с небольшим набором операций над ними.
В-третьих, из-за избыточности выползает проблема поддержания консистентности данных в случае ошибок. Но у редиса на этот случай есть транзакции.
19-апр-2012 10:32 am
> Думаю, что да. Скажем так, для обработки тех же нагрузок понадобится меньше мощностей, чем при использовании NoSQL.

Наоборот, конечно же =) nosql будет быстрее
This page was loaded дек 11 2018, 7:52 am GMT.