Обновить

Бэкенд

Сначала показывать
Порог рейтинга
Уровень сложности

Архитектура Netflix Tudum: от CQRS с Kafka к CQRS с RAW Hollow

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.2K

Tudum.com — фан-портал Netflix с более чем 20 млн MAU, где скорость публикации и персонализации упирается в архитектуру. В статье — путь от «классического» CQRS с Kafka и read-store к узкому месту предпросмотров, а затем — к RAW Hollow: in-memory состоянию с сжатием и read-after-write на требовательных запросах. Разбираем, как отказ от Page Data/KV и I/O на горячем пути упростил контур чтения и дал прирост производительности, какие компромиссы это привнесло и почему такой подход срабатывает для контента, меняющегося не каждую секунду.

Читать далее

Асинхронный Python: руководство для начинающих с практическим заданием

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров10K

Ваш Python-скрипт работает медленно. Вы запускаете его и смотрите, как он "висит", ожидая загрузки файла, ответа от API или завершения запроса к базе данных. Проблема почти всегда одна — ожидание. В программировании такие задачи называются I/O-bound (ограниченные вводом-выводом), и именно они "съедают" драгоценное время.

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

Читать далее

Почему мы отказываемся от serverless

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров14K

Когда находишься на критическом пути API-аутентификации, важна каждая миллисекунда. Спустя два года борьбы с ограничениями serverless мы пересобрали весь наш стек API, добившись таким образом существенного снижения сквозных задержек.

Когда мы запускали наш API на Cloudflare Workers, они казались идеальным выбором для сервиса API-аутентификации. Глобальная периферийная инфраструктура, автоматическое масштабирование и оплата только за использование. Разве это не замечательно?

Перенесёмся в будущее: мы полностью пересобрали эту систему на основе Go-серверов с хранением состояния, в результате получив шестикратный рост производительности и существенное упрощение архитектуры, позволившее реализовать самохостинг и платформонезависимость.

TL;DR:

Мы перешли с Cloudflare Workers на Go-серверы
Снизили задержки в шесть раз
Устранили сложные механизмы обхода кэшей и оверхед конвейеров данных
Упростили архитектуру, перейдя от распределённой системы к простому приложению
Обеспечили возможность самохостинга и платформонезависимость

В статье мы расскажем о том, почему совершили этот переход, о проблемах, вынудивших нас на это пойти, и о том, чему мы научились в процессе.

Читать далее

Discriminated unions в C#

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров3.8K

Небольшая статья об алгебраических типах данных и о том как их собрать в C#, где всё ещё нет нативной реализации Discriminated Unions.

Читать далее

Выжимаем из Go скорость до последних наносекунд

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров16K

Будем оптимизировать программы на Go. Выжимать последние наносекунды, чтобы код приближался по скорости к Си или ассемблерному. Цель - скорость, чтобы процессор был загружен на 100% при высокопроизводительные вычислениях.

Читать далее

Совместимость в Java: что может пойти не так?

Уровень сложностиПростой
Время на прочтение18 мин
Количество просмотров3.9K

Совместимость — фундаментальная характеристика платформы Java, обеспечивающая стабильную работу программ при эволюции JDK. Однако понятие «совместимость» многогранно: исходный код, бинарные файлы и поведение программ оцениваются по разным стандартам.

В новом переводе от команды Spring АйО разберем три ключевых категории совместимости: на уровне исходного кода, бинарную и поведенческую, а также рассмотрим нюансы сериализуемой и миграционной совместимости.

Читать далее

Как настроить автообновление n8n через Portainer с помощью Watchtower

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.4K

Поддерживать актуальность ваших Docker-контейнеров — важная задача для обеспечения безопасности и стабильности ваших приложений, будь то n8n, базы данных или веб-серверы. Ручное обновление контейнеров Docker может отнимать много времени, особенно когда их много. К счастью, существует эффективное решение – Watchtower. Этот инструмент позволяет настроить автоматическое обновление n8n а также других Docker-контейнеров, избавляя вас от рутины.

Если вы используете Portainer для управления своей Docker-средой, установка Watchtower через Portainer (Как установить Portainer читайте в этой статье) становится удивительно простой. В этой статье я подробно покажу, как выполнить установку Watchtower из интерфейса Portainer, настроить его для автоматического обновления n8n и всех других ваших контейнеров. Узнайте, как настроить Watchtower один раз и наслаждаться всегда актуальными сервисами.

Что нам понадобится для автоматизации обновлений Docker:

Читать далее

Агент на Kotlin без фреймворков

Уровень сложностиСредний
Время на прочтение28 мин
Количество просмотров2.2K

Статья является продолжением Пишем агента на Kotlin: KOSMOS, но может читаться независимо. Мотивация к написанию — сохранить читателю время на возьню с фреймворками для решения относительно простой задачи.

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

В статье хочу показать, как самостоятельно написать аналог Koog или Langchain4j. У вас не будет всех их фичей, зато будет очень простая и расширяемая система.

Читать далее

Чек-лист: 5 признаков, что вашему бизнесу пора переезжать с облака на выделенный сервер

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.7K

Мы собрали 5 четких признаков, по которым можно понять: пора переходить на выделенный сервер. Включая реальные тесты облака против bare metal, анализ затрат и кейсы, когда облако превращается из решения в проблему.

Читать далее

За что на самом деле платят SRE и DevOps? Разбираем вакансии и требования

Время на прочтение7 мин
Количество просмотров4.6K

Обсуждение ролей SRE) и DevOps-инженеров часто сводится к спорам и недопониманию. Чем они занимаются на практике? Какие навыки ценятся и за что компании готовы платить? Давайте разберёмся на примере реальных вакансий и опыта специалистов.

Эта статья — выжимка из вебинара «За что платят SRE и DevOps?», в котором Кирилл Борисов, SRE в VK, и Вячеслав Федосеев, TeamLead DevOps в «Честном знаке», обсудили ключевые требования, навыки и зоны ответственности, а также то, как это влияет на уровень компенсации. Посмотреть вебинар полностью можно по ссылке.

Читать далее

ClickHouse vs StarRocks: сравнение выбора MPP‑баз данных для всех сценариев

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров2.4K

Сравнение ClickHouse и StarRocks: архитектура и функциональность, типы join и модели данных (широкая таблица vs звезда), конкурентность, частые обновления (Primary Key, Merge‑on‑Read), администрирование и онлайн‑масштабирование. Приводим результаты бенчмарков SSB и TPC‑H, а также тесты загрузки (GitHub dataset). Все тестовые данные и конфигурации актуальны на 2022 год. Если вам интересно, воспроизведите эксперименты по актуальным инструкциям проектов и поделитесь результатами и замечаниями — это поможет уточнить выводы и обновить сравнение.

Читать далее

Разбираемся со звёздочками: понятное руководство по *args и **kwargs для начинающих

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров5.3K

Многие начинающие разработчики обходят *args и **kwargs стороной, считая их чем-то необязательным или слишком сложным. Но на самом деле, понимание этого механизма — это качественный скачок в вашем умении писать чистый, масштабируемый и по-настоящему "пайтонический" код.

Читать далее

Интеграции без иллюзий: интервью с Владимиром Гантуриным, техническим директором Compo Soft

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров400

Интеграции и обмен данными сегодня — это не просто техническая задача, а фундамент цифровой зрелости бизнеса. Российский рынок переживает быстрые изменения: уход западных вендоров, рост требований к надёжности и безопасности, распространение микросервисных архитектур. Как компании справляются с вызовами, когда стоит менять старую интеграционную платформу, зачем бизнесу API Gateway и брокеры сообщений, и можно ли обойтись без интеграционной шины?

Читать далее

Ближайшие события

Оверинжиниринг в бэкенде: «промышленные» решения, которые чаще вредят, чем помогают

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров4K

За годы работы с TypeScript, Java, Kotlin и Go я не раз сталкивался с одним и тем же паттерном: команда внедряет «правильное» архитектурное решение — и получает не гибкость, а технический долг.

Причина проста: оверинжиниринг маскируется под профессионализм. Мы выбираем сложные инструменты не потому, что они нужны, а потому, что «так делают в серьёзных проектах».

В результате принцип KISS — «Keep It Simple, Stupid» — работает не хуже, чем в 1930-х, когда его впервые сформулировали в среде авиационных инженеров. В этой статье — мой личный список подходов, которые в 90% случаев (особенно в REST-серверах) приносят больше вреда, чем пользы.

Читать далее

Шпаргалка по работе с PostgreSQL для бэкенд-разработчиков

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров17K

Лайфхаки для миграций, оптимизации и избегания граблей

Реальные лайфхаки и проверенные практики по миграциям, оптимизации запросов, управлению индексами и обратной совместимости кода. Узнайте, как:

Не сломать прод при миграции.
Избежать N+1 и других проблем SQL-запросов.
Планировать откаты и работать безопасно на высоконагруженных БД.

Читать далее

.Net GRPC, или мульти-стек в проекте

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.9K

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

Начинали мы с нуля, с эскизов. Задача была реализовать систему, обладающую следующими функциональными и техническими требованиями:

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

Читать далее

Решение проблемы двойного букинга: паттерны проектирования систем

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров5.8K

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

Технологические компании наподобие Ticketmaster, BookMyShow, Airbnb, Delta Airlines и так далее сделали бронирование делом одного клика, позволившим покупать билеты из дома.

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

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

Поэтому важно создать надёжное решение классической задачи — двойного букинга.

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

Мы рассмотрим различные архитектурные паттерны и разберёмся в их плюсах и минусах. Статья поможет вам обрести глубокое понимание и наработать знания в системном мышлении.

Читать далее

Почему Google Таблицы лучше Excel для частного инвестора, и при чем здесь Apps Script

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров5.9K

Каждый инвестор рано или поздно сталкивается с необходимостью ведения учёта своего портфеля, особенно если брокеров несколько. В первом приближении для этого подходит Excel: многим знаком, работает локально и почти всегда установлен на компьютере. Подходит для расчета доходности, учета дивидендов.

Однако механическая работа со временем утомляет, а возможности Excel для автоматизации онлайн получения котировок ограничены. Google Таблицы решают эту проблему: это изначально облачный инструмент. Чтобы получить актуальную цену акций, достаточно одной формулы.

В этой статье мы разберём, как Google Таблицы могут дать инвестору больше свободы. Я покажу на примерах, как с помощью встроенных инструментов и простых гугл скриптов (Google Apps Script) превратить таблицу в полноценную платформу для анализа и автоматизации вашего портфеля. А ещё разберем получение котировок в обоих инструментах.

Читать далее

Файлы, которые нельзя менять: философия TernFS и почему это гениально

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.9K

XTX Markets — это ведущая компания в области алгоритмической торговли. Они ежедневно обрабатываем огромные объёмы данных, которые являются основой для наших исследований в области машинного обучения и количественного анализа. Для эффективной работы нашим исследователям нужна быстрая, надёжная и удобная система хранения данных.

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

Читать далее

Тупик

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров13K

Мат рождается в душе. Больше всего его рождается когда сталкиваешься с чем-то похожим на <подставь свой фреймворк>. Инструмент с прекрасными целями и задачами постепенно превращается во все больший и больший кусок г.. в котором приходиться копаться. Ощущаешь себя жужжащей мухой, летающей вокруг по необходимости.

Когда трава была зеленее, когда мы сильно боролись за каждый такт процессора, тратя на это наше время, которое мы тогда не очень ценили, все было в какой-то мере проще.
Если тебе нужна была фича, ты ее делал сам.
Или ты искал уже реализованную фичу, и прикручивал к своему коду.
Больше времени уходило на поиск. Не всегда можно было найти.

Сейчас все поменялось.
Подключение новой фичи чаще всего присоединяет к твоему коду 100500 дополнительных фиговин, которые мало того, что чаще не нужны, но и которые мешают запустить твой код.
Они подключаются по дефолту сами, и ты ищешь как их отключить. Но так как библиотеки постоянно меняются, это не так просто. Сколько раз подключал <подставь свой фреймворк>, ещё не разу не было одинакового кода. Постоянно меняются названия методов, их параметры, типы.

Раньше было просто. Возьмем для примера <подставь свой фреймворк>. Ты подключал и говорил ему, что нужно делать в первом случае, что во втором, что в третьем.
Сейчас же так просто не работает. Все стало сложнее. Ты указываешь доступный всем метод по старинке, но не тут то было. Клиенты получают в ответ фигу. Ты думаешь, что поменялся синтаксис, ищешь новые незадеприкейчаные методы (которых по количеству уже меньше, чем задеприкейчаных), но все равно клиенты получают фигу. Один и тот же код разрешает пользователям работать с одними запросами, но не разрешает с другими. Уверен, что это как-то объясняется. Просто подключается ещё куча бинов по дефолту, с доп параметрами по дефолту, и т.д. Идеология упрощения.
Но то, что прямо игнорируется команда разработчика, это уже перебор.

Читать далее