METANIT.COM – Telegram
METANIT.COM
5.79K subscribers
1.64K photos
79 videos
9 files
986 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
15 эвристик для успешного проектирования систем:
(продолжение предыдущего поста)

1. Задержка + Глобальный масштаб → CDN
↳ Доставляйте данные с пограничных серверов, чтобы сократить задержку

2. Чтение + Узкое место → Кэш
↳ Храните часто запрашиваемые данные в кэше, чтобы снизить нагрузку на базу данных

3. Запись + Резкий рост нагрузки → Очередь
↳ Ставьте операции записи в очередь для фоновой обработки в периоды высокой нагрузки

4. Распределённая система + Транзакции → Saga
↳ Используйте компенсирующие действия для обработки транзакций, затрагивающих несколько сервисов

5. ACID + Реляционные данные → SQL
↳ Используйте SQL‑базу данных для строгой согласованности и целостности транзакций

6. Гибкость + Масштабирование → NoSQL
↳ Используйте NoSQL для гибкости схемы и горизонтального масштабирования

7. SQL + Масштабирование → Шардинг БД
↳ Распределяйте и разбивайте данные по шардам для масштабирования

8. Нагрузка + Рост → Масштабирование наружу (Scale Out)
↳ Добавляйте серверы для обработки дополнительной нагрузки

9. Трафик + Надёжность → Балансировка нагрузки
↳ Равномерно распределяйте запросы для повышения производительности

10. Основное + Сбои → Резервирование
↳ Дублируйте ключевые сервисы, чтобы избежать единичных точек отказа

11. Надёжность + Сбои → Репликация
↳ Реплицируйте данные для обеспечения доступности и возможности восстановления

12. Запросы + Резкий рост → Ограничение частоты (Throttle)
↳ Избегайте перегрузки сервера, ограничивая количество запросов

13. Нагрузка + Резкий рост → Автомасштабирование
↳ Автоматически увеличивайте или уменьшайте мощность серверов для управления нагрузкой

14. Реальное время + Обновления → WebSockets
↳ Используйте WebSockets для двусторонней realtime-коммуникации

15. Повтор + Безопасность → Идемпотентность
↳ Используйте идемпотентность, чтобы повторять операции без побочных эффектов
❤‍🔥5🔥4👏3
Microsoft устранила уязвимость ASP NET Core с рейтингом CVSS 9,9 (наиболее высоким уровнем уязвимости). Уязвимость находится в компоненте веб-сервера Kestrel и позволяет обойти систему безопасности.

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

В частности, подменой запросов можно выполнить такие действия, как вход в систему под другим пользователем, обход проверок на подделку межсайтовых запросов или проведение атак с использованием инъекций. Риски, по его словам, зависят от того, как написано приложение, и негативные последствия маловероятны, «если только код вашего приложения не делает что-то странное и не пропускает ряд проверок, которые он должен выполнять при каждом запросе».

Kestrel — это встроенный веб-сервер ASP NET Core, который широко используется, иногда через обратный прокси-сервер, а иногда и напрямую.
Уязвимость, по всей видимости, существует уже давно и затрагивает все поддерживаемые версии ASP NET Core, включая версии 8, 9 и предварительную версию 10, и даже ASP NET Core 2.3, работающую на платформе .NET Framework, доступной только для Windows. Разработчики могут установить исправление для .NET SDK, загрузив последнюю версию, или обновить пакет Kestrel.Core до последней версии (2.3.6) через менеджер пакетов NuGet.

https://github.com/dotnet/aspnetcore/issues/64033#issuecomment-3403054914
11👍5🤔3
This media is not supported in your browser
VIEW IN TELEGRAM
Latency (Задержка) vs. Throughput (пропускная способность)

Иногда приложение может работать медленно даже при нормальной пропускной способности сети. Задержка (latency) и пропускная способность (throughput) описывают два совершенно разных аспекта производительности

Задержка измеряет время ожидания для каждого пакета данных. Это то, что ощущают пользователи, когда нажимают кнопку, — реактивность системы. Это время, которое требуется одному запросу, чтобы пройти путь от сервера до конечного устройства. В него входят:
* время обработки на сервере;
* задержки из‑за очередей;
* распространение сигнала по сети;
* задержки при передаче;
* подключение «последней мили» до устройства пользователя.

Пропускная способность - это количество данных, успешно доставленных за определённый промежуток времени. Речь о том, сколько пакетов проходит через канал. Пропускная способность — это ёмкость системы. Высокая пропускная способность означает, что система справляется с нагрузкой, не «задыхаясь».
🍓15🔥32👍1👏1
Лестница проектирования систем
(продолжение в следующем посте)
👍11
Лестница проектирования систем
(продолжение предыдущего поста)

Проектирование систем — это не единая глобальная концепция. Это лестница.
Большинство инженеров пытаются сразу перейти к «распределённым системам», а потом удивляются, почему всё рушится под нагрузкой.
Масштабирование нельзя просто скопировать и вставить. Его нужно развивать — шаг за шагом.

### ОСНОВЫ

Вы не можете масштабировать то, чего не понимаете.

Цель этого уровня — понять базовые строительные блоки того, как данные поступают в систему и выходят из нее.

Ступеньки этого уровня:

API и коммуникация

Знайте REST, gRPC и GraphQL; не только синтаксис, но и когда каждый из них подходит.

Балансировка нагрузки и обратные прокси

Распределение запросов, поддержание согласованности сессий и предотвращение единых точек отказа.

Кэширование

Мастерство в том, что кэшировать, когда аннулировать и как политики TTL и вытеснения влияют на производительность.

Базы данных и хранилище

Изучение компромиссов между реляционными и нереляционными системами, индексирования, нормализации (до BCNF) и транзакций.

Сетевые технологии и HTTP

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



### МЕХАНИКА

Теперь вы создаете системы, а не просто сервисы.

Цель этого уровня — создать системы, которые выдерживают реальные условия: задержки, сбои и параллелизм.

Основные моменты этого уровня:

Безопасность и аутентификация

Охватываем основы: TLS, JWTs, OAuth2, ограничение скорости и дизайн с минимальными привилегиями.

Доступность и надежность

Понимание SLA, SLI и SLO; и проектирование для плавного снижения производительности, а не слепого времени безотказной работы.

Наблюдаемость

Реализация логирования, трассировки (OpenTelemetry, Sentry) и метрик для анализа, а не шума.

Согласованность данных и транзакции

Применение шаблонов распределенных транзакций (SAGA, 2PC, Outbox, CDC).

Асинхронное взаимодействие

Использование очередей сообщений и шинков событий для децентрализации систем (Kafka, RabbitMQ, MQTT и т.д.).

Шаблоны масштабирования

Изучение вертикального и горизонтального масштабирования, чтения и записи, а также стратегий партиционирования.


### ПРОДВИНУТЫЙ УРОВЕНЬ

Теперь вы не спрашиваете «как это построить», а «как это ведет себя под нагрузкой».

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

Основные моменты этого уровня:

Инженерия устойчивости

Предохранители, повторные попытки с отступами, тестирование на хаос и разделение систем.

Оптимизация производительности

Настройка узких мест на всех уровнях: БД, кэш, сеть, сериализация и ввод-вывод.

Эволюция системы

Проектирование для изменений: сине-зеленые развертывания, флаги функций и плавные миграции.

Моделирование данных в масштабе

Полиглот-персистентность, материализованные представления, эволюция схемы и аналитические конвейеры.

Архитектуры, управляемые событиями

Полностью децентрализованные системы с богатыми, самодостаточными событиями, которые устраняют обратные вызовы к источникам.

Теория распределенных систем

CAP, PACELC, идемпотентность, конечная согласованность; и когда каждый компромисс приемлем.
👍144❤‍🔥2🔥2👎1
Как математики видят различные вещи
😁35👍11🤓63👎2🤡1
"Роскомнадзор принимает меры по частичному ограничению работы иностранных мессенджеров WhatsApp и Telegram "для противодействия преступникам", сообщила надзорная служба.

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

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

21 октября жители юга России снова пожаловались на сбои в работе мессенджера Telegram, а также на работу WhatsApp.
https://www.rbc.ru/politics/22/10/2025/68f8b08c9a7947cd6de9b5da
🤡43👎17😁6🤬6👍3💩2🐳1🍾1
Следующее поколение разработчиков
😭65😁41🎃7🤡4💩3🥴1
Быстрый совет по Linux:

Если вам нужно создать несколько директорий сразу, не обязательно делать это поочерёдно.

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

mkdir -p ~/noscripts/{site-01,site-02}/{backup,monitoring,network}


Эта команда моментально создаёт папки для двух сайтов, причём у каждого — свои поддиректории: backup, monitoring и network.

Отличный способ сэкономить время и поддерживать упорядоченную структуру директорий.

#linux
🔥36👍73😨2🤯1
Пул подключений в backend‑разработке
(продолжение в следующем посте)
Пул подключений в backend‑разработке
(продолжение предыдущего поста)

Введение

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

Как работает пул подключений

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

Почему пул подключений необходим

→ Создание и уничтожение подключений с базой данных требует значительных ресурсов.
→ Без пулирования высокий трафик может перегрузить базу данных запросами на подключение.
→ Пул подключений обеспечивает стабильность и эффективность при пиковых нагрузках.

Преимущества пула подключений

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

Ключевые параметры пула подключений

Максимальное количество подключений → Определяет, сколько подключений может одновременно содержать пул.
Время ожидания для свободных подключений → Время, по истечении которого свободные соединения закрываются.
Срок жизни соединения → Максимальный срок существования соединения до его повторного создания.
Политика повторных попыток → Определяет, как обрабатываются неудачные соединения (повторные попытки или замена).

Распространённые инструменты и библиотеки

Node.jspg-pool для PostgreSQL, mysql2 pool для MySQL.
Java → HikariCP и Apache DBCP для управления соединениями JDBC.
Python → Пул подключений в SQLAlchemy и поддержка пула в psycopg2.
.NET → Встроенное пул подключений в ADO.NET.

Рекомендации

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

Аналогия

→ Представьте ресторан с ограниченным количеством столиков (подключений).
→ Посетители (запросы) обслуживаются, когда освобождается столик, а после ухода гостей столик повторно используется.
→ Без пулирования каждому посетителю требовалось бы каждый раз готовить новый столик — это неэффективно и медленно.
👍10👏32
Наглядно умножение матриц в нейронных сетях
Согласно внутренней утечке, Amazon Web Services уволила до 40% DevOps-инженеров, заменив их экспериментальной AI-системой автоматического управления инфраструктурой с целью снизить расходы и ускорить обслуживание облака. Новая AI-система вроде как способна автоматически исправлять ошибки IAM, восстанавливать виртуальные сети, перезапускать инстансы и даже откатывать неудачные деплои Lambda без участия человека.

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

Amazon официально не комментирует ситуацию. Но по cлухам, внутри компании идёт обсуждение — стоит ли давать ИИ слишком много контроля над критической инфраструктурой.
https://80.lv/articles/amazon-allegedly-replaced-40-of-aws-devops-workers-with-ai-days-before-crash
😁34🤡19🤮6🤪5❤‍🔥21
Компания JetBrains на днях выпустила отчёт о состоянии экосистемы разработчиков в 2025 году. В нем приняли участие 24 534 разработчика из 194 стран

Некоторые выводы

Наиболее используемый язык - Python

TypeScript демонстрирует самый впечатляющий рост в реальном использовании за последние пять лет. Rust, Go и Kotlin тоже постепенно укрепляют свои позиции, хотя их успехи не столь заметны, как у TypeScript.
А PHP, Ruby и Objective-C продолжают уверенно терять популярность.

Индекс Language Promise от JetBrains оценивает языки по трём критериям: рост, стабильность и готовность разработчиков их осваивать. Согласно этому индексу, в 2025 году наибольший потенциал роста демонстрируют TypeScript, Rust и Go, тогда как JavaScript, PHP и SQL, судя по всему, достигли стадии зрелости.

Список самых высокооплачиваемых разработчиков возглавлавила Scala — 38%, хотя этот язык является основным всего у 2% специалистов. Похоже, сказывается узкая специализация

https://devecosystem-2025.jetbrains.com/
🤝127🖕5💩2
В руководство по языку Java добавлены новые статьи:

Переменные volatile в многопоточных приложениях
https://metanit.com/java/tutorial/8.16.php

Атомарность и Atomics. Потокобезопасность без блокировок в многопоточных приложениях
https://metanit.com/java/tutorial/8.17.php

#java
👍22👾3
Рабочий процесс Docker
(подробное описание в следующем посте)
4💩43🐳2