METANIT.COM – Telegram
METANIT.COM
5.76K subscribers
1.64K photos
80 videos
9 files
979 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Rate Limit (Ограничение частоты запросов к API)
(продолжение в следующем посте)
👍7🥰2👏2🤔1
Rate Limit (Ограничение частоты запросов к API)
(продолжение предыдущего поста)

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

Почему важно ограничивать частоту запросов к API

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

Основные методы ограничения частоты запросов

1. Ограничение по фиксированному окну (Fixed Window Rate Limiting)

* Запросы учитываются в рамках фиксированного промежутка времени (например, 100 запросов в минуту).
* Простота реализации.
* Может приводить к всплескам запросов на границах окон.

2. Журнал скользящего окна (Sliding Window Log)

* Фиксирует время каждого запроса в журнале.
* Более точное сглаживание трафика.
* Повышенное потребление памяти.

3. Счётчик скользящего окна (Sliding Window Counter)

* Объединяет методы фиксированного окна и журнала.
* Обеспечивает сглаженные ограничения без значительного объёма хранения данных.
* Снижает проблемы, связанные со «всплесками» запросов.

4. Алгоритм Token Bucket

* Клиенты накапливают «токены» с фиксированной скоростью.
* Каждый запрос использует один токен.
* Позволяет контролируемые всплески запросов при соблюдении ограничений.

5. Алгоритм Leaky Bucket

* Обрабатывает запросы с постоянной фиксированной скоростью.
* Очередь хранит избыточные запросы.
* Помогает сгладить колебания трафика.

Где применяется ограничение частоты запросов

* API‑шлюзы (Kong, NGINX, AWS API Gateway).
* Обратные прокси‑серверы.
* Уровень серверного приложения.
* Узлы CDN (Cloudflare, Akamai).
* Уровень взаимодействия микросервисов.

Типичные HTTP‑ответы при ограничении частоты запросов

* 429 Too Many Requests — клиент превысил лимит.
* Заголовок Retry‑After — указывает клиенту, сколько времени нужно подождать.

Лучшие практики

* Устанавливайте лимиты в зависимости от ролей пользователей (бесплатный тариф против премиум).
* Предоставляйте чёткие сообщения об ошибках с инструкциями по повторной попытке.
* Используйте системы кэширования, такие как Redis, для счётчиков.
* Регистрируйте все нарушения лимитов для анализа.
* Избегайте чрезмерно строгих ограничений, которые затрудняют использование сервиса.
* Применяйте адаптивные лимиты для различных нагрузок.
👍9🔥4🥰2
Git. Рабочий процесс и основные команды
👍13❤‍🔥8🔥3💋3
Энтузиасты разработали сверхкомпактный дистрибутив Linux под названием Tiny Core Linux, который после установки занимает всего лишь 23 МБ. Это примерно в 1100 раз меньше объема, занимаемого только что установленной Windows 11. Схожий объем имеют фотографии, снятые на современные флагманские Android-смартфоны в высоком разрешении и без экономии качества

При этом система полноценна – у нее есть функциональный оконный интерфейс, напоминающий одновременно и Windows благодаря острым углам окон, и macOS за счет небольшой док-панели внизу экрана. Tiny Core Linux располагает даже собственным установщиком программ – он подключается к серверу и открывает доступ к десяткам приложений

Что еще более примечательно, ISO-образ Tiny Core Linux «весит» больше, нежели полностью установленная система – 25,1 МБ.

http://www.tinycorelinux.net/welcome.html
https://www.tomshardware.com/software/linux/tiny-core-linux-16-2-still-fits-a-proper-linux-desktop-into-a-23mb-download-but-it-has-grown-1mb-since-the-last-time-we-looked-at-it
👍23🆒87👀4
Стратегии индексирования баз данных в бэкенде
(продолжение в следующем посте)
😐5👍2🔥2👏1
Биты, P‑биты (вероятностные биты) и кубиты
(продолжение предыдущего поста)

### 1. Физическая природа и состояние

- Бит (классический):
- Дискретная единица информации в классических компьютерах.
- Может находиться только в одном из двух состояний: $0$ или $1$.
- Состояние строго определено (например, напряжение на транзисторе: есть — 1, нет — 0).
- Нет промежуточных значений.

- P‑bit (probabilistic bit, вероятностный бит):
- Может случайным образом переключаться между 0 и 1 под действием тепловых шумов.
- Состояние описывается вероятностью: например, P(0) = 0,7, P(1) = 0,3.
- Работает при комнатной температуре.
- Реализуется на наномагнитных элементах (stochastic magnetic tunnel junctions, sMTJ).

- Кубит (quantum bit, квантовый бит):
- Квантовый объект (электрон, фотон, ион и т. п.).
- Может находиться в суперпозиции состояний: α∣0⟩+β∣1⟩, где α и β — комплексные амплитуды (∣α∣^2 + ∣β∣^2 = 1).
- При измерении «коллапсирует» в 0 или 1 с вероятностями ∣α∣^2 и ∣β∣^2
- Требует крайне низких температур (близки к абсолютному нулю) для сохранения когерентности.

### 2. Принципы работы

- Бит:
- Логические операции (И, ИЛИ, НЕ) выполняются детерминированно.
- Вычисления — последовательные или параллельно-конвейерные.

- P‑bit:
- Использует естественную случайность физических элементов для вероятностных вычислений.
- Хорошо подходит для задач оптимизации, статистического вывода, генеративных моделей.
- Позволяет массовый параллелизм при низком энергопотреблении.

- Кубит:
- Оперирует квантовыми состояниями (суперпозиция, запутанность).
- Квантовые алгоритмы (Шора, Гровера и др.) дают экспоненциальное ускорение для некоторых задач.
- Требует коррекции ошибок из-за декогеренции.

### 3. Области применения

- Бит:
- Общие вычисления, логика, хранение данных.

- P‑бит:
- Оптимизация (например, задачи коммивояжёра).
- Генеративные модели ИИ (энергоэффективно).
- Статистический вывод.

- Кубит:
- Факторизация больших чисел (криптоанализ).
- Моделирование квантовых систем (химия, материалы).
- Поиск в неструктурированных базах данных.
- Квантовое машинное обучение.


### 4. Резюме

- **Бит** — основа классических вычислений: детерминирован, масштабируем, универсален.
- **P‑bit** — вероятностный элемент: использует случайность для энергоэффективных оптимизационных задач при комнатной температуре.
- **Кубит** — квантовый элемент: даёт суперпозицию и запутанность, но требует экстремального охлаждения и коррекции ошибок.
🤔95🔥3💯1🤣1
Сервис TIOBE опубликовал декабрьский рейтинг языков программирования. Неожиданностью стало попадание языка R в первую десятку. Ну а язык C#, судя по всему, станет языком 2025 года по версии TIOBE
Понятно, что рейтинг TIOBE - это рейтинг, высосанный из пальца, но тем не менее.
https://www.tiobe.com/tiobe-index/
👍19🤮9🤣5🤡4🔥2🤝2
Стратегии индексирования баз данных в бэкенде
(продолжение в следующем посте)
5👍2💯2
Стратегии индексирования баз данных в бэкенде
(продолжение предыдущего поста)

→ Индексирование — один из самых эффективных способов ускорить выполнение запросов к базам данных в бэкенд‑системах.
→ Грамотное индексирование сокращает время поиска, улучшает операции соединения (joins) и повышает общую производительность — без изменения логики приложения.

✓ 1. Первичные индексы
→ Автоматически создаются для первичных ключей.
→ Обеспечивают быстрый поиск по уникальным идентификаторам.
→ Всегда индексируйте поля первичного ключа для эффективного извлечения записей.

✓ 2. Вторичные индексы
→ Создаются для неключевых столбцов, часто используемых в поисках.
→ Идеальны для таких полей, как email, имя пользователя или статус.
→ Позволяют быстро фильтровать запросы без сканирования всей таблицы.

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

✓ 4. Уникальные индексы
→ Гарантируют отсутствие повторяющихся значений.
→ Полезны для email, имён пользователей или любых полей, требующих уникальности.
→ Также повышают производительность, поскольку СУБД оптимизирует проверку уникальности.

✓ 5. Полнотекстовые индексы
→ Оптимизированы для поиска фраз и ключевых слов.
→ Полезны для блогов, поиска товаров, мессенджеров.
→ Поддерживают запросы на естественном языке вроде «найти посты о проектировании бэкенда».

✓ 6. Частичные (фильтрованные) индексы
→ Индексируют лишь часть таблицы (например, активных пользователей).
→ Уменьшают размер индекса и повышают скорость, если данные имеют предсказуемые шаблоны.

✓ 7. Покрывающие индексы
→ Включают все необходимые столбцы для запроса.
→ Позволяют СУБД ответить на запрос, используя только индекс — без сканирования таблицы.
→ Идеальны для нагрузок с частыми операциями SELECT.

✓ 8. Индексирование для операций соединения (joins)
→ Всегда индексируйте внешние ключи.
→ Убедитесь, что обе стороны условий соединения проиндексированы.
→ Значительно улучшают запросы с объединением нескольких таблиц.

✓ 9. Избегайте избыточного индексирования
→ Каждый индекс увеличивает объём хранимых данных.
→ Замедляет операции записи (вставка/обновление/удаление).
→ Создавайте индексы только для реальных, регулярно повторяющихся шаблонов запросов.

✓ 10. Мониторинг производительности индексов
→ Используйте команды EXPLAIN или ANALYZE для проверки использования индексов.
→ Удаляйте неиспользуемые индексы, чтобы снизить накладные расходы.
→ Постоянно корректируйте индексирование по мере эволюции данных и запросов.
7👍4💯2
This media is not supported in your browser
VIEW IN TELEGRAM
Линус Тольвальдс об ИИ:

- «Искусственный интеллект — это, безусловно, мыльный пузырь, но он изменит то, как выполняется большинство квалифицированных работ».
- «Программирование с помощью ИИ отлично подходит для начала изучения программирования, но поддерживать такой код — ужасная задача».
- «Я большой сторонник ИИ. Но я не большой сторонник всего, что связано с ИИ. Я считаю, что рынок и маркетинг в этой сфере находятся в плачевном состоянии. Неизбежен обвал».
🔥25💯15🤝9🖕1
Компания Amazon поделилась историей перехода на Rust с Kotlin и Go

На конференции AWS re:Invent 2025 компания AWS (Amazon) объявила, что Rust стал языком программирования по умолчанию для всех проектов в области data plane (обработка данных), подчеркивая его превосходство в производительности по сравнению с другими языками. AWS уже использует Rust в своих микро-виртуальных машинах, таких как Bottlerocket и Firecracker.
Компания сделала акцент на преимуществах Rust, прежде всего на отсутствии накладных расходов на сборку мусора, которые сильно влияют на языки вроде Kotlin и Go в крупных распределенных приложениях.

CTO AWS Вернер Фогелс отметил, что база данных Aurora DSQL (распределенная PostgreSQL-совместимая СУБД) была переписана с Kotlin на Go для решения проблем с производительностью, но Rust показал еще лучшие результаты: «Код на [Rust] был в 10 раз быстрее нашей тщательно настроенной реализации на Kotlin — несмотря на отсутствие попыток его оптимизации».

В качестве примера успешной интеграции приводится пример с агента мониторига Datadog - изначально написанный на Go и запущенный как расширение на AWS Lambda, имел время холодного старта 700–800 мс, что считалось «огромной нагрузкой» для serverless-observability. Переход на Rust сократил это до 80 мс.

Кроме того, Rust обрабатывал в разы больше точек данных в секунду (PPS), а в целом код на Rust был почти в 3 раза быстрее. Стайвенберг объяснил, что Go тратил 30% времени на сборку мусора из-за частых мелких аллокаций памяти для данных observability. Хотя оптимизация Go с использованием off-heap памяти возможна, она приводит к неудобоуправляемому коду. В итоге: «Идиоматичный код на Rust дает производительность тщательно оптимизированного кода на Go».

https://devclass.com/2025/12/08/aws-shows-rust-love-at-reinvent-10-times-faster-than-kotlin-one-tenth-the-latency-of-go/
🤡1412🤔6👍4😱1🤮1
Краткая шпаргалка по разрешениям файлов в Linux
16👍8❤‍🔥5
Владимир Путин предупредил о риске потерять «все, что дорого», из-за ИИ
Президент считает, что существует угроза раскола общества — на элиту, которая «действительно думает», и тех, кто умеет только «нажимать кнопку»

«Не использовать эти инструменты — значит проиграть все, что нам дорого. Просто все проиграть, если не использовать эти возможности больших данных и все, что с этим связано. Но в то же время, если использовать это бездумно, то это тоже может привести к утрате как раз всего того, что нам дорого».

«Нам ни в коем случае нельзя потерять поколение совсем молодых наших граждан, которые вместо того, чтобы думать, будут просто нажимать кнопочку, и все. И сами не будут в состоянии решать элементарные задачи по математике, физике, химии. Да и историю знать, как следует, не будут. Вот это сложная задача. Чтобы у нас не возникла элита из двух десятых человек, которые действительно думают, которые что-то генерят, и основной массы людей, которые будут только уметь кнопку нажимать, и все», — сказал глава государства.

https://www.rbc.ru/technology_and_media/09/12/2025/6938392a9a794741ee23fbdf?from=from_main_9
👍43🤣12🤡11💩7🤔5👀32💯1🙊1
В руководство по сетевому программированию на Python добавлены материалы про Создание локального HTTP/HTTPS-сервера
https://metanit.com/python/network/2.1.php
#python
🔥21👍63🤮1
НАСТРОЙКА СЕТИ В LINUX
(продолжение в следующем посте)
4🥰1👏1
НАСТРОЙКА СЕТИ В LINUX
(продолжение предыдущего поста)

1. Введение

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

2. Просмотр сетевых интерфейсов

→ Проверить все сетевые интерфейсы:

ip link
ip addr
ifconfig (устаревший инструмент)

→ Включить или отключить интерфейс:

sudo ip link set eth0 up
sudo ip link set eth0 down

3. Назначение IP‑адресов

→ Назначить временный IP‑адрес:

sudo ip addr add 192.168.1.50/24 dev eth0

→ Удалить назначенный IP‑адрес:

sudo ip addr del 192.168.1.50/24 dev eth0

→ Просмотреть назначенные IP‑адреса:

ip a

4. Постоянная настройка IP

→ Постоянные настройки зависят от дистрибутива Linux.

Debian/Ubuntu: /etc/netplan/*.yaml

Пример:
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]


→ Применить конфигурацию:
sudo netplan apply

RHEL/CentOS/Fedora: /etc/sysconfig/network-noscripts/ifcfg-eth0

Пример:
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=1.1.1.1


→ Перезапустить сетевую службу:
sudo systemctl restart NetworkManager

Arch Linux: /etc/systemd/network/*.network

Пример:
[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8


→ Перезапустить systemd‑networkd:
sudo systemctl restart systemd-networkd

5. Настройка DNS

→ Проверить настройки DNS:
cat /etc/resolv.conf

→ Установить DNS вручную:
Добавить в /etc/resolv.conf:
nameserver 8.8.8.8
nameserver 1.1.1.1


→ С использованием NetworkManager:
sudo nmcli dev show | grep DNS

6. Использование NetworkManager (nmcli)

→ Показать устройства:
nmcli dev status

→ Подключиться к Wi‑Fi:
nmcli dev wifi connect "SSID" password "PASSWORD"

→ Установить статический IP:
nmcli con mod "Wired connection 1" ipv4.addresses 192.168.1.100/24
nmcli con mod "Wired connection 1" ipv4.gateway 192.168.1.1
nmcli con mod "Wired connection 1" ipv4.method manual
nmcli con up "Wired connection 1"

7. Настройка маршрутизации

→ Показать маршруты:
ip route

→ Добавить маршрут:
sudo ip route add 10.0.0.0/24 via 192.168.1.1

→ Удалить маршрут:
sudo ip route del 10.0.0.0/24

8. Проверка сетевых подключений

→ Проверить доступность:
ping 8.8.8.8

→ Проверить разрешение DNS:
ping http://google.com

→ Проследить сетевой путь:
traceroute http://google.com

→ Отобразить открытые порты:
ss -tulnp

→ Проверить сетевую статистику:
netstat -tulnp (устаревший инструмент)

9. Настройка брандмауэра (кратко)

UFW (Ubuntu):
→ Включить: sudo ufw enable
→ Разрешить порт: sudo ufw allow 80

Firewalld (RHEL/Fedora):
→ Разрешить сервис: sudo firewall-cmd --add-service=http --permanent
→ Перезагрузить брандмауэр: sudo firewall-cmd --reload

10. Имя хоста и файл hosts

→ Показать имя хоста:
hostname

→ Изменить имя хоста:
sudo hostnamectl set-hostname new-name

→ Редактировать файл hosts:
/etc/hosts

Пример:
127.0.0.1 localhost
192.168.1.100 myserver.local


11. Инструменты для устранения сетевых неполадок

ip → основной инструмент для работы с интерфейсами, маршрутизацией, IP‑адресами
ss → проверка сокетов
tcpdump → захват пакетов
nmap → сканирование сети и портов
dig → запрос DNS
journalctl -u NetworkManager → просмотр журналов
👍10❤‍🔥83
JetBrains закрывает Fleet — легковесную IDE (текстовые редактор аля VS Code) нового поколения, развиваемую параллельно с IntelliJ IDEA. Fleet позиционировался как лёгковесная многопрофильная IDE, а затем — как редактор с интеллектуальной поддержкой кода.
Несмотря на технический успех и влияние на другие продукты компании, Fleet не смог занять устойчивую нишу. Команда признала, что поддержка двух похожих линеек IDE лишь запутывала пользователей. Вместо этого JetBrains переориентируется на новый вектор — агентную разработку, где код пишут AI помощники.

https://blog.jetbrains.com/fleet/2025/12/the-future-of-fleet/
👎12🤮6🤷‍♂5👍3😁1