LINUX.ORG.RU

Что посоветуете учить для написания Highload

 , , ,


2

8

Всем привет, я работаю python программистом, пишу на Django, вроде бы только начал нормально что-то делать )) Но вот начал понимать что Django кажется не очень приспособлен для высоких нагрузок, ну и чтобы сделать шардинг (горизонтальный) придется много чего поломать в самой джанге и написать кучу виджетов для админки, в общем как-то теряет смысл его использовать тогда.
Но мне хочется развиваться, и часто вижу что нужны люди кто работал с высокими нагрузками. Что можете посоветовать для изучения? Сейчас пока сомтрю в сторону tornado или falcon, или взять другой вообще язык программирования, к примеру go. В общем дайте пожалуйста вектор по которому дальше можно будет что-то изучать.



Последнее исправление: Int64 (всего исправлений: 1)

Рыбные палочки

anonymous
()

Tornado или falcon? Там нет админки и ты всё равно будешь перелопачивать код в плане расширения. А так интересные штучки, вебсокеты и как разработчик утверждает подходит для высоких нагрузок.

Frost
()
Последнее исправление: Frost (всего исправлений: 1)

конечно же С/С++

anonymous
()
Ответ на: комментарий от Frost

Согласен, админку в джанге я больше всего наверное люблю. Но бывают проекты, в которых особо то и не нужна админка, что сам сайт в роле админки выступает.

Int64
() автор топика
Ответ на: комментарий от anonymous

А можно по конкретнее? может быть какие-то архитектурные решения, либо фреймворки.

Int64
() автор топика

python

раньше Tornado советовали, теперь GO, хотя я бы не сказал что он такой прямо питоноподобный как его малюют

Dred
()

siege 2500+ rps, sql prepared statemetns, nosql для начала

anonymous
()

Пиши на хачкеле. Такие то монады

anonymous
()

я работаю python программистом

только начало нормально что-то делать

моск

anonymous
()

ты пока сам не понимаешь, чего хочешь. «высокой нагрузкой» называют массу совершенно разных задач и у каждой задачи свои инструменты и методы решения. поэтому для начала определись с задачей, а уж потом появятся ответы.

Iron_Bug ☕☕☕☕☕
()

Стандартные подходы помогут понять принципы и выводить уже нестандартные подходы. Разберись с такими вещами как (функциональный) шардинг, отложенные вычисления, асинхронность (как на уровне системных вызовов, так и на уровне архитектуры), деградация функциональности, шины сообщений. По ходу гуглежа скорее всего найдёшь ещё всякие непонятные термины, их тоже гугли.

Ну и, конечно, называй плохими словами и насмехайся над теми, кто думает что хайлоад и ЯП сильно связанны.

anonymous
()

Железны Жук дело говорит. Джанга с высокими нагрузками работает отлично, проблемы бывают только от какашек в голове и от рук из жопы.

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

Ради интереса тестили его на арендованном кластере: при увеличении количества серверов в сто раз понадобился ещё один маленький кластер чтобы нагенерить нагрузки, ибо до полутора миллиардов запросов в секунду оно работало без проседаний.

Goury
()
Ответ на: комментарий от Goury

Да согласен, по поводу джанги я погорячился, в проекте изрядно наговнокодено, сейчас решил в принципе более углубленно postgresql изучить, и параллельно tornado изучаю.
Тоже интересно, какая у вас база данных, вот только что нагуглил что есть postgres-xl думаю попробовать.

Int64
() автор топика

А что никто ноду не советует. Стесняетесь что ли? хехе

bread 😊😊😊😊
()

Это баззворды, забей. На практике достаточно понимания где в запросах критичные цепи, и не совать туда тормозной код.

Vit
()

Что посоветуете учить для написания Highload

Прежде чем что то учить, нужно забыть выдуманные недалёкими людьми термины и, в первую очередь, highload.

King_Carlo
()

Поставь кеширующий прокси перед django с принудительным кешированием всех get на пару секунд. Сразу так отзывчивость повысится...

Shadow 👍👍👍👍👍
()

Что можете посоветовать для изучения?

PHP. Прекрасно справляется с высокими нагрузками.

Wizard_
()

Что-то я не понял, как связано горизонтальное масштабирование и «виджеты для админки».

cdshines
()
Ответ на: комментарий от Goury

Вот такая связка наверное как раз и ломает джанго, большую часть функционала надо либо подпстраивать под такие базы данных, либо переписывать совсем.

Int64
() автор топика

Что можете посоветовать для изучения?

Профилирование Python для чайников

anonymous
()
Ответ на: комментарий от Int64

Нет, Джагну ломают такие фантазии как у тебя.

Большая часть данных лежит в марии джанговсккими срдствами.
То, что в марию ложится не очень, идёт в монгу через модуль монгоенжин.
В редис складывается мелочь для ситуационного кэширования в долгих тяжёлых процеурах.
А ещё мемкашед используется. По назначению.

Goury
()
Ответ на: комментарий от Wizard_

PHP. Прекрасно справляется с высокими нагрузками.

То-то фсякие там фейспуки и вкудахте с предподвывертом мутят всякие HipHop и kphp, которые этот PHP в C++ превращают, а иначе тормозит-с.

EXL ☕☕☕☕☕
()
Ответ на: комментарий от Goury

А что к примеру не очень может лечь, что в монго надо будет перекладывать? Знаю что логи наверное не стоит складывать в реляционную.

Int64
() автор топика

erlang, конечно. одновременно изучи scala, но сразу забудь, ибо уже не модно. go тоже неплох. а в целом - читать хабр, и «учить» всё, вокруг чего есть хайп. не забывай про лямбды, используй везде.

taker
()

А почему это не в Web-Development?

Cast tailgunner

anonymous
()

Хаскель или pyramid aiohttp на худой конец твой

anonymous
()

Хаскель или pyramid, aiohttp облегчат проект

anonymous
()
Ответ на: комментарий от Goury

А что значит документы? Вот к примеру у меня есть новости, статьи, мероприятия, форум, комментарии, ну итд. что лучше хранить в монге, а что в реляционной? на форуме удобно использовать транзацкии к примеру, в монге вроде как с этим проблема, так что наверное для форума лучший вариант использовать реляционную. Или лучше всего в монге хранить, к примеру, разные загруженные файлы, логи итд? Сейчас в общем-то читаю документацию по монго, там вроде бы есть про это, в каких задачах его лучше использовать, но я пока до этого не дошел )

Int64
() автор топика
Ответ на: комментарий от Goury

Еще интересно, как лучше лайки подсчитывать и комментарии, у меня сейчас для голосования есть модель:

class Vote(CityModel):
    model_name = models.CharField(max_length=100)
    ref_id = models.PositiveIntegerField()
    user = models.ForeignKey(User)
    delta = models.IntegerField()
И нормально ли просто подчитывать все лайки таким образом:
def likes(self):
    return Vote.city_objects.filter(model_name="comment", ref_id=self.pk, delta__gt=0).count()
Ну это при учете что в данном случае у меня дельта может быть либо 1 либо -1. В таком случае наверное приходится делать обход большой, и может быть не производительно. Либо мне создать какое-то поле в модели Comment к пример `likes_count = models.PositiveIntegerField()` и туда каждый раз сохранять новое значение, когда пользователь проголосует, или может быть лучше в redis сохранять. Наверное еще можно оптимально индексы настроить. И таких моментов много. Вот недавно был момент, что смешанные данные выводит в одном блоке - новости, статьи и мероприятия, всего 5 записей, но они должны быть отсортированы по одному полю, по сути у всех эти модели имеют одинаковые поля, по которым выводятся (наследуются от абстрактной модели Post), я сделал по дурацкому, выбрал по 5 статей, новостей и мероприятий, склеил их в список и отсортировал питоновскими средствами, скорее всего так делать не стоит, но я не понимаю как такое сделать правильно :(

Int64
() автор топика
Последнее исправление: Int64 (всего исправлений: 2)
Ответ на: комментарий от evbogdanov

а при чем тут питон ? Там ни слова про хайлоад на питоне

anonymous
()
Ответ на: комментарий от King_Carlo

Спасибо за совет кстати, по слову highload в принципе ничего не гуглится, одни конференции, а вот уже на high availability можно найти хоть какую-то информацию.

Int64
() автор топика
Последнее исправление: Int64 (всего исправлений: 1)
Ответ на: комментарий от Int64

документы это всякие жсоны и то, что в них хорошо переводится.
Форумы и статьи и в марии хорошо себя будут чувствовать.
Файлы лучше в файлово системе складывать, а в базу только писать какой файл где и зачем лежит. Хотя это всё зависит от конкретной конфигурации и от ситуации.

Goury
()
Ответ на: комментарий от Int64

Просто закэшируй результат лайков, хоть в бд, хоть в джанге (не забыв принять взвешенное решение и записав его в диздок, чтобы потом делать одинаково везде, а не как попало).

Более продвинутый уровень — регулярно перекэшировать лайки, а функцией только из кэша брать данные.
Суперпродвинутый уровень — предсказывать запросы лайков и заранее кэшировать нужные, а менее нужные перекэшировать пореже.

Простой уровень: храни недавно лайканые элементы в ОЗУ.

Но вообще class Vote как-то мутно выглядит на первый взгляд. Но надо смотреть что там с архитектурой для выводов.

как такое сделать правильно

Смотреть надо на конкретный кейс в рамках конкретной ситуации. Я бы сделал модель с общими полями отдельно и в каждом элементе делал бы ссылку на модель с разными полями — тогда надо было бы выбрать пятерых из этой общей модели и довыбрать пятерых по ссылкам.

Goury
()
Последнее исправление: Goury (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.