METANIT.COM – Telegram
METANIT.COM
5.77K subscribers
1.64K photos
79 videos
9 files
981 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
СТРАТЕГИИ МАСШТАБИРОВАНИЯ В ПРОЕКТИРОВАНИИ СИСТЕМ
(описание в следующем посте)
3👍3👏1
СТРАТЕГИИ МАСШТАБИРОВАНИЯ В ПРОЕКТИРОВАНИИ СИСТЕМ
(продолжение предыдущего поста)

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

1. ВЕРТИКАЛЬНОЕ МАСШТАБИРОВАНИЕ (УВЕЛИЧЕНИЕ МОЩНОСТИ)

→ Увеличение ресурсов одного сервера (процессор, оперативная память, хранилище).
→ Простота внедрения — не требует изменений кода.
→ Ограничено максимальной производительностью оборудования.
→ Применяется для небольших и средних систем до перехода на распределённое масштабирование.

*Пример:* модернизация сервера базы данных с 8 ГБ ОЗУ до 64 ГБ ОЗУ.

2. ГОРИЗОНТАЛЬНОЕ МАСШТАБИРОВАНИЕ (РАСШИРЕНИЕ)

→ Добавление новых серверов или узлов для обработки растущего трафика.
→ Обеспечивает распределение нагрузки и резервирование.
→ Широко используется в облачных и распределённых архитектурах.
→ Управляется с помощью балансировщиков нагрузки и систем обнаружения сервисов.

*Пример:* добавление новых экземпляров веб‑серверов или серверов баз данных за балансировщиком нагрузки.

3. МАСШТАБИРОВАНИЕ БАЗ ДАННЫХ

Реплики для чтения:
несколько копий базы данных только для чтения, повышающих производительность операций чтения.

Главный узел для записи:
единственный главный узел обрабатывает все операции записи для обеспечения согласованности данных.

Шардинг:
данные распределяются по нескольким базам данных (шард‑серверам) на основе идентификатора пользователя или региона.

Партиционирование:
логическое или физическое разделение больших таблиц для ускорения выполнения запросов.

4. СТРАТЕГИИ КЭШИРОВАНИЯ

→ Хранение часто запрашиваемых данных в оперативной памяти для снижения нагрузки на базу данных.

Типы кэшей:
- кэши на уровне приложения (в оперативной памяти, например, в Node.js или Java);
- распределённые кэши (например, Redis, Memcached);
- CDN‑кэши (например, Cloudflare, Akamai) для статического контента.

→ Снижают задержки и ускоряют время отклика.

5. БАЛАНСИРОВКА НАГРУЗКИ

→ Распределение входящего трафика между несколькими серверами.
→ Предотвращает перегрузку и повышает отказоустойчивость.
→ Могут использоваться алгоритмы: Round Robin, Least Connections, IP Hash.
→ Распространённые инструменты: Nginx, HAProxy, AWS ELB, Google Cloud Load Balancer.

6. АСИНХРОННАЯ ОБРАБОТКА

→ Вынесение ресурсоёмких или длительных задач в фоновые процессы.
→ Реализуется с помощью систем очередей сообщений (например, Kafka, RabbitMQ, SQS).
→ Ускоряет обработку запросов и повышает общую масштабируемость.

7. АВТОМАТИЧЕСКОЕ МАСШТАБИРОВАНИЕ

→ Автоматическая регулировка ресурсов в зависимости от спроса.
→ Реализуется через облачные сервисы (например, AWS Auto Scaling или Kubernetes Horizontal Pod Autoscaler).
→ Обеспечивает баланс между эффективностью затрат и производительностью.

8. СЕТЬ ДОСТАВКИ КОНТЕНТА (CDN)

→ Доставка статических ресурсов (изображений, CSS, JS) с географически распределённых краевых серверов.
→ Снижает задержки и нагрузку на основной сервер.
→ Повышает глобальную масштабируемость веб‑приложений.

9. ПАРТИЦИОНИРОВАНИЕ И РАСПРЕДЕЛЕНИЕ ДАННЫХ

→ Разделение больших наборов данных между узлами или регионами.
→ Снижает конфликты и повышает скорость выполнения запросов.
→ Используется в распределённых базах данных (Cassandra, MongoDB, DynamoDB).

10. МАСШТАБИРОВАНИЕ НА ОСНОВЕ СОБЫТИЙ И МИКРОСЕРВИСНАЯ АРХИТЕКТУРА

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

Некоторые рекомендации
❤‍🔥6👍32
→ Вертикальное масштабирование → быстро, но ограничено.
→ Горизонтальное масштабирование → распределённое и гибкое.
→ Кэширование + балансировка нагрузки → повышают эффективность.
→ Автоматическое масштабирование + асинхронная обработка → динамическое управление ресурсами.
→ Шардинг + репликация → обеспечивают масштабируемость данных.
❤‍🔥4👍3🔥2
Резюме ML-специалистов втрое больше, чем вакансий

Машинное обучение (machine learning, ML) закрепилось как одно из самых привлекательных направлений в IT. Рынок труда тоже расширяется, но делает это неравномерно: работодатели не поспевают за ростом числа специалистов. Так, если за год количество резюме соискателей выросло почти втрое, превысив более 5000 штук, то бизнес, в свою очередь, наращивает спрос, но осторожно и под конкретные проекты: число вакансий в годовом выражении выросло на 37% - до 920.
Основной рост обеспечивают молодые специалисты в возрасте 18–24 лет, которые приходят через образовательные треки, хакатоны, онлайн-курсы и программы переобучения. За год число таких специалистов выросло до 2600, что почти в три раза превышает показатели прошлых лет.

Однако аналитики видят в этих результатах реализацию угрозы для IT-специалистов со стороны алгоритмов, которые уже вытесняют первых с рынка

Что касается зарплатных ожиданий и рыночных предложений, то в 2024–2025 году медианное предлагаемое ML-специалистам вознаграждение (то есть показатель, равноудаленный от самого большого и самого маленького значения) выросло до 217 700 рублей против 183 300 рублей годом ранее (+18,8%). При этом медианные ожидания соискателей снизились — с 153 800 рублей до 106 100 рублей (-30,9%). Такой разрыв (более 111 000 рублей) указывает на дисбаланс, говорится в исследовании: часть специалистов занижают ожидания, чтобы повысить шансы на трудоустройство, а работодатели, напротив, демонстрируют готовность платить больше, чем рассчитывают соискатели. При этом стоит учитывать, что компании не всегда указывают уровень зарплаты в вакансии — особенно в нижнем сегменте, где условия предлагаются индивидуально или фиксируются на этапе офера.

Согласно данным вакансий работодателей, ML-специалисты должны владеть Python, SQL, PyTorch и библиотеками глубокого обучения. Среди новых требований — опыт в разработке API, работа с облачными платформами и ML-инфраструктурой (Docker, MLflow, TensorFlow Serving).

Таким образом, рынок машинного обучения в России развивается асимметрично: спрос на специалистов есть, но предложение растет быстрее.

https://www.forbes.ru/tekhnologii/549732-problema-lisnego-celoveka-rezume-ml-specialistov-vtroe-bol-se-cem-vakansij
🤔8🔥1👏1😁1🤬1😢1
В руководство по C# и .NET добавлена новая статья про Расширения типов, которые позволяют добавлять новые компоненты - методы, свойства и операторы к уже существующим типам без создания нового производного типа, перекомпиляции или иного изменения исходного типа
https://metanit.com/sharp/tutorial/3.18.php
#csharp #dotnet
👍353🔥2🥱2🖕1
Управление памятью в Linux
(продолжение в следующем посте)
5🔥1🥰1
Управление памятью в Linux
(продолжение предыдущего поста)

1. Введение.

→ Система управления памятью в Linux контролирует, как операционная система использует оперативную память (RAM), пространство подкачки (swap) и виртуальную память.
→ Ядро гарантирует, что каждый процесс получает необходимый объём памяти, сохраняя при этом стабильность и производительность системы.
→ В Linux используется система виртуальной памяти, которая предоставляет каждому процессу собственное изолированное адресное пространство.

2. Виртуальная память

→ Виртуальная память позволяет процессам работать так, будто у них есть доступ к большому непрерывному объёму памяти — даже если физическая оперативная память меньше.
→ Linux сопоставляет виртуальную память с физической с помощью таблиц страниц.
→ Обеспечивает:
 → Изоляцию между процессами;
 → Эффективное использование оперативной памяти;
 → Поддержку крупных приложений.

3. Страничная организация памяти (paging)

→ Память разделена на небольшие блоки фиксированного размера — страницы (обычно 4 КБ).
→ Ядро загружает страницы программы в оперативную память по мере необходимости.
→ Если оперативная память заполнена, неиспользованные страницы перемещаются в пространство подкачки.
→ Страничная организация повышает эффективность многозадачности.

4. Роль блока управления памятью (MMU, Memory Management Unit)

→ MMU — это аппаратный компонент, который преобразует виртуальные адреса в физические.
→ Сохраняет преобразования в кэше, называемом TLB (Translation Lookaside Buffer, буфер ассоциативной трансляции).
→ Быстродействие доступа к памяти зависит от эффективного использования MMU и TLB.

5. Распределение физической памяти

→ В Linux используются два основных распределителя памяти:
 → Система buddy (Buddy System) — выделяет большие непрерывные блоки памяти.
 → Распределитель slab (Slab Allocator) — выделяет память для объектов ядра (inodes, дескрипторы файлов).

→ Обеспечивает минимальную фрагментацию и более быстрое выделение памяти.

6. Пространство подкачки (swap)

→ Swap — это область на диске, используемая как буфер переполнения, когда физическая оперативная память заполнена.
→ Неактивные страницы перемещаются в swap.
→ Помогает системе работать стабильно, но работает значительно медленнее, чем оперативная память.

→ Команды:
 → swapon -s — просмотр информации о swap;
 → free -h — проверка использования swap.

7. Зоны памяти

→ Linux разделяет физическую память на зоны в зависимости от аппаратных ограничений:
 → ZONE_DMA — память, используемая для прямого доступа к памяти (DMA).
 → ZONE_NORMAL — обычная память, доступная ядру.
 → ZONE_HIGHMEM — верхняя память, не отображаемая напрямую ядром (в 32‑битных системах).

→ Помогает ядру распределять память в зависимости от архитектуры системы.

8. Кэширование и буферы

→ Linux использует свободную память для кэширования, чтобы повысить производительность.
→ Типы:
 → Page Cache — хранит недавно использованные файлы.
 → Buffer Cache — хранит метаданные для ускоренного доступа к диску.

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

9. OOM Killer (Out‑of‑Memory Killer, «убийца при нехватке памяти»)

→ Когда память и swap полностью использованы, Linux запускает OOM Killer.
→ Выбирает и завершает процессы, потребляющие много памяти, чтобы освободить оперативную память.
→ Предотвращает зависание системы.

10. Инструменты мониторинга памяти

→ Распространённые команды для проверки использования памяти:
 → free -h — обзор оперативной памяти и swap;
 → top — использование памяти процессами в реальном времени;
 → htop — интерактивный монитор памяти;
 → vmstat — статистика виртуальной памяти;
 → cat /proc/meminfo — подробная информация о памяти.

11. Интерфейсы памяти в /proc

→ Linux предоставляет информацию о памяти через файловую систему proc:
 → /proc/meminfo — обзор памяти;
 → /proc/<pid>/maps — структура памяти процесса;
 → /proc/<pid>/smaps — детальное использование по сегментам памяти.
8👍2💯2
→ Полезно для отладки утечек памяти и анализа распределения памяти процессами.

12. NUMA (Non‑Uniform Memory Access, неоднородный доступ к памяти)

→ На серверах с несколькими процессорами время доступа к памяти зависит от процессора.
→ Linux поддерживает распределение памяти с учётом NUMA для оптимизации производительности.
→ Гарантирует, что процессы используют память, расположенную ближе к процессору, на котором они выполняются.
6🔥1🥰1
Как с помощью Python проверить использование памяти
#python
💩20👍5🔥3👏2
This media is not supported in your browser
VIEW IN TELEGRAM
Теория графов наглядно на примере кубика-рубика
🤓32🤔176👍3🤯3😐1
AOT-компиляция приложения на C# с каждой новой версии .NET все производительнее и производительнее. Так, .NET 10 показывает снижение размера бинарника на 13,9%
С другой стороны, обычный Hello World размером в 1 Мб по сравнению с 10 Кб аналогичной программы на Си это, конечно, дико.
👍32🔥2👏1🤔1🤡1
Хабр и ЭКОПСИ провели масштабное исследование на основании опроса более 30000 айтишников и составили новый рейтинг IT-брендов работодателей.

Основные тренды: компании перестраиваются, команды меняются, новых работодателей почти нет, а конкуренция обострилась и среди специалистов, и среди компаний, рост зарплат в IT-сфере замер, повышение производительности труда (прежде всего, за счёт сокращения издержек). Из-за высокой ключевой ставки ЦБ многим закредитованным компаниям трудно поддерживать инвестпроекты и развивать новые направления. В результате за этот год мы увидели серию масштабных сокращений сотрудников. Часть компаний прекратила активный найм, другие существенно сокращают бюджеты на «нецелевые расходы».

1-ое место рейтинга заняла Авиасейлс (привлекательность — 91%, узнаваемость — 97%). Авито на 2-м (привлекательность — 88%, узнаваемость — 98%). На 3-м месте 2ГИС: ее привлекательность — 86%, узнаваемость — 97%.

Полный обзор: https://habr.com/ru/specials/965986/
🔥2🥰2👏1😁1
Rust опередил C/C++ по объёму кода, добавляемого в платформу Android

Использование Rust при разработке системных компонентов Android началось в 2020 году. В 2025 году объём нового кода на Rust в Android превысил объём добавляемого за год кода на C и C++.

Кроме того, в 2025 году впервые доля уязвимостей, вызванных ошибками при работе с памятью, оказалось меньше 20% от общего числа уязвимостей. Для сравнения в 2024 году этот показатель в Android составлял 24%, а в 2019 году - 76%. При этом средний показатель по индустрии продолжает оставаться на уровне 70%.

Также внедрение Rust положительно повлияло на скорость, продуктивность и качество разработки. Для кода на Rust зафиксировано в 4 раза меньше откатов изменений в результате выявления непредвиденных ошибок, а также снижение времени рецензирования на 25%.

https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
26🤮15👍4🔥2🤔2👎1💊1