fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

Сохранёнки программиста

Сохранёнки программиста

رفتن به کانال در Telegram

Заметки и ссылки на будущее, чтобы изучить когда будет время. Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/med

نمایش بیشتر
6 499
مشترکین
-324 ساعت
-127 روز
-3630 روز
جذب مشترکین
اکتبر '26
اکتبر '26
+32
در 0 کانال‌ها
سپتامبر '26
+65
در 6 کانال‌ها
Get PRO
اوت '26
+28
در 2 کانال‌ها
Get PRO
ژوئیه '26
+26
در 3 کانال‌ها
Get PRO
ژوئن '26
+48
در 2 کانال‌ها
Get PRO
مه '26
+70
در 0 کانال‌ها
Get PRO
آوریل '26
+30
در 0 کانال‌ها
Get PRO
مارس '26
+47
در 5 کانال‌ها
Get PRO
فوریه '26
+57
در 14 کانال‌ها
Get PRO
ژانویه '26
+38
در 2 کانال‌ها
Get PRO
دسامبر '25
+46
در 4 کانال‌ها
Get PRO
نوامبر '25
+45
در 2 کانال‌ها
Get PRO
اکتبر '25
+40
در 7 کانال‌ها
Get PRO
سپتامبر '25
+26
در 3 کانال‌ها
Get PRO
اوت '25
+41
در 1 کانال‌ها
Get PRO
ژوئیه '25
+46
در 0 کانال‌ها
Get PRO
ژوئن '25
+38
در 2 کانال‌ها
Get PRO
مه '25
+68
در 5 کانال‌ها
Get PRO
آوریل '25
+49
در 1 کانال‌ها
Get PRO
مارس '25
+63
در 1 کانال‌ها
Get PRO
فوریه '25
+69
در 2 کانال‌ها
Get PRO
ژانویه '25
+72
در 4 کانال‌ها
Get PRO
دسامبر '24
+46
در 1 کانال‌ها
Get PRO
نوامبر '24
+104
در 6 کانال‌ها
Get PRO
اکتبر '24
+73
در 4 کانال‌ها
Get PRO
سپتامبر '24
+87
در 3 کانال‌ها
Get PRO
اوت '24
+204
در 4 کانال‌ها
Get PRO
ژوئیه '24
+86
در 4 کانال‌ها
Get PRO
ژوئن '24
+77
در 4 کانال‌ها
Get PRO
مه '24
+75
در 4 کانال‌ها
Get PRO
آوریل '24
+68
در 3 کانال‌ها
Get PRO
مارس '24
+65
در 4 کانال‌ها
Get PRO
فوریه '24
+50
در 0 کانال‌ها
Get PRO
ژانویه '24
+64
در 1 کانال‌ها
Get PRO
دسامبر '23
+59
در 2 کانال‌ها
Get PRO
نوامبر '23
+3 534
در 33 کانال‌ها
Get PRO
اکتبر '23
+55
در 1 کانال‌ها
Get PRO
سپتامبر '23
+71
در 0 کانال‌ها
Get PRO
اوت '23
+69
در 0 کانال‌ها
Get PRO
ژوئیه '23
+57
در 0 کانال‌ها
Get PRO
ژوئن '23
+180
در 0 کانال‌ها
Get PRO
مه '23
+73
در 0 کانال‌ها
Get PRO
آوریل '23
+93
در 0 کانال‌ها
Get PRO
مارس '23
+65
در 0 کانال‌ها
Get PRO
فوریه '23
+113
در 0 کانال‌ها
Get PRO
ژانویه '23
+68
در 0 کانال‌ها
Get PRO
دسامبر '22
+86
در 0 کانال‌ها
Get PRO
نوامبر '22
+90
در 0 کانال‌ها
Get PRO
اکتبر '22
+117
در 0 کانال‌ها
Get PRO
سپتامبر '22
+134
در 0 کانال‌ها
Get PRO
اوت '22
+787
در 0 کانال‌ها
Get PRO
ژوئیه '22
+119
در 0 کانال‌ها
Get PRO
ژوئن '22
+90
در 0 کانال‌ها
Get PRO
مه '22
+157
در 0 کانال‌ها
Get PRO
آوریل '22
+131
در 0 کانال‌ها
Get PRO
مارس '22
+117
در 0 کانال‌ها
Get PRO
فوریه '22
+198
در 0 کانال‌ها
Get PRO
ژانویه '22
+149
در 0 کانال‌ها
Get PRO
دسامبر '21
+5 099
در 0 کانال‌ها
Get PRO
نوامبر '21
+927
در 0 کانال‌ها
Get PRO
اکتبر '21
+1 849
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
20 اکتبر0
19 اکتبر0
18 اکتبر0
17 اکتبر+1
16 اکتبر+2
15 اکتبر+1
14 اکتبر0
13 اکتبر+1
12 اکتبر+6
11 اکتبر+3
10 اکتبر0
09 اکتبر+4
08 اکتبر+2
07 اکتبر0
06 اکتبر0
05 اکتبر+2
04 اکتبر+1
03 اکتبر0
02 اکتبر0
01 اکتبر+9
پست‌های کانال
Как D1 управляет миллионами баз без задержки каждого запроса Когда платформа создаёт отдельную базу для каждого клиента или п
Как D1 управляет миллионами баз без задержки каждого запроса Когда платформа создаёт отдельную базу для каждого клиента или приложения, центральный каталог быстро становится источником лишних сетевых переходов. В разборе архитектуры D1 Cloudflare разделяет выполнение SQL, управление базами и фоновые процессы. Создание и удаление могут обращаться к центральному PostgreSQL. Путь каждого SQL-запроса стараются держать на периферии сети. Метаданные маршрутизации кешируются в Workers KV. Для обращения через привязку D1 к Worker нужные сведения уже находятся в самой привязке: отдельное разрешение идентификатора базы не требуется. Запрос проходит через прокси к Durable Object, обслуживающему базу. Учёт и аналитика работают асинхронно там, где допустима задержка согласования. При проектировании похожей платформы стоит отдельно нарисовать путь пользовательского запроса: какие центральные зависимости действительно нужны для его выполнения? #архитектура #масштабирование

2
Как Uber Eats сократил задержку поиска вдвое Быстрый ответ API ещё не означает, что пользователь увидел результаты. Команда U
Как Uber Eats сократил задержку поиска вдвое Быстрый ответ API ещё не означает, что пользователь увидел результаты. Команда Uber Eats стала измерять время до готовности первого экрана, включая изображения. В инженерном разборе описано, сколько лишней работы накопилось между запросом и выдачей. Ранжирование ждало загрузки цен, акций и наличия товаров, хотя эти данные нужны для отображения. Другие этапы выполнялись последовательно без реальной зависимости. Данные для ранжирования и показа разделили, независимые вычисления распараллелили. Первый ответ уменьшили до начальной страницы, остальные результаты сохранили для прокрутки. Пагинация и параллельное формирование элементов убрали более 200 мс из времени готовности первого экрана. Общее сокращение задержки вдвое получено набором изменений. Полезная точка для аудита своего сервиса: какие данные нужны прямо сейчас, а какие лишь заставляют критический путь ждать. #архитектура #производительность
191
3
Почему nextval нельзя вычислять где угодно Перенос вычисления с маршрутизатора на шард может ускорить SQL-запрос. Но с nextva
Почему nextval нельзя вычислять где угодно Перенос вычисления с маршрутизатора на шард может ускорить SQL-запрос. Но с nextval() такая оптимизация способна изменить результат. В разборе планировщика Neki показаны две сложности. Во-первых, независимые последовательности на шардах могут выдать одинаковые значения. Поэтому маршрутизатор получает новые номера через выделенный авторитетный шард. Во-вторых, важно число вызовов. Если JOIN превратил одну исходную строку в три строки результата, выражение nextval() в списке SELECT должно получить новое значение для каждой из них. Вычислить его один раз до соединения и размножить ответ нельзя. Похожее ограничение касается now(): в PostgreSQL оно связано с началом транзакции. Независимый вызов на каждом шарде может вернуть разные моменты времени. При распределении SQL по узлам приходится сохранять место, контекст и число вычислений выражения. #postgresql #архитектура
207
4
Почему одинаковое число ядер даёт разную мощность Две реплики сервиса получили одинаковый лимит CPU. На новом сервере запас е
Почему одинаковое число ядер даёт разную мощность Две реплики сервиса получили одинаковый лимит CPU. На новом сервере запас есть, на старом процессор перегружен. Для системы с лидером это особенно неприятно: после смены лидера нагрузка переезжает на более медленное железо. В разборе Uber описаны нормализованные вычислительные единицы Odin. Потребление CPU умножают на коэффициент производительности сервера, рассчитывают потребность кластера, затем переводят её обратно в ядра для конкретного хоста. Коэффициенты пришлось уточнять по реальной нагрузке: синтетических тестов оказалось недостаточно, а Kafka и Cassandra по-разному используют одни и те же серверы. Для Kafka такой подход сократил выделенное число ядер примерно на 8%. Это результат конкретного внедрения. При переносе сервиса между поколениями CPU стоит сравнивать время выполнения и запас под пиковую нагрузку, а не только число ядер. #инфраструктура #производительность
217
5
Как общий кеш выдавал пустые ответы MySQL У крупного клиента Hyperdrive примерно 0,001% запросов возвращали пустой результат,
Как общий кеш выдавал пустые ответы MySQL У крупного клиента Hyperdrive примерно 0,001% запросов возвращали пустой результат, хотя строки должны были быть. Ошибка появлялась только с включённым кешем. В расследовании Cloudflare причиной оказались разные представления ответа MySQL. Hyperdrive и пользовательский драйвер могли согласовать разные возможности протокола: в одном случае набор строк завершается пакетом OK, в другом нужен EOF. Два компонента Hyperdrive использовали общий кеш, когда находились в одном дата-центре. Один сохранял исходные байты, другой — уже преобразованные для драйвера. При чтении чужой записи ответ мог завершиться раньше времени или зависнуть. Исправление: сохранять в кеше единое представление, а преобразование выполнять при выдаче клиенту. Если несколько компонентов разделяют кеш, им нужен общий контракт формата значения, включая особенности протокола. #кеширование #разборы
216
6
Почему уменьшение ответа API не всегда ускоряет запрос Чтобы построить историю звёзд репозитория, инструменты выгружали стран
Почему уменьшение ответа API не всегда ускоряет запрос Чтобы построить историю звёзд репозитория, инструменты выгружали страницы пользователей и оставляли только даты. Для React это требовало примерно 2500 запросов. В разборе GitHub показано, почему простая замена пользователей дневными счётчиками не решала проблему. База сначала группировала все звёзды, сортировала результат и лишь затем применяла LIMIT и OFFSET. Маленький JSON всё ещё требовал большой работы. Новый API сначала переводит страницу в диапазон дат по индексу created_at, затем считает звёзды только внутри него. Один ответ покрывает до 30 недель. Для React полная выгрузка сократилась примерно до 24 запросов. При оптимизации отчётов проверьте, где именно ограничивается выборка: после агрегации или до неё. Размер ответа этого не показывает. #базыданных #производительность
226
7
Как Spotify проверяет качество при ускорившейся разработке В августе число слитых изменений в Spotify выросло примерно с 8 10
Как Spotify проверяет качество при ускорившейся разработке В августе число слитых изменений в Spotify выросло примерно с 8 100 до 17 000 за год. Команда увидела, что проверка, тестирование и наблюдаемость должны успевать за новым темпом. В инженерном разборе Spotify есть показательный случай: автоматическое обновление зависимости прошло проверки, но сломалось в продакшене. После этого команда усиливает защитные проверки и возможности отката, а автоматические изменения переносит на рабочие часы ответственных команд. Для мобильного приложения расширили сигналы качества и добавили долгосрочные тренды: отдельный релиз может выглядеть здоровым, пока небольшие регрессии накапливаются или затрагивают только часть устройств. В рассмотренных инцидентах команда не нашла существенного прямого вклада ИИ-кода. При этом рост размера PR и сложности кода остаётся поводом для наблюдения — пороги пока не меняют. #разработка #разборы
261
8
Почему быстрое сжатие TOAST может замедлить чтение TOAST в PostgreSQL умеет сжимать большие значения и выносить их из основно
Почему быстрое сжатие TOAST может замедлить чтение TOAST в PostgreSQL умеет сжимать большие значения и выносить их из основной строки в отдельную таблицу. При выборе алгоритма важен способ чтения этих значений. В экспериментах PlanetScale сравнивают pglz и LZ4. Для превью left(body, 200) pglz позволяет ограничить объём читаемых сжатых данных. Для LZ4 PostgreSQL сначала получает значение целиком. На проверенных больших текстах это дало около 1 мс против 16 мс. Другой случай — чтение диапазона байтов из большого bytea. Стратегия EXTERNAL хранит значение без сжатия, и PostgreSQL может обратиться прямо к нужным чанкам. Это экономит работу при чтении, но требует больше места. Цифры относятся к конкретным данным и запросам. Перед сменой хранения измерьте свою нагрузку. И учтите: изменение настройки сжатия само по себе не перекодирует уже сохранённые значения. #postgresql #производительность
262
9
Почему реплики для чтения могут замедлять запись В текущем хранилище GitHub полные копии репозитория на файловых серверах обе
Почему реплики для чтения могут замедлять запись В текущем хранилище GitHub полные копии репозитория на файловых серверах обеспечивают и сохранность данных, и обработку запросов. Добавление реплики помогает чтению, но увеличивает работу при каждом push. В разборе новой Git-архитектуры GitHub описывает разделение этих задач. Данные репозиториев планируют хранить в Azure Blob Storage, а запросы обслуживать вычислительными воркерами с кешем. Дополнительная мощность для чтения тогда не требует новой полной реплики. Согласование хотят сосредоточить на обновлении ссылки Git. Хранение объектов и проверки можно выполнять параллельно с другими записями, а compaction и сборку мусора вынести с серверов, обслуживающих запросы. Это развивающаяся архитектура. Заявленное увеличение пропускной способности записи до 35 раз получено во внутренних бенчмарках; такой результат не обещает ускорить каждый пользовательский push в 35 раз. #архитектура #производительность
280
10
Как Uber ограничивает лавину повторных запросов Сервис C вернул ошибку. B повторил запрос к C, а после неудачи сообщил об оши
Как Uber ограничивает лавину повторных запросов Сервис C вернул ошибку. B повторил запрос к C, а после неудачи сообщил об ошибке A. Если A тоже повторит запрос, вся цепочка запустится заново. Даже небольшой лимит ретраев на каждом уровне усиливает нагрузку. В разборе Uber используется error ownership: инфраструктура сопоставляет входящие и исходящие ошибки, чтобы определить, где сбой возник, а где его только передали дальше. Если C объявил себя источником ошибки, B может повторить обращение к нему в пределах retry budget. Когда ошибка уходит выше, B снимает признак владения: A уже не должен повторять всю цепочку. В статье есть схема передачи x-uber-error-claim и обработка сложных случаев: потерянного контекста и совпавших независимых ошибок. Подход требует понимания зависимостей сервисов — одного общего правила «повторять любой 500» для этого недостаточно. #архитектура #разборы
276
11
Как Cloudflare проверяет выводы ИИ-агентов В первом прототипе агент получал всё расследование одним запросом. Он смешивал тел
Как Cloudflare проверяет выводы ИИ-агентов В первом прототипе агент получал всё расследование одним запросом. Он смешивал телеметрию с гипотезами, выходил за область проверки и терял различие между отсутствием данных и неудачным поиском. В инженерном разборе Cloudflare сбор свидетельств вынесен в детерминированный код. До вызова модели система фиксирует область расследования, источники, время и пробелы в данных. Один снимок можно использовать повторно, чтобы сравнивать интерпретации агентов. Четыре специализированных агента исследуют трафик, историю клиента, глобальную телеметрию и сведения об угрозах. Код проверяет ссылки на свидетельства и принадлежность расследованию. Сбои источников сохраняются явно: «не проверено» отличается от «проверено, совпадений нет». Для разработчиков агентных систем это пример разделения сбора данных, анализа и проверки результата. Решение о мерах защиты принимает аналитик. #архитектура #разборы
300
12
Если приходилось уходить с одного ИИ-инструмента на другой, что стало главной причиной?
224
13
Почему разработчик планирует отдавать больше задач Claude Винсент Шмальбах описал план перераспределить расходы на ИИ: больше работы отдавать Claude, а Codex сохранить для части задач. К решению его подтолкнули затяжные сессии. По наблюдениям автора, агент иногда часами продолжал проверки и добавлял соседние задачи. Квота расходовалась, а момент, когда можно принять результат и двигаться дальше, было трудно предсказать. В личном разборе Шмальбах связывает эти эпизоды с условиями подписки и затратами на собственные проекты. #ии #инструменты 🐸 Библиотека ИИ для айтишников
226
14
Как leaky bucket ограничивает допуск нагрузки Leaky bucket задаёт вместимость и скорость освобождения ёмкости. Новая операция
Как leaky bucket ограничивает допуск нагрузки Leaky bucket задаёт вместимость и скорость освобождения ёмкости. Новая операция занимает часть объёма; если места не хватает, её отклоняют. Состояние меняется с течением времени, независимо от завершения запросов. В разборе механизма admission control показаны два варианта: измеритель разрешает работу сразу, а очередь удерживает её до выпуска. В варианте измерителя не нужен фоновый процесс, который постоянно «осушает» ведро: достаточно хранить прежний уровень и время проверки, затем пересчитать уровень при обращении. На примере GraphQL API Shopify разобрана стоимость запросов: она зависит от запрошенных данных. После выполнения разница между оценкой и фактической стоимостью корректирует состояние ведра. Для разработчиков API и баз данных здесь есть ориентир: определить стоимость работы, допустимый всплеск и поведение клиента при отказе. Ограничение скорости само по себе не ограничивает число одновременно выполняющихся запросов. #алгоритмы #архитектура
282
15
Почему счёт записывают в TigerBeetle последним, а проверяют первым В техническом разборе создания счёта без общей транзакции
Почему счёт записывают в TigerBeetle последним, а проверяют первым В техническом разборе создания счёта без общей транзакции TigerBeetle определяет, существует ли действующий счёт: запись в нём разрешает переводы. Поэтому сведения о владельце сначала сохраняют в PostgreSQL. Обратный порядок при сбое может оставить деньги без установленного владельца. Существование проверяют сначала в TigerBeetle: запись только в PostgreSQL ещё не разрешает переводы. Временное расхождение баз допустимо, деньги без соответствующей записи о владельце в PostgreSQL недопустимы. Допустим, процесс упал после записи в PostgreSQL, до сохранения результата шага. Пока счёта нет в TigerBeetle, переводы отклоняются. При восстановлении шаг повторяется: те же данные считаются успехом, затем создаётся счёт в TigerBeetle. Другие данные означают конфликт и остановку. #архитектура #разборы
277
16
Как батчинг меняет производительность OLTP в TigerBeetle Перенос привычной схемы работы с SQL-базой в TigerBeetle может дать
Как батчинг меняет производительность OLTP в TigerBeetle Перенос привычной схемы работы с SQL-базой в TigerBeetle может дать слабый результат. Множество клиентов, отправляющих по одной транзакции, не раскрывает возможности движка. В разборе банковской нагрузки авторы меняют модель данных, используют батчи и идентификаторы с временной компонентой. Одна логическая транзакция состоит из двух переводов: флаг Linked связывает их атомарно — фиксируются оба либо ни один. Пока клиент ждёт ответа на текущий запрос, он собирает новые операции в следующий батч. Отдельная искусственная задержка для накопления не нужна. Сетевые и репликационные издержки распределяются на несколько операций. Материал полезен при проектировании транзакционных сервисов: разобраны модель, способ подачи нагрузки и локальность записей. Показанное ускорение относится к конкретному эксперименту; переносить его цифры на любой сервис нельзя. #производительность #разборы
305
17
Ленивое декодирование PostgreSQL в маршрутизаторе Neki Маршрутизатор шардированной базы добавляет сетевой переход и обработку
Ленивое декодирование PostgreSQL в маршрутизаторе Neki Маршрутизатор шардированной базы добавляет сетевой переход и обработку ответов. В техническом разборе Neki показано, как сократить эту работу: хранить строки в байтах протокола PostgreSQL и разбирать значения по мере необходимости. При точечном запросе маршрутизатор декодирует параметр ключа шардирования, а ответ передаёт клиенту без разбора столбцов. Заголовки сообщений и длины при этом проверяются. Для LIMIT нужны границы строк; для сортировки — значения ключа сортировки. Остальные поля могут оставаться в исходном формате. В статье разобраны параметры Bind, текстовые и бинарные значения, удаление служебного столбца из ответа. Для разработчиков прокси и движков запросов это пример архитектуры, где каждый следующий уровень представления данных создаётся только тогда, когда он нужен операции. #производительность #архитектура
302
18
🧑‍💻 Какие навыки помогают вам в разработке в 2026 году? Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно? Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему. Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании. 👉 Пройти опрос
201
19
Резервные копии PostgreSQL без вытеснения данных из кэша Linux В техническом разборе резервного копирования ClickHouse Manage
Резервные копии PostgreSQL без вытеснения данных из кэша Linux В техническом разборе резервного копирования ClickHouse Managed Postgres показано, как чтение всей базы заполняет кэш Linux и вытесняет данные для запросов. Прямое чтение с O_DIRECT обходит кэш, но отключает упреждающее чтение: ядро больше не загружает следующие порции данных заранее. На массиве RAID0, где последовательные блоки распределены между дисками, маленький запрос задействует лишь один диск. Поэтому для четырёх дисков команда увеличила размер чтения до 4 МиБ. Число параллельных читателей WAL-G подбирают отдельно, чтобы диски не простаивали между запросами. В тесте на базе 467 ГБ обычный бэкап вытеснил из кэша все 40 ГиБ заранее прочитанной таблицы, прямое чтение сохранило их. Администраторам PostgreSQL: при настройке бэкапов учитывайте и сохранность кэша, и загрузку дисков. #разборы #производительность
342
20
Мобильные тесты Shopify: строгие проверки и визуальный поиск элементов В инженерном разборе обёртки над Appium команда Shopif
Мобильные тесты Shopify: строгие проверки и визуальный поиск элементов В инженерном разборе обёртки над Appium команда Shopify показывает, как вернула тесты пользовательских сценариев в обязательные проверки изменений кода. По её данным, доля успешных запусков отдельных тестов выросла с 50% до 98%. Каждое действие требует проверки: ожидаемое условие должно быть ложным до действия и истинным после. Вместо поиска элементов в дереве компонентов тест ищет их на снимке экрана: PaddleOCR распознаёт текст, OpenCV сопоставляет иконки с образцами. Appium по-прежнему управляет устройством. Видео с отметками поиска и нажатий помогает разобрать сбой без повторного запуска. Новые тесты проходят многократные прогоны перед допуском к обязательным проверкам. Мобильным разработчикам стоит читать ради устройства API, которое ограничивает способы написать нестабильный тест. #разборы
352