METANIT.COM – Telegram
METANIT.COM
5.77K subscribers
1.64K photos
80 videos
9 files
979 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
БАЛАНСИРОВКА НАГРУЗКИ В ПРОЕКТИРОВАНИИ СИСТЕМ
(продолжение в следующем посте)
🔥5
БАЛАНСИРОВКА НАГРУЗКИ В ПРОЕКТИРОВАНИИ СИСТЕМ
(продолжение предыдущего поста)

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

→ ПОЧЕМУ ВАЖНА БАЛАНСИРОВКА НАГРУЗКИ

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

→ КАК РАБОТАЕТ БАЛАНСИРОВКА НАГРУЗКИ

→ Запрос клиента → Балансировщик нагрузки → Рабочий экземпляр сервера
→ Балансировщик нагрузки отслеживает состояние серверов и направляет трафик только на активные узлы

→ Если один сервер выходит из строя → Балансировщик нагрузки автоматически перенаправляет трафик на другие серверы
→ Работает с веб‑серверами, серверами приложений, микросервисами и базами данных

→ ТИПЫ БАЛАНСИРОВЩИКОВ НАГРУЗКИ

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

→ Программные балансировщики нагрузки
→ Примеры: Nginx, HAProxy, Envoy

→ Облачные балансировщики нагрузки
→ AWS ELB, Google Cloud LB, Azure Load Balancer

→ АЛГОРИТМЫ БАЛАНСИРОВКИ НАГРУЗКИ

→ Round Robin (циклический перебор)
→ Запросы распределяются по кругу в циклическом порядке

→ Least Connections (наименьшее число соединений)
→ Трафик направляется на сервер с наименьшим числом активных соединений

→ IP Hash (хеширование по IP)
→ Сервер для обработки запроса определяется по IP‑адресу клиента

→ Weighted Round Robin (циклический перебор с весами)
→ Некоторые серверы получают больше трафика в соответствии с назначенными им весами

→ Randomized Distribution (случайное распределение)
→ Запросы направляются на случайные серверы для равномерного распределения нагрузки

→ ПРОВЕРКА СОСТОЯНИЯ СЕРВЕРОВ

→ Балансировщик нагрузки регулярно проверяет:
→ Состояние сервера → Загруженность процессора → Использование памяти → Доступность сети
→ Автоматически исключает неработоспособные серверы из пула

→ ГЛОБАЛЬНАЯ И ЛОКАЛЬНАЯ БАЛАНСИРОВКА НАГРУЗКИ

→ Локальная балансировка нагрузки:
→ Распределяет трафик между серверами в пределах одного региона или дата‑центра

→ Глобальная балансировка нагрузки:
→ Направляет пользователей в ближайший или наиболее работоспособный регион
→ Используется для глобальных приложений (CDN, развёртывания в нескольких регионах)

→ БАЛАНСИРОВКА НАГРУЗКИ В МИКРОСЕРВИСАХ

→ Каждый сервис может иметь несколько экземпляров
→ Балансировщик нагрузки направляет трафик на нужный экземпляр сервиса
→ Работает совместно с API‑шлюзами и механизмами обнаружения сервисов

→ ПРЕИМУЩЕСТВА БАЛАНСИРОВКИ НАГРУЗКИ

→ Повышенная надёжность
→ Более быстрая обработка запросов
→ Отсутствие простоя при обновлении серверов
→ Способность справляться с пиковыми нагрузками
→ Поддержка автоматического масштабирования
🔥7👍32
Наиболее важные файлы Linux #linux
(описание в следующем посте)
7👍5👏2
Наиболее важные файлы Linux #linux
(описнаие к предыдущему посту)

1. /etc/passwd — содержит информацию об учётных записях пользователей (логины, UID, GID, домашний каталог и т. д.).
2. /etc/shadow — хранит зашифрованные пароли пользователей (доступен только для root).
3. /etc/group — содержит информацию о группах пользователей.
4. /etc/hosts — файл сопоставления локальных имён хостов с IP-адресами (аналог DNS для локальной системы).
5. /etc/hostname — хранит имя машины (hostname).
6. /etc/resolv.conf — содержит настройки DNS (серверы имён, домен по умолчанию).
7. /etc/fstab — описывает файловые системы, которые монтируются при загрузке системы (автоматическое монтирование).
8. /etc/crontab — файл расписания задач (задания, выполняемые по расписанию через cron).
9. /var/log/syslog или /var/log/messages — системные логи (записи о событиях в системе).
10. /var/log/auth.log — логи аутентификации (записи о попытках входа, авторизации и т. д.).
11. /var/log/dmesg — логи ядра (сообщения от ядра ОС, например, о загрузке драйверов).
12. /etc/ssh/sshd_config — конфигурационный файл SSH-сервера (настройки безопасности, порты, аутентификация).
- ~/.ssh/authorized_keys — список разрешённых SSH-ключей для входа на сервер.
13. /etc/systemd/system/ — директория для пользовательских сервисов (скрипты и настройки для управления службами через systemd).
14. /etc/profile и ~/.bashrc — файлы настройки окружения оболочки (shell), задают переменные окружения, алиасы, функции для пользователей.
15. /etc/os-release — информация о версии и дистрибутиве ОС (название, версия, ID и т. д.).
16. /etc/sudoers — файл настроек разрешений sudo (определяет, какие пользователи могут выполнять команды с привилегиями root).
13👍4👏2
Вышла новая подверсия языка программирования PHP - PHP 8.5. Основные изменения в PHP 8.5:

1. URI-расширение

* Встроенная поддержка работы с URI (URL) по стандартам RFC 3986 и WHATWG URL.
* Можно парсить, нормализовать и модифицировать URL через API расширения.

2. Оператор pipe (`|>`)

* Позволяет цепочать вызовы функций в “функциональном” стиле, передавая результат слева направо.
* Упрощает код, избавляет от вложенности и временных переменных.

3. “Clone with” — клонирование с изменением свойств

* Новый синтаксис: clone $obj with ['prop' => $newValue].
* Упрощает паттерн “with-er” (часто используется с readonly-классами).

4. Атрибут `#[\NoDiscard]`

* Этот атрибут предупреждает, если возвращаемое значение функции/метода не используется.
* Помогает избежать ошибок, когда важно обработать результат.

5. Замыкания и first-class callables в константных выражениях

* В PHP 8.5 можно использовать статические замыкания и callables в константах, атрибутах, значениях параметров и свойств.
* Расширяет возможности метапрограммирования.

6. Постоянные cURL share-дескрипторы

* Добавлена функция curl_share_init_persistent(). Дескриптор может быть переиспользован между запросами, что экономит ресурсы.

7. Новые функции для массивов

* array_first() — возвращает первый элемент массива (или null, если массив пуст).
* array_last() — возвращает последний элемент массива (или null).

8. Улучшения отладки и диагностики

* Фатальные ошибки теперь показывают backtrace (трассировку).
* Появились функции get_error_handler() и get_exception_handler(), чтобы узнать текущие обработчики ошибок и исключений.
* Новый CLI-флаг: php --ini=diff — показывает только те INI-настройки, которые отличаются от значений по умолчанию.

9. Локализация (i18n)

* Новая функция locale_is_right_to_left() и метод Locale::isRightToLeft() — проверка, является ли локаль “справа-налево” (например, арабский, иврит).
* Новый класс IntlListFormatter — форматирует списки в зависимости от локали (“яблоко, банан и груша” и т. д.).
* Функция grapheme_levenshtein() — вычисляет “расстояние Левенштейна” между строками с учётом грaфемных кластеров (для Unicode).

10. Другие улучшения синтаксиса и модели объектов

* Свойства, объявленные через конструктор (constructor property promotion), теперь могут быть final.
* Добавлен метод Closure::getCurrent() — упрощает рекурсию в анонимных функциях.
* Новые методы DOM: Dom\Element::getElementsByClassName() и Dom\Element::insertAdjacentHTML().
* Атрибут #[\DelayedTargetValidation] — позволяет подавить ошибки проверки атрибутов на этапе компиляции, если цель атрибута является некорректной.

11. Новый INI-директив

* max_memory_limit — ограничение сверху для memory_limit.
* Полезно для хостинга, контейнеров и сред с жёсткими лимитами памяти.

12. Новая константа сборки PHP

* PHP_BUILD_DATE — содержит дату сборки PHP.

## Устаревания и несовместимости (deprecations)

* Оператор обратных кавычек (backtick), как alias для shell_exec(), теперь устарел.
* Неканоничные названия приведения типов (касты), такие как (boolean), (integer), (double), (binary) — теперь deprecated.
* Настройка disable_classes в INI удалена.
* case-операторы, завершающиеся точкой с запятой (;) вместо двоеточия (:) — deprecated.
* Кастинг float/string → int: если значение не может быть корректно представлено как int, теперь появится предупреждение.


## Влияние и зачем это
8🐳4👍3
* Читаемость кода: новый pipe-оператор и helper-функции (array_first, array_last) делают код более декларативным и понятным.
* Безопасность и устойчивость: #[\NoDiscard] помогает избежать ошибок, когда результаты функции игнорируются.
* Производительность / ресурсы: возможность переиспользовать cURL share-дескрипторы экономит расходы на подключение.
* Отладка: трассировки фатальных ошибок + инструменты для работы с обработчиками ошибок/исключений улучшают дебаг.
* Локализация: новые инструменты i18n помогают создавать приложения, дружелюбные к разным локалям.
* Кодовая база и архитектура: “clone with” и final-промоция свойств способствуют более чистым паттернам “immutable-объектов”.

https://www.php.net/releases/8.5/ru.php

#php
9👍3👏3🥴3
Вышла новая версия фреймворка для создания веб-приложений Angular - Angular v21. Основные нововведения в Angular 21:

1. Signal Forms (в экспериментальном режиме)

* Появился новый способ работы с формами через @angular/forms/signals: формы теперь основаны на *Signals*.
* Это упрощает управление состоянием (значения, валидность, “грязность” полей и т.п.) по сравнению с классическими FormGroup / FormControl.
* Есть пакет compat, который помогает постепенно мигрировать существующие реактивные формы: @angular/forms/signals/compat.

2. Zoneless (без zone.js) по умолчанию

* Для новых приложений Angular 21 “zoneless” режим (без zone.js) теперь используется по умолчанию.
* Это позволяет убрать “заплатки” асинхронности, улучшает производительность, уменьшает размер бандла и делает стек-трейсы чище.
* Для приложений, которым всё ещё нужен zone.js, можно явно вернуть его с помощью провайдера provideZoneChangeDetection().

3. AI-инструменты: MCP-сервер Angular

* В CLI Angular появилось встроенное “серверное” API — MCP (Model Context Protocol). Это позволяет ИИ-ассистентам (LLM) взаимодействовать с вашим проектом: получать структуру, документацию, примеры.
* Инструменты MCP позволяют: list_projects, get_best_practices, search_documentation, find_examples, а также миграции (modernize, onpush_zoneless_migration) и учебный режим (ai_tutor).
* Это шаг к более тесной интеграции Angular-проектов с ИИ и автоматизации задач (генерация кода, рекомендации и т.п.).

4. Angular ARIA (preview)

* Добавлен новый пакет @angular/aria (доступен в режиме Developer Preview).
* Это “headless” библиотека компонентов с акцентом на доступность (accessibility): компоненты без стилей (можно стилизовать как хочется), поддерживают шаблоны ARIA.
* Поддерживаются такие паттерны: Accordion, Combobox, Grid, Listbox, Menu, Tabs, Toolbar, Tree.

5. Vitest — тестовый раннер по умолчанию

* Angular CLI теперь использует Vitest как основной тестовый фреймворк.
* Поддержка Karma/Jasmine устаревает — ожидается их удаление в следующих версиях (начиная с v22).

6. Упрощённый HttpClient

* HttpClient теперь предоставляется в root-инжекторе по умолчанию — больше не нужно вручную вызывать provideHttpClient() при базовой настройке.
* Добавлены новые опции: responseType (в стиле Fetch API) и referrerPolicy для HTTP-запросов.

7. Улучшения шаблонов и компилятора

* В шаблонах теперь поддерживаются регулярные выражения: можно писать выражения вроде {{ /\d+/.test(someValue) }} прямо в шаблоне.
* У @defer директивы теперь есть опция конфигурировать IntersectionObserver, например rootMargin, trigger и т.п.
* SimpleChangesngOnChanges) сделан generic — теперь можно указывать тип компонента, чтобы получить сильную типизацию.

8. Контейнеры стилей (encapsulation)

* Появилась экспериментальная стратегия ExperimentalIsolatedShadowDom, которая использует Shadow DOM, но “изолирует” стили компонента (чтобы они не проникали наружу и внешние стили не влияли).

9. Оптимизация сборки и инструментов разработки

* Улучшены tree-shaking и удаление неиспользуемого кода → уменьшение размера бандлов.
* Улучшения в dev-сервере: более быстрый HMR (горячая перезагрузка), лучшее кеширование и меньшее потребление памяти.
* CLI получает более удобные схемы миграции и улучшенную эргономику для совместимости с новыми паттернами (signal, zoneless и пр.).

## Влияние
👍6🍌3👏2
* Производительность: Переход к “zoneless” делает Angular быстрее, уменьшает накладные расходы, даёт более контролируемое обнаружение изменений.
* Современный подход к формам: Signal Forms упрощают разработку, особенно в реактивных сценариях с валидацией и сложной логикой.
* Доступность: Angular ARIA помогает создавать доступные интерфейсы “из коробки”, облегчая работу с экранными читателями и фокусом.
* ИИ и автоматизация: MCP-сервер создаёт новые возможности для интеграции ИИ-ассистентов: они могут “понимать” структуру вашего Angular-проекта и помогать в рефакторинге, генерации кода и изучении.
* Современные инструменты разработки: Vitest по умолчанию делает тестирование более современным и быстрым, а сборка — более оптимизированной.

https://blog.angular.dev/announcing-angular-v21-57946c34f14b

#angular
👍7🔥2🥰2
Оптимизация SQL в бэкенде
(продолжение в следующем посте)
🍓73👏1
Оптимизация SQL в бэкенде
(продолжение предыдущего поста)

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

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

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

✓ 3. Избегайте использования SELECT *
→ Выбирайте только необходимые столбцы с помощью конструкции SELECT столбец1, столбец2.
→ Это сокращает объём передаваемых данных и повышает скорость выполнения запроса.

✓ 4. Оптимизация соединений (JOIN)
→ Используйте подходящие типы соединений (INNER, LEFT, RIGHT) в зависимости от задачи.
→ Убедитесь, что столбцы, используемые в соединениях, проиндексированы.
→ Избегайте объединения слишком многих таблиц в одном запросе — при необходимости разбивайте сложную логику.

✓ 5. Эффективное использование условий WHERE
→ Применяйте фильтрацию как можно раньше, используя избирательные условия.
→ По возможности используйте индексированные столбцы в фильтрах WHERE.
→ Избегайте использования функций в WHERE (например, LOWER(name)), так как они препятствуют использованию индексов.

✓ 6. Ограничение количества возвращаемых строк
→ Используйте LIMIT или OFFSET для пагинации вместо возврата огромных наборов данных.
→ Это повышает производительность фронтенда, которому не требуется вся информация сразу.

✓ 7. Избегание проблемы N+1 запросов
→ Возникает при получении связанных данных в циклах.
→ Вместо этого используйте соединения (JOIN) или эффективные пакетные запросы.

✓ 8. Использование кэширования
→ Кэшируйте часто выполняемые запросы на чтение с помощью Redis или Memcached.
→ Это снижает нагрузку на базу данных и значительно повышает скорость работы.

✓ 9. Нормализация там, где нужно, денормализация — когда это оправдано
→ Нормализация уменьшает избыточность и повышает согласованность данных.
→ Денормализация ускоряет операции чтения при высокой нагрузке, если производительность — приоритет.

✓ 10. Оптимизация операций вставки и обновления
→ Используйте пакетные вставки вместо поочерёдной вставки строк.
→ Избегайте ненужных обновлений: проверяйте, изменились ли значения, прежде чем выполнять обновление.

✓ 11. Разделение больших таблиц
→ Разделяйте большие таблицы по дате или региону для ускорения запросов.
→ Полезно для логов, аналитики или данных временных рядов.
👍11🍓42👏2
Microsoft наконец признала, что почти все основные функции Windows 11 сломаны

Microsoft официально признала серьёзные проблемы в Windows 11, заявив, что почти все ключевые основные функции системы не работают из-за ошибок в компонентах XAML и обновлениях пакетов. Это подтверждение появилось в статье поддержки (KB5072911) после сбоев, начавшихся с обновления Patch Tuesday от июля 2025 года (KB5062553). Проблемы затрагивают оболочку системы (Shell) и влияют на версии Windows 11 24H2 и более новую 25H2, которые используют один и тот же код.

Сломанные функции:
Проблемы связаны с компонентами XAML и обновлениями пакетов MicrosoftWindows.Client.CBS_cw5n1h2txyewy, Microsoft.UI.Xaml.CBS_8wekyb3d8bbwe и MicrosoftWindows.Client.Core_cw5n1h2txyewy. Затронутые элементы оболочки включают меню "Пуск", панель задач, проводник и настройки Windows. Конкретные симптомы:
- Сбои explorer.exe;
- Сбои shelhost.exe;
- Проблемы с StartMenuExperienceHost;
- Настройки системы не запускаются молча;
- Сбои приложений при инициализации XAML-видов;
- Проводник работает, но панель задач не отображается;
- Неудачная инициализация других XAML-островов;
- Сбои ImmersiveShell.

Эти ошибки возникают при первом входе пользователя после накопительного обновления или в непостоянных установках ОС, таких как виртуальная инфраструктура настольных систем (VDI).

Microsoft поясняет: "После установки на ПК ежемесячного накопительного обновления Windows 11 версии 24H2, выпущенного в июле 2025 года или позже (KB5062553), различные приложения, такие как StartMenuExperienceHost, Поиск, Системные настройки, панель задач или Проводник, могут испытывать трудности".
При этом пользователи сталкиваются с серьёзными нарушениями в базовых функциях Windows: невозможностью доступа к меню "Пуск", панели задач, проводнику или настройкам. Это особенно заметно при входе после обновлений, в сценариях VDI, где пакеты нужно переустанавливать при каждом входе. Проблемы длятся уже четыре месяца с июля 2025 года, вызывая сбои, тихие отказы и неполную инициализацию интерфейса, что сильно затрудняет повседневную работу.

В Microsoft завявилии, что работают над исправлением, но пока предлагают обходные пути. Один из них — перезапуск службы Shell Infrastructure host (SIHost.exe) с помощью команд PowerShell для регистрации затронутых пакетов:
- Add-AppxPackage -Register -Path 'C:\Windows\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\appxmanifest.xml' -DisableDevelopmentMode;
- Add-AppxPackage -Register -Path 'C:\Windows\SystemApps\Microsoft.UI.Xaml.CBS_8wekyb3d8bbwe\appxmanifest.xml' -DisableDevelopmentMode;
- Add-AppxPackage -Register -Path 'C:\Windows\SystemApps\MicrosoftWindows.Client.Core_cw5n1h2txyewy\appxmanifest.xml' -DisableDevelopmentMode.

Второй вариант — скрипт PowerShell для входа (в формате batch-файла), который блокирует запуск проводника до установки пакетов и выполняет аналогичные команды регистрации.

https://www.neowin.net/news/microsoft-finally-admits-almost-all-major-windows-11-core-features-are-broken/
🤡35😁17❤‍🔥2🤯2🤬21💔1
8 наиболее распространённых типов кибератак
(описание в следующем посте)
❤‍🔥9🔥1👏1
8 наиболее распространённых типов кибератак
(описание предыдущего поста)

1. Phishing Attack (Фишинговая атака)
* Суть: обманные письма, сообщения или сайты для получения конфиденциальной информации.
* Механизм: злоумышленник отправляет фишинговую ссылку → пользователь открывает её → хакер собирает учётные данные → использует их.

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

3. Denial-of-Service (DoS) (Отказ в обслуживании)
* Суть: перегрузка системы или сети для нарушения их работы.
* Механизм: хакер использует бот для отправки ложного трафика на сервер → целевая система перегружается.

4. Man-in-the-Middle (MitM) (Человек посередине)
* Суть: перехват и изменение коммуникации между двумя сторонами без их ведома.
* Механизм: злоумышленник перехватывает оригинальное соединение между пользователем и веб-приложением.

5. SQL Injection (Внедрение SQL-кода)
* Суть: эксплуатация уязвимостей в запросах к базе данных для получения несанкционированного доступа.
* Механизм: хакер внедряет вредоносный SQL-запрос → сервер возвращает данные всех пользователей атакующему.

6. Cross-Site Scripting (XSS) (Межсайтовый скриптинг)
* Суть: внедрение вредоносных скриптов на веб-сайты, просматриваемые другими пользователями.
* Механизм: злоумышленник внедряет скрипт в базу данных → сервер отправляет заражённый код пользователям.

7. Zero-Day Exploits (Эксплойты нулевого дня)
* Суть: атаки, использующие неизвестные уязвимости до того, как разработчики успеют их устранить.
* Механизм: существует уязвимость → хакер её обнаруживает → запускает атаку → разработчики обнаруживают атаку, но не имеют времени на устранение.

8. DNS Spoofing (Подмена DNS)
* Суть: перенаправление DNS-запросов на вредоносные сайты для несанкционированного доступа.
* Механизм: злоумышленник внедряет поддельную DNS-запись → пользователь запрашивает реальный сайт → запрос перенаправляется на поддельный сайт.
❤‍🔥112🔥2
Вещь, которая многих бесит в Go
🔥33😁24😭7🤝73🤷‍♂2
3 типа шардирования базы данных:

* На основе диапазонов (range‑based)
* На основе хеширования (hash‑based)
* На основе арендаторов (tenant‑based)

Шардирование на основе диапазонов разделяет данные исходя из диапазонов значений ключа.

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

Шардирование на основе арендаторов предоставляет каждому арендатору собственную базу данных.
🥴53👏3🔥2
Иллюстрированная история C# и .NET с учетом последнего релиза #csharp #dotnet
24🔥2👏1
7+ основных форматов точности, используемых в ИИ:
▪️ FP32
▪️ FP16
▪️ BF16
▪️ FP8 (E4M3 / E5M2)
▪️ FP4
▪️ INT8/INT4
▪️ 2-bit (ternary/binary quantizatio / троичное/двоичное квантование)

Общая тенденция: более высокая точность для обучения, более низкая точность для вывода.
👍75🔥3🤮1🤣1
This media is not supported in your browser
VIEW IN TELEGRAM
Как работают B-tree наглядно
👍28🔥5👏2
Как работает сборщик мусора (Garbage Collector) в Java #java
(продолжение в следующем посте)
5🔥2👏1💩1