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
()

scala + akka, акторы, вот это все.

Rastafarra ★★★★
()
Ответ на: комментарий от 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)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.