Pull to refresh
31
0
Максим @PyLounge

Developer

Send message

Чем различаются Kafka и RabbitMQ: простыми словами

Reading time8 min
Views94K

Программные брокеры сообщения уже стали стандартом при построении больших и сложных систем. Однако до сих пор не все ИТ-специалисты понимают, как работают эти инструменты. Главный системный аналитик «Иннотех» Павел Малыгин помогает разобраться в брокерах сообщениях и их работе.

Читать далее
Total votes 56: ↑53 and ↓3+55
Comments33

Apache vs Nginx: практический взгляд

Reading time12 min
Views372K
Apache vs Nginx

Введение


Apache и Nginx — 2 самых широко распространенных веб-сервера с открытым исходным кодом в мире. Вместе они обслуживают более 50% трафика во всем интернете. Оба решения способны работать с разнообразными рабочими нагрузками и взаимодействовать с другими приложениями для реализации полного веб-стека.

Несмотря на то, что у Apache и Nginx много схожих качеств, их нельзя рассматривать как полностью взаимозаменямые решения. Каждый из них имеет собственные преимущества и важно понимать какой веб-сервер выбрать в какой ситуации. В этой статье описано то, как каждый из этих веб-серверов ведет себя при различных условиях.
Читать дальше →
Total votes 89: ↑69 and ↓20+49
Comments184

Почему появились асинхронные веб-сервера?

Reading time5 min
Views9.3K
Всем привет. На связи Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

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





Введение


Почему веб-приложение тормозит и не держит нагрузку? Разработчики, которые первыми столкнулись с таким вопросом и провели исследования некоторых систем, пришли к неутешительному выводу о том, что оптимизации одной бизнес-логики будет недостаточно. Ответ на поставленный вопрос кроется на более низком уровне — на уровне операционной системы. Чтобы ваше приложение держало нагрузку, необходимо пересмотреть его архитектурную концепцию таким образом, чтобы эффективно работать именно на этом уровне. Это привело к возникновению асинхронных веб-серверов.

К сожалению, мне не удалось найти ни одного материала, позволяющего восстановить разом все причинно-следственные связи в эволюции веб-серверов. Так возникла идея написания этой статьи, которая, как я надеюсь, станет таким материалом.
Читать дальше →
Total votes 10: ↑7 and ↓3+7
Comments6

Технологии интеграции информационных систем. Часть 2. GraphQL, gRPC, WebSocket, webhook, брокеры сообщений

Level of difficultyEasy
Reading time17 min
Views11K

Эта статья ー вторая часть материала об интеграции информационных систем (ИС) и самых распространённых стилях и технологиях интеграции. 

Читать далее
Total votes 15: ↑13 and ↓2+13
Comments3

Trunk Based Development — кто такой и зачем нужен

Reading time5 min
Views50K

Привет! Меня зовут Павел Лакосников, я тимлид команды бэкенд-инженеров в Авито. Сегодня расскажу про свой любимый подход к разработке Trunk Base Development, сравню его с другими моделями ветвления и подсвечу его достоинства и нюансы.

Краткий обзор трёх моделей ветвления: Central Workflow, Git Flow, Trunk Based Flow, с акцентом на моего фаворита — Trunk Based Flow.

Читать далее
Total votes 27: ↑22 and ↓5+21
Comments44

Уровни изоляции транзакций в БД

Level of difficultyMedium
Reading time9 min
Views13K

В этой статье обсудим, что из себя представляет изолированность транзакций в БД, какие есть уровни изоляции транзакций, как их установить, какие бывают аномалии на разных уровнях, и что такое MVCC. Естественно, всё на простых примерах.

Читать далее
Total votes 15: ↑14 and ↓1+18
Comments11

Как Notion обрабатывает 200 миллиардов объектов данных

Level of difficultyEasy
Reading time3 min
Views7.3K

Переход от PosgreSQL-only решения к собственному DataLake для отделения read нагрузки под нужды аналитики и AI.

Читать далее
Total votes 13: ↑10 and ↓3+12
Comments9

Как сменить технологию и не закопаться в рефакторинге: опыт внедрения DDD в проект на FastAPI — Часть 2

Level of difficultyMedium
Reading time10 min
Views3.6K

Привет, хабравчане!

В первой части были рассмотрены паттерны проектирования Repository и Unit of Work.

Это вторая часть цикла о DDD. В ней расскажу, как добавить к проекту событийно-ориентированную архитектуру.

Код подопытного приложения ищите в репозитории по ссылке. Подробнее о DDD и паттернах Repository и Unit of Work читайте в первой части по ссылке...

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments2

Использование подчеркивания в коде на Python

Level of difficultyEasy
Reading time13 min
Views10K

Подчёркивание _ — это символ, который используются в именах в коде на Питоне. Он влияет на то, как код работает и как код читают. Знания о том, куда поместить подчёркивание, помогает писать код.

Читать далее
Total votes 19: ↑19 and ↓0+24
Comments13

Автотесты на Django: менеджмент данных тестирования на монолите

Level of difficultyMedium
Reading time6 min
Views2K

Тестировать монолитное приложение может быть непросто — особенно, когда сервис активно развивается. На проверку каждой фичи уходит всё больше ресурсов, а времени на оптимизацию мало. Как поступить?

Читать далее
Total votes 8: ↑8 and ↓0+10
Comments2

Как мы Schema Registry для Kafka настраивали, и что могло пойти не так…

Reading time11 min
Views40K

Всем привет.

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

Спойлер: на данный момент реестр схем данных настроен и используется в боевой системе, каких-то проблем, связанных с SR, замечено не было.

Читать далее
Total votes 3: ↑2 and ↓1+3
Comments4

Django 5: асинхронный бекенд и эффектный фронтенд с минимальными затратами времени

Reading time17 min
Views4.9K

Приветствую, друзья!

Уже давно у меня возникала мысль подробно, как в случае с FastAPI и Aiogram 3, разобрать «суровый» Django 5. Однако, из-за большого дефицита свободного времени и масштабности Django, руки до этого не доходили. Сегодня, как вы уже поняли, момент настал.

В процессе написания кода мы затронем следующие темы: маршрутизация, работа со статическими файлами, асинхронное использование Django 5, работа с базой данных SQLite через встроенное ORM и многое другое.

Сегодня мы создадим простой сайт, который будет демонстрировать гороскоп на завтра для любого знака зодиака. Чтобы было интереснее, гороскоп будем парсить в момент обращения к знаку зодиака (об этом подробнее далее).

Читать далее
Total votes 11: ↑9 and ↓2+10
Comments12

Апи версионирование по-взрослому

Level of difficultyMedium
Reading time8 min
Views7.4K

Мы все любим пробовать новые инструменты, но ненавидим их поддерживать и обновлять. Это касается всего: операционных систем, приложений, API, пакетов Linux. Больно, когда наш код перестает работать из-за обновления, и вдвойне больно, когда обновление было инициировано не нами.

В разработке API вы рискуете сломать код ваших пользователей с каждым новым обновлением. Если API -- ваш основной продукт, то обновления будут ещё более пугающими.

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

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

Читать далее
Total votes 12: ↑11 and ↓1+14
Comments37

Изучаем Docker, часть 2: термины и концепции

Reading time6 min
Views238K
В первой части перевода серии материалов, посвящённых Docker, мы сделали общий обзор этой системы. В частности, мы говорили о том, почему технологии контейнеризации важны в наше время, о том, что такое контейнеры Docker, и о том, с чем их можно сравнить. Сегодня мы поговорим об экосистеме Docker и рассмотрим важные термины, с которыми вы можете столкнуться на пути изучения и использования Docker. Продолжив аналогию с разными вкусностями, представим, что наши термины — это пончики. Дюжина пончиков.

Часть 1: основы
Часть 2: термины и концепции
Часть 3: файлы Dockerfile
Часть 4: уменьшение размеров образов и ускорение их сборки
Часть 5: команды
Часть 6: работа с данными



Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments36

Паттерн Unit of Work в Python с SQLAlchemy

Level of difficultyEasy
Reading time7 min
Views3.9K

Unit of Work отслеживает все объекты, которые были загружены в память и изменены в ходе выполнения программы. Он управляет их состояниями и сохраняет изменения в базе данных в конце транзакции. Это делается с использованием сессий, которые действуют как контейнеры для всех изменений.

Когда работа завершена, Unit of Work выполняет commit для всех изменений, сохраняя их в базе данных. Если что-то пошло не так, выполняется rollback, и база данных возвращается в состояние до начала транзакции.

В данной статье рассмотрим, как реализовать паттерн Unit of Work с использованием SQLAlchemy.

Читать далее
Total votes 12: ↑8 and ↓4+11
Comments4

Телеграм-бот магазин на Python. Создание с нуля

Level of difficultyHard
Reading time20 min
Views22K

В этой статье я покажу, как сделать Telegram-бота для онлайн-магазина на Python, который позволяет пользователям просматривать каталог товаров, добавлять их в корзину и оформлять заказы. Мы также рассмотрим, как интегрировать платежи и работать с базой данных для хранения информации о товарах и корзинах пользователей.

Читать далее
Total votes 18: ↑16 and ↓2+18
Comments3

Как сменить технологию и не закопаться в рефакторинге: опыт внедрения DDD в проект на FastAPI — Часть 1

Level of difficultyMedium
Reading time15 min
Views6.6K

Привет, хабравчане!

В серии статей расскажу, что такое DDD (domain-driven design) и какие у него преимущества и недостатки. Разберемся, когда применять подход и как сочетать его с FastAPI, популярным ASGI фреймворком на Python.

В этой части рассмотрим паттерны проектирования Repository и Unit of Work. С их помощью мы работаем через интерфейсы. Паттерны помогают в разделении кода на слои: основная логика приложения представляется внутренними слоями, а используемые технологии - внешними.

Читать далее
Total votes 17: ↑16 and ↓1+17
Comments15

Как вкусно приготовить «Сельдерей» (Celery)

Level of difficultyHard
Reading time8 min
Views4.7K

Celery можно любить или не любить, но избежать работы с ним практически невозможно. Однако, не все инженеры задумываются о том, что происходит в момент вызова Celery задач. И в этой статье я хочу рассказать, как именно происходит вызов и отправка сообщения, к чему может привести игнорирование того, что Celery под собой имеет транспорт, и что может произойти, если этот транспорт начнет сбоить.

Читать далее
Total votes 13: ↑12 and ↓1+14
Comments2

Различные вычисления, многопоточность, асинхронность и мультипроцессность в Python

Level of difficultyMedium
Reading time9 min
Views12K

Всем привет! Меня зовут Дмитрий Первушин, я лидер Python-компетенций трайба ИСУ в Сбере. 

Эта статья рассчитана на людей, которые уже знакомы с Python, хотя бы на уровне junior+. Я объясню, какие есть отличия и особенности в многопоточности, асинхронности и мультипроцессорности в Python, где и когда они используются. Как говорится в пословице: «Всё познаётся в сравнении», именно в таком стиле я подготовил примеры. Кроме этого, буду специально делать ошибки и рассматривать неправильные подходы, чтобы можно было сразу разобраться, убедиться и запомнить, почему так делать нельзя и какой другой подход в этом случае нужно использовать.

Читать далее
Total votes 31: ↑28 and ↓3+38
Comments17

Архитектура боевого корпоративного frontend-приложения

Level of difficultyEasy
Reading time5 min
Views9.1K

О неприступные стены удобной архитектуры растущего приложения сломано много копий. Это, в принципе, довольно предсказуемо. У всех нас свой бэкграунд, опыт разработки и способ работы с абстракциями. Что для одного чисто и понятно, для другого может быть сумбурно и перемешано. Я хочу рассказать о том выборе, который был сделан год назад и который за эти месяцы себя прекрасно показал.

Читать далее
Total votes 9: ↑8 and ↓1+11
Comments35
1
23 ...

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity