Метрики производительности системы
(продолжение предыдущего поста)
4 ключевые метрики производительности системы:
1. Queries Per Second (QPS) — Запросы в секунду (оранжевый блок):
* измеряет количество входящих запросов к системе за одну секунду;
* отражает общую нагрузку на сервер со стороны клиентов (например, количество обращений к веб-сервису);
* на схеме показан поток «Request → Server → Response» от одного клиента;
* является ключевым показателем пропускной способности системы.
2. Transactions Per Second (TPS) — Транзакции в секунду (зелёный блок):
* измеряет количество успешно завершённых транзакций (полных операций) в секунду;
* отличается от QPS тем, что учитывает не просто запросы, а именно завершённые процессы (например, запись в базу данных, обработка платежа);
* включает взаимодействие с базой данных («Request → Server → Database → Response»);
* показывает реальную эффективность обработки задач системой.
3. Concurrency — Параллелизм (одновременность) (фиолетовый блок):
* отслеживает количество активных запросов, обрабатываемых системой одновременно;
* иллюстрируется множеством клиентов, отправляющих запросы параллельно («Multiple Clients → Simultaneous active requests»);
* напрямую влияет на QPS: чем выше параллелизм, тем больше запросов система может обработать за секунду;
* критически важен для масштабируемых систем (например, веб-серверов с высокой нагрузкой).
4. Response Time (RT) — Время отклика (голубой блок):
* измеряется промежуток времени с момента отправки запроса клиентом до получения ответа;
* на схеме обозначен как «Measured elapsed time» (измеренное затраченное время);
* включает время обработки на сервере и задержки передачи данных;
* низкий RT критически важен для пользовательского опыта (например, в онлайн-играх, платёжных системах).
### Связь метрик
Ключевая формула:
QPS = Concurrency + Average RT
означает, что пропускная способность системы (QPS) зависит от двух факторов:
* высокого параллелизма (больше одновременных запросов);
* низкого среднего времени отклика (быстрее обработка каждого запроса).
Эти метрики в совокупности позволяют оценить:
* нагрузку на систему (QPS, Concurrency);
* эффективность обработки (TPS);
* скорость реакции системы (RT).
Их анализ помогает оптимизировать производительность, выявлять «узкие места» и планировать масштабирование.
(продолжение предыдущего поста)
4 ключевые метрики производительности системы:
1. Queries Per Second (QPS) — Запросы в секунду (оранжевый блок):
* измеряет количество входящих запросов к системе за одну секунду;
* отражает общую нагрузку на сервер со стороны клиентов (например, количество обращений к веб-сервису);
* на схеме показан поток «Request → Server → Response» от одного клиента;
* является ключевым показателем пропускной способности системы.
2. Transactions Per Second (TPS) — Транзакции в секунду (зелёный блок):
* измеряет количество успешно завершённых транзакций (полных операций) в секунду;
* отличается от QPS тем, что учитывает не просто запросы, а именно завершённые процессы (например, запись в базу данных, обработка платежа);
* включает взаимодействие с базой данных («Request → Server → Database → Response»);
* показывает реальную эффективность обработки задач системой.
3. Concurrency — Параллелизм (одновременность) (фиолетовый блок):
* отслеживает количество активных запросов, обрабатываемых системой одновременно;
* иллюстрируется множеством клиентов, отправляющих запросы параллельно («Multiple Clients → Simultaneous active requests»);
* напрямую влияет на QPS: чем выше параллелизм, тем больше запросов система может обработать за секунду;
* критически важен для масштабируемых систем (например, веб-серверов с высокой нагрузкой).
4. Response Time (RT) — Время отклика (голубой блок):
* измеряется промежуток времени с момента отправки запроса клиентом до получения ответа;
* на схеме обозначен как «Measured elapsed time» (измеренное затраченное время);
* включает время обработки на сервере и задержки передачи данных;
* низкий RT критически важен для пользовательского опыта (например, в онлайн-играх, платёжных системах).
### Связь метрик
Ключевая формула:
QPS = Concurrency + Average RT
означает, что пропускная способность системы (QPS) зависит от двух факторов:
* высокого параллелизма (больше одновременных запросов);
* низкого среднего времени отклика (быстрее обработка каждого запроса).
Эти метрики в совокупности позволяют оценить:
* нагрузку на систему (QPS, Concurrency);
* эффективность обработки (TPS);
* скорость реакции системы (RT).
Их анализ помогает оптимизировать производительность, выявлять «узкие места» и планировать масштабирование.
Telegram
METANIT.COM
Метрики производительности системы
(подробное описание в следующем посте)
(подробное описание в следующем посте)
👍8❤3👏1
7 шаблонов проектирования многопоточности
Многопоточность — это вычислительная модель, позволяющая одной программе (процессу) выполнять несколько задач одновременно.
Эти задачи называются потоками — лёгкими единицами выполнения, которые используют общие ресурсы процесса (пространство памяти, открытые файлы и т. д.).
Хотя многопоточность открывает огромные возможности для повышения производительности и создания отзывчивых приложений, она также порождает сложности — такие как синхронизация, взаимодействие между потоками и потенциальные условия гонки.
Шаблоны проектирования многопоточности — это повторно используемые решения, позволяющие справиться с подобными типичными проблемами.
📌 Изучим эти шаблоны.
[1.] Шаблон «Производитель‑потребитель» (Producer-Consumer)
* В этом шаблоне задействованы два типа потоков: производители, которые генерируют данные, и потребители, которые эти данные обрабатывают.
* Общая очередь выступает в роли буфера между ними.
Когда использовать?
* Когда задачи можно разделить на отдельные этапы производства и потребления, и вы хотите разграничить эти этапы для повышения параллелизма и эффективности.
[2.] Шаблон «Пул потоков»
* Поддерживает набор рабочих потоков, которые можно повторно использовать для выполнения задач.
* Позволяет избежать накладных расходов на создание и уничтожение потоков для каждой задачи.
Когда использовать?
* Когда у вас большое количество краткосрочных задач и вы хотите контролировать число потоков для более эффективного использования ресурсов и повышения производительности.
[3.] Шаблон «Фьючерсы и промисы» (Futures and Promises)
* Представляет результат асинхронной операции.
* Промис — это объект, хранящий итоговый результат, а фьючер предоставляет способ получить этот результат, когда он станет доступен.
Когда использовать?
* Когда вы работаете с длительными операциями, которые хотите выполнять параллельно, не блокируя основной поток.
[4.] Шаблон «Объект‑монитор» (Monitor Object )
* Обеспечивает механизм синхронизации доступа к общим ресурсам.
* Позволяет только одному потоку выполнять критический участок кода в каждый момент времени, предотвращая условия гонки.
Когда использовать?
* Когда нужно защитить общие данные или ресурсы от одновременного доступа и обеспечить потокобезопасность.
[5.] Шаблон «Блокировка чтения‑записи» ( Read-Write Lock)
* Позволяет нескольким потокам одновременно читать из общего ресурса, но только одному потоку записывать в него в каждый момент времени.
Когда использовать?
* Когда у вас есть общий ресурс, в котором операции чтения выполняются чаще, чем записи, и вы хотите оптимизировать параллельное чтение.
[6.] Шаблон «Барьер» (Barrier )
* Синхронизирует группу потоков, заставляя их ожидать в общей точке перед дальнейшим выполнением.
Когда использовать?
* Когда у вас есть параллельные задачи, которые должны завершить определённый этап перед переходом к следующему.
[7.] Шаблон «Активный объект» (Active Object)
* Разделяет выполнение метода и его вызов в параллельных системах.
* Включает объект со собственным потоком управления и планировщик для постановки в очередь и выполнения запросов на методы.
Когда использовать?
* Когда вы хотите инкапсулировать логику управления потоками и планирования внутри объекта, обеспечив более чистый интерфейс для параллельных операций.
Многопоточность — это вычислительная модель, позволяющая одной программе (процессу) выполнять несколько задач одновременно.
Эти задачи называются потоками — лёгкими единицами выполнения, которые используют общие ресурсы процесса (пространство памяти, открытые файлы и т. д.).
Хотя многопоточность открывает огромные возможности для повышения производительности и создания отзывчивых приложений, она также порождает сложности — такие как синхронизация, взаимодействие между потоками и потенциальные условия гонки.
Шаблоны проектирования многопоточности — это повторно используемые решения, позволяющие справиться с подобными типичными проблемами.
📌 Изучим эти шаблоны.
[1.] Шаблон «Производитель‑потребитель» (Producer-Consumer)
* В этом шаблоне задействованы два типа потоков: производители, которые генерируют данные, и потребители, которые эти данные обрабатывают.
* Общая очередь выступает в роли буфера между ними.
Когда использовать?
* Когда задачи можно разделить на отдельные этапы производства и потребления, и вы хотите разграничить эти этапы для повышения параллелизма и эффективности.
[2.] Шаблон «Пул потоков»
* Поддерживает набор рабочих потоков, которые можно повторно использовать для выполнения задач.
* Позволяет избежать накладных расходов на создание и уничтожение потоков для каждой задачи.
Когда использовать?
* Когда у вас большое количество краткосрочных задач и вы хотите контролировать число потоков для более эффективного использования ресурсов и повышения производительности.
[3.] Шаблон «Фьючерсы и промисы» (Futures and Promises)
* Представляет результат асинхронной операции.
* Промис — это объект, хранящий итоговый результат, а фьючер предоставляет способ получить этот результат, когда он станет доступен.
Когда использовать?
* Когда вы работаете с длительными операциями, которые хотите выполнять параллельно, не блокируя основной поток.
[4.] Шаблон «Объект‑монитор» (Monitor Object )
* Обеспечивает механизм синхронизации доступа к общим ресурсам.
* Позволяет только одному потоку выполнять критический участок кода в каждый момент времени, предотвращая условия гонки.
Когда использовать?
* Когда нужно защитить общие данные или ресурсы от одновременного доступа и обеспечить потокобезопасность.
[5.] Шаблон «Блокировка чтения‑записи» ( Read-Write Lock)
* Позволяет нескольким потокам одновременно читать из общего ресурса, но только одному потоку записывать в него в каждый момент времени.
Когда использовать?
* Когда у вас есть общий ресурс, в котором операции чтения выполняются чаще, чем записи, и вы хотите оптимизировать параллельное чтение.
[6.] Шаблон «Барьер» (Barrier )
* Синхронизирует группу потоков, заставляя их ожидать в общей точке перед дальнейшим выполнением.
Когда использовать?
* Когда у вас есть параллельные задачи, которые должны завершить определённый этап перед переходом к следующему.
[7.] Шаблон «Активный объект» (Active Object)
* Разделяет выполнение метода и его вызов в параллельных системах.
* Включает объект со собственным потоком управления и планировщик для постановки в очередь и выполнения запросов на методы.
Когда использовать?
* Когда вы хотите инкапсулировать логику управления потоками и планирования внутри объекта, обеспечив более чистый интерфейс для параллельных операций.
👍12❤3🤝2🤣1
This media is not supported in your browser
VIEW IN TELEGRAM
Игра "Tennis for Two", созданная в 1958 году физиком Уильямом Хигинботэмом (William Higinbotham), которую часто называют первой видеоигрой, в которой для интерактивного игрового процесса использовался осциллограф
❤🔥29😁8👍4🔥4🫡2
Выпускники Стэнфорда обнаружили, что их дипломы больше не гарантируют трудоустройство из-за ИИ
Выпускники факультета компьютерных наук Стэнфордского университета в Калифорнии столкнулись с тем, что их дипломы больше не обеспечивают трудоустройство: инструменты на базе ИИ для программирования начали опережать по эффективности начинающих специалистов.
Диплом Стэнфорда долгое время считался заветной целью для будущих IT‑специалистов, но теперь, по словам выпускников, его ценность на рынке труда заметно снизилась. Окончившие университет в последние годы выпускники признаются, что не могут найти работу. При этом ситуация на рынке изменилась стремительно: сегодня ИИ‑инструменты в ряде задач программирования превосходят большинство людей.
В результате технологическим компаниям больше не требуется такое количество начинающих разработчиков. По словам выпускников, работодатели всё чаще отдают предпочтение кандидатам с солидным резюме — тем, кто способен самостоятельно вести разработку продуктов и научные исследования. Задачи начального уровня при этом всё чаще автоматизируются с помощью ИИ, из‑за чего недавние выпускники сталкиваются с трудностями при поиске работы.
Один из бывших студентов Стэнфорда рассказал, что на факультете компьютерных наук царит подавленная атмосфера. Студенты, которым только предстоит окончить университет, уже обеспокоены перспективами трудоустройства, а выпускники прошлых лет так и не смогли реализовать ожидания, связанные с получением престижного диплома.
Похожая ситуация складывается и в других университетах Калифорнии. Издание приводит историю выпускницы Университета Лойола Мэримаунта в Лос‑Анджелесе, которая приехала учиться в США из Турции. После получения диплома она вернулась на родину, чтобы набраться опыта в стартапе, затем вновь переехала в США, но за полугода так и не смогла найти работу, подав сотни заявок.
https://www.latimes.com/business/story/2025-12-19/they-graduated-from-stanford-due-to-ai-they-cant-find-job
Выпускники факультета компьютерных наук Стэнфордского университета в Калифорнии столкнулись с тем, что их дипломы больше не обеспечивают трудоустройство: инструменты на базе ИИ для программирования начали опережать по эффективности начинающих специалистов.
Диплом Стэнфорда долгое время считался заветной целью для будущих IT‑специалистов, но теперь, по словам выпускников, его ценность на рынке труда заметно снизилась. Окончившие университет в последние годы выпускники признаются, что не могут найти работу. При этом ситуация на рынке изменилась стремительно: сегодня ИИ‑инструменты в ряде задач программирования превосходят большинство людей.
В результате технологическим компаниям больше не требуется такое количество начинающих разработчиков. По словам выпускников, работодатели всё чаще отдают предпочтение кандидатам с солидным резюме — тем, кто способен самостоятельно вести разработку продуктов и научные исследования. Задачи начального уровня при этом всё чаще автоматизируются с помощью ИИ, из‑за чего недавние выпускники сталкиваются с трудностями при поиске работы.
Один из бывших студентов Стэнфорда рассказал, что на факультете компьютерных наук царит подавленная атмосфера. Студенты, которым только предстоит окончить университет, уже обеспокоены перспективами трудоустройства, а выпускники прошлых лет так и не смогли реализовать ожидания, связанные с получением престижного диплома.
Похожая ситуация складывается и в других университетах Калифорнии. Издание приводит историю выпускницы Университета Лойола Мэримаунта в Лос‑Анджелесе, которая приехала учиться в США из Турции. После получения диплома она вернулась на родину, чтобы набраться опыта в стартапе, затем вновь переехала в США, но за полугода так и не смогла найти работу, подав сотни заявок.
https://www.latimes.com/business/story/2025-12-19/they-graduated-from-stanford-due-to-ai-they-cant-find-job
Los Angeles Times
They graduated from Stanford. Due to AI, they can't find a job
A Stanford software engineering degree used to be a golden ticket.
😢11❤2👎2😁2🥴2🤬1🌚1
Replication, Partitioning и Sharding
(продолжение предыдущего поста)
1. Replication (репликация)
- Суть: копирование данных на множество серверов. Каждый сервер хранит полную копию датасета.
- Ключевые особенности:
- обеспечивает работу системы при сбоях (если один сервер выходит из строя, другие продолжают работать);
- масштабирует трафик чтения (но не записи);
- использует модели «ведущий–ведомый» (leader–follower) или «множество ведущих» (multi–leader);
- оптимальна для нагрузок с преобладанием операций чтения (read–heavy workloads).
- Пример использования: создание дополнительных slave–серверов для снятия нагрузки с основного сервера, выполнение ресурсоёмких задач (например, аналитических отчётов) на отдельных серверах без влияния на работу других пользователей.
2. Partitioning (партиционирование)
- Суть: разделение большой таблицы на более мелкие части (партиции) внутри одного сервера базы данных. Каждая партиция хранит подмножество строк.
- Ключевые особенности:
- ускоряет запросы к большим таблицам за счёт распределения нагрузки;
- упрощает обслуживание и очистку данных (cleanup and maintenance);
- не требует добавления новых машин — работает в рамках одного сервера;
- разбивает данные по выбранным администратором критериям (например, по дате публикации на новостных сайтах).
- Пример использования: секционирование таблиц с большим объёмом данных для ускорения обработки запросов.
3. Sharding (шардирование)
- Суть: распределение данных по разным физическим машинам (шардам) на основе ключа шардинга. Связанные данные группируются и хранятся на одном сервере.
- Ключевые особенности:
- позволяет горизонтально масштабировать систему (horizontal scaling);
- масштабирует как трафик чтения, так и записи;
- требует логики маршрутизации, «осведомлённой» о шардах (shard–aware routing logic);
- используется, когда одна база данных не справляется с нагрузкой;
- ключ шардинга (например, ID пользователя) определяет, на каком сервере будут храниться данные.
- Пример использования: в социальных сетях все данные пользователя (по ключу — ID пользователя) хранятся и обрабатываются на одном сервере, что упрощает обработку и ускоряет запросы.
### Краткое резюме:
- Replication — про отказоустойчивость и масштабирование чтения через копирование полных копий данных.
- Partitioning — про ускорение работы с большими таблицами путём разделения данных внутри одного сервера.
- Sharding — про распределение данных по разным серверам для масштабирования как чтения, так и записи, подходит для крупномасштабных систем.
(продолжение предыдущего поста)
1. Replication (репликация)
- Суть: копирование данных на множество серверов. Каждый сервер хранит полную копию датасета.
- Ключевые особенности:
- обеспечивает работу системы при сбоях (если один сервер выходит из строя, другие продолжают работать);
- масштабирует трафик чтения (но не записи);
- использует модели «ведущий–ведомый» (leader–follower) или «множество ведущих» (multi–leader);
- оптимальна для нагрузок с преобладанием операций чтения (read–heavy workloads).
- Пример использования: создание дополнительных slave–серверов для снятия нагрузки с основного сервера, выполнение ресурсоёмких задач (например, аналитических отчётов) на отдельных серверах без влияния на работу других пользователей.
2. Partitioning (партиционирование)
- Суть: разделение большой таблицы на более мелкие части (партиции) внутри одного сервера базы данных. Каждая партиция хранит подмножество строк.
- Ключевые особенности:
- ускоряет запросы к большим таблицам за счёт распределения нагрузки;
- упрощает обслуживание и очистку данных (cleanup and maintenance);
- не требует добавления новых машин — работает в рамках одного сервера;
- разбивает данные по выбранным администратором критериям (например, по дате публикации на новостных сайтах).
- Пример использования: секционирование таблиц с большим объёмом данных для ускорения обработки запросов.
3. Sharding (шардирование)
- Суть: распределение данных по разным физическим машинам (шардам) на основе ключа шардинга. Связанные данные группируются и хранятся на одном сервере.
- Ключевые особенности:
- позволяет горизонтально масштабировать систему (horizontal scaling);
- масштабирует как трафик чтения, так и записи;
- требует логики маршрутизации, «осведомлённой» о шардах (shard–aware routing logic);
- используется, когда одна база данных не справляется с нагрузкой;
- ключ шардинга (например, ID пользователя) определяет, на каком сервере будут храниться данные.
- Пример использования: в социальных сетях все данные пользователя (по ключу — ID пользователя) хранятся и обрабатываются на одном сервере, что упрощает обработку и ускоряет запросы.
### Краткое резюме:
- Replication — про отказоустойчивость и масштабирование чтения через копирование полных копий данных.
- Partitioning — про ускорение работы с большими таблицами путём разделения данных внутри одного сервера.
- Sharding — про распределение данных по разным серверам для масштабирования как чтения, так и записи, подходит для крупномасштабных систем.
Telegram
METANIT.COM
Replication, Partitioning и Sharding
(продолжение в следующем посте)
(продолжение в следующем посте)
❤3👍3🤝3
Вышла новая версия популярного отладчика - GDB 17.
GDB поддерживает отладку на уровне исходников широкого спектра языков (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust и т.д.) на различных аппаратных (i386, amd64, ARM, RISC-V, LoongArch и т.д.) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS).
Основные изменения направлены на повышение безопасности, удобства отладки и интеграции с современными технологиями. Ключевые нововведения в GDB 17:
1. Поддержка теневого стека (CET Shadow Stack) для x86-64. Это позволяет отлаживать программы, использующие аппаратную защиту от переполнения буфера в стеке, появившуюся в ядре Linux 6.6. Теневой стек сохраняет адреса возврата функций отдельно от основного стека, что затрудняет эксплуатацию эксплоитов.
2. Отладка программ с Guarded Control Stacks (GCS) на AArch64. GCS предоставляет аппаратную защиту адресов возврата из функций, блокируя эксплоиты, использующие методы возвратно-ориентированного программирования (ROP).
3. Полная поддержка записи выполнения программы для RISC-V RV64GC. Это позволяет воспроизводить участки кода в обратном направлении для отладки.
4. Улучшения в команде `info threads`. Добавлены опции
5. Расширения в команде `info sharedlibrary`. На платформах Linux и FreeBSD теперь показываются адреса для всего диапазона памяти, выделенного разделяемой библиотеке, а не только базовый адрес и адреса секции
6. Поддержка снимков состояния (checkpoint) в Linux. Позволяет использовать снимки при одновременной отладке нескольких процессов.
7. Улучшения в Python API. Добавлены новые классы
8. Улучшения в протоколе DAP (Debugger Adapter Protocol). Реализована поддержка запросов
9. Новые переменные. Добавлены
10. Опции для отключения подсистем. Добавлены
11. Прекращение поддержки UST в gdbserver. UST (static tracepoint) больше не поддерживается.
https://www.sourceware.org/gdb/
https://www.mail-archive.com/info-gnu@gnu.org/msg03477.html
GDB поддерживает отладку на уровне исходников широкого спектра языков (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust и т.д.) на различных аппаратных (i386, amd64, ARM, RISC-V, LoongArch и т.д.) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS).
Основные изменения направлены на повышение безопасности, удобства отладки и интеграции с современными технологиями. Ключевые нововведения в GDB 17:
1. Поддержка теневого стека (CET Shadow Stack) для x86-64. Это позволяет отлаживать программы, использующие аппаратную защиту от переполнения буфера в стеке, появившуюся в ядре Linux 6.6. Теневой стек сохраняет адреса возврата функций отдельно от основного стека, что затрудняет эксплуатацию эксплоитов.
2. Отладка программ с Guarded Control Stacks (GCS) на AArch64. GCS предоставляет аппаратную защиту адресов возврата из функций, блокируя эксплоиты, использующие методы возвратно-ориентированного программирования (ROP).
3. Полная поддержка записи выполнения программы для RISC-V RV64GC. Это позволяет воспроизводить участки кода в обратном направлении для отладки.
4. Улучшения в команде `info threads`. Добавлены опции
-stopped и -running для отображения только остановленных или выполняемых потоков.5. Расширения в команде `info sharedlibrary`. На платформах Linux и FreeBSD теперь показываются адреса для всего диапазона памяти, выделенного разделяемой библиотеке, а не только базовый адрес и адреса секции
.text.6. Поддержка снимков состояния (checkpoint) в Linux. Позволяет использовать снимки при одновременной отладке нескольких процессов.
7. Улучшения в Python API. Добавлены новые классы
gdb.Color и gdb.ParameterPrefix, атрибут gdb.Value.is_unavailable, функция gdb.warning(). Прекращена поддержка Python версий ниже 3.4. 8. Улучшения в протоколе DAP (Debugger Adapter Protocol). Реализована поддержка запросов
completions и добавлена опция --binary-output для отключения преобразования символов перевода строки на Windows.9. Новые переменные. Добавлены
_colorsupport (список цветовых пространств, поддерживаемых терминалом), linker_namespace_count и _linker_namespace (список активных пространств имён компоновщика).10. Опции для отключения подсистем. Добавлены
--disable-gdb-compile, --disable-gdb-dwarf-support и --disable-gdb-mdebug-support для отключения определённых функций.11. Прекращение поддержки UST в gdbserver. UST (static tracepoint) больше не поддерживается.
https://www.sourceware.org/gdb/
https://www.mail-archive.com/info-gnu@gnu.org/msg03477.html
❤7🔥4🥰3🤮1
В руководство по языку Java добавил главу про Взаимодействие с нативным кодом с помощью JNI и Foreign Functions и Memory API
https://metanit.com/java/tutorial/16.1.php
#java
https://metanit.com/java/tutorial/16.1.php
#java
🔥13👍5👏1
Реализация кэширования на бэкенде
(продолжение предыдущего поста)
→ Кэширование — это процесс хранения часто используемых данных в быстром слое хранения для снижения задержки и нагрузки на бэкенд.
→ Оно повышает производительность, масштабируемость и удобство использования систем бэкенда с высокой нагрузкой.
✓ Почему кэширование важно
→ Сокращает количество повторяющихся запросов к базе данных.
→ Ускоряет время ответа API.
→ Снижает нагрузку на сервер и базу данных.
→ Повышает масштабируемость системы.
✓ Распространённые уровни кэширования
→ Клиентский кэш → кэш браузера, кэш мобильного приложения.
→ Кэш CDN → хранит статические ресурсы ближе к пользователям.
→ Кэш приложения → кэширование в оперативной памяти внутри сервисов бэкенда.
→ Кэш базы данных → кэширование результатов запросов.
✓ Популярные технологии кэширования
→ Redis → хранилище данных в оперативной памяти, поддерживает сохранение данных и сложные структуры данных.
→ Memcached → простое и высокоскоростное кэширование по принципу «ключ‑значение».
→ Кэши CDN → Cloudflare, CloudFront для статического контента.
✓ Стратегии кэширования
→ Cache‑Aside (отложенная загрузка)
✓ Приложение сначала проверяет кэш.
✓ При отсутствии данных в кэше извлекает их из базы данных и сохраняет в кэш.
→ Write‑Through Cache (запись через кэш)
✓ Данные записываются в кэш и базу данных одновременно.
✓ Обеспечивает согласованность данных.
→ Write‑Behind (Write‑Back) Cache (отложенная запись)
✓ Записи сначала попадают в кэш.
✓ База данных обновляется асинхронно.
→ Read‑Through Cache (чтение через кэш)
✓ Кэш автоматически загружает данные из базы данных при отсутствии в кэше.
✓ Что стоит кэшировать
→ Часто используемые данные.
→ Запросы с преобладанием операций чтения.
→ Конфигурационные данные.
→ Данные сессии.
→ Вычисленные или агрегированные результаты.
✓ Стратегии аннулирования кэша
→ Временное устаревание (TTL) → данные автоматически удаляются по истечении заданного времени.
→ Аннулирование на основе событий → кэш очищается при наступлении определённого события.
→ Ручная очистка кэша → принудительное удаление данных из кэша.
→ Версионированные ключи кэша → использование ключей с версиями для управления актуальностью данных.
✓ Типичные проблемы
→ Использование устаревших данных.
→ Несогласованность кэша.
→ «Штурм кэша» (*cache stampede*) при высокой нагрузке.
→ Ограничения по объёму памяти.
✓ Лучшие практики
→ Всегда указывайте TTL для кэшированных данных.
→ Избегайте кэширования сильно изменчивых данных.
→ Тщательно подбирайте ключи кэша.
→ Отслеживайте соотношение попаданий и промахов в кэш.
→ Комбинируйте кэширование с индексированием базы данных.
(продолжение предыдущего поста)
→ Кэширование — это процесс хранения часто используемых данных в быстром слое хранения для снижения задержки и нагрузки на бэкенд.
→ Оно повышает производительность, масштабируемость и удобство использования систем бэкенда с высокой нагрузкой.
✓ Почему кэширование важно
→ Сокращает количество повторяющихся запросов к базе данных.
→ Ускоряет время ответа API.
→ Снижает нагрузку на сервер и базу данных.
→ Повышает масштабируемость системы.
✓ Распространённые уровни кэширования
→ Клиентский кэш → кэш браузера, кэш мобильного приложения.
→ Кэш CDN → хранит статические ресурсы ближе к пользователям.
→ Кэш приложения → кэширование в оперативной памяти внутри сервисов бэкенда.
→ Кэш базы данных → кэширование результатов запросов.
✓ Популярные технологии кэширования
→ Redis → хранилище данных в оперативной памяти, поддерживает сохранение данных и сложные структуры данных.
→ Memcached → простое и высокоскоростное кэширование по принципу «ключ‑значение».
→ Кэши CDN → Cloudflare, CloudFront для статического контента.
✓ Стратегии кэширования
→ Cache‑Aside (отложенная загрузка)
✓ Приложение сначала проверяет кэш.
✓ При отсутствии данных в кэше извлекает их из базы данных и сохраняет в кэш.
→ Write‑Through Cache (запись через кэш)
✓ Данные записываются в кэш и базу данных одновременно.
✓ Обеспечивает согласованность данных.
→ Write‑Behind (Write‑Back) Cache (отложенная запись)
✓ Записи сначала попадают в кэш.
✓ База данных обновляется асинхронно.
→ Read‑Through Cache (чтение через кэш)
✓ Кэш автоматически загружает данные из базы данных при отсутствии в кэше.
✓ Что стоит кэшировать
→ Часто используемые данные.
→ Запросы с преобладанием операций чтения.
→ Конфигурационные данные.
→ Данные сессии.
→ Вычисленные или агрегированные результаты.
✓ Стратегии аннулирования кэша
→ Временное устаревание (TTL) → данные автоматически удаляются по истечении заданного времени.
→ Аннулирование на основе событий → кэш очищается при наступлении определённого события.
→ Ручная очистка кэша → принудительное удаление данных из кэша.
→ Версионированные ключи кэша → использование ключей с версиями для управления актуальностью данных.
✓ Типичные проблемы
→ Использование устаревших данных.
→ Несогласованность кэша.
→ «Штурм кэша» (*cache stampede*) при высокой нагрузке.
→ Ограничения по объёму памяти.
✓ Лучшие практики
→ Всегда указывайте TTL для кэшированных данных.
→ Избегайте кэширования сильно изменчивых данных.
→ Тщательно подбирайте ключи кэша.
→ Отслеживайте соотношение попаданий и промахов в кэш.
→ Комбинируйте кэширование с индексированием базы данных.
Telegram
METANIT.COM
Реализация кэширования на бэкенде
(продолжение в следующем посте)
(продолжение в следующем посте)
👍7❤3💯2
Как работает уязвимость Man in the Middle Attack (MitM)
(продолжение предыдущего поста)
Man in the Middle Attack (MitM) — это сетевая атака, при которой злоумышленник встраивается в канал связи между двумя участниками (например, пользователем и сервером), перехватывает и, при необходимости, изменяет передаваемые данные. Жертвы при этом не подозревают о вмешательстве.
#### Этапы работы MitM-атаки:
1. Перехват трафика (например, через Wi-Fi eavesdropping):
* Злоумышленник подключается к незащищённой или поддельной Wi-Fi-точке доступа («Evil Twin»), имитирующей легитимную сеть.
* Устройства жертв автоматически подключаются к этой точке, и весь их трафик проходит через злоумышленника.
* Пример на схеме: стрелка от ноутбука к роутеру с подписью «Wifi eavesdropping».
2. Подмена HTTPS-соединения (HTTPS spoofing):
* Если трафик защищён протоколом HTTPS, атакующий пытается обойти шифрование.
* Используются техники вроде SSL Stripping — понижение протокола с HTTPS до незащищённого HTTP.
* Либо создаётся ложное TLS-соединение, чтобы данные стали читаемыми.
* На схеме это отражено стрелкой от глобуса (интернета) с подписью «HTTPS spoofing».
3. Подмена DNS-запросов (DNS spoofing):
* Злоумышленник отравляет кэш DNS или подменяет DNS-серверы.
* В результате жертва перенаправляется на фальшивый сайт, который выглядит как легитимный.
* На схеме: стрелка от глобуса к браузеру с подписью «DNS spoofing».
4. Перехват и анализ данных:
* Получив доступ к каналу связи, злоумышленник прослушивает трафик — извлекает логины, пароли, токены, cookies и другую конфиденциальную информацию.
* Данные могут передаваться в открытом виде, если отсутствует шифрование (например, из-за понижения протокола).
5. Манипуляция данными:
* Атакующий может изменять содержимое запросов и ответов:
* подменять страницы авторизации;
* внедрять вредоносный код (веб-инъекции);
* перенаправлять пользователя на фишинговые ресурсы.
* Жертва при этом не замечает подмены, так как всё выглядит легитимно.
#### Уязвимости, которые использует MitM:
* Отсутствие шифрования (незащищённые Wi-Fi-сети, HTTP вместо HTTPS).
* Слабая аутентификация конечных точек (например, отсутствие двухфакторной аутентификации).
* Ненадёжные DNS-серверы (без поддержки DNSSEC).
* Уязвимости в сетевых протоколах (ARP, TLS, Wi-Fi-аутентификация).
#### Меры защиты (указаны на схеме зелёными галочками):
1. Использование протоколов шифрования (HTTPS, VPN, TLS) — защищает трафик от перехвата.
2. Сильная аутентификация конечных точек (двухфакторная аутентификация, сертификаты) — усложняет подмену участников.
3. Регулярный аудит безопасности и мониторинг сети — позволяет обнаружить подозрительную активность (например, аномальные DNS-запросы).
Итог: MitM-атака опасна тем, что проходит незаметно для жертв и может привести к утечке конфиденциальных данных, компрометации учётных записей и финансовым потерям. Защита требует комплексного подхода: шифрования, аутентификации и постоянного мониторинга сети.
(продолжение предыдущего поста)
Man in the Middle Attack (MitM) — это сетевая атака, при которой злоумышленник встраивается в канал связи между двумя участниками (например, пользователем и сервером), перехватывает и, при необходимости, изменяет передаваемые данные. Жертвы при этом не подозревают о вмешательстве.
#### Этапы работы MitM-атаки:
1. Перехват трафика (например, через Wi-Fi eavesdropping):
* Злоумышленник подключается к незащищённой или поддельной Wi-Fi-точке доступа («Evil Twin»), имитирующей легитимную сеть.
* Устройства жертв автоматически подключаются к этой точке, и весь их трафик проходит через злоумышленника.
* Пример на схеме: стрелка от ноутбука к роутеру с подписью «Wifi eavesdropping».
2. Подмена HTTPS-соединения (HTTPS spoofing):
* Если трафик защищён протоколом HTTPS, атакующий пытается обойти шифрование.
* Используются техники вроде SSL Stripping — понижение протокола с HTTPS до незащищённого HTTP.
* Либо создаётся ложное TLS-соединение, чтобы данные стали читаемыми.
* На схеме это отражено стрелкой от глобуса (интернета) с подписью «HTTPS spoofing».
3. Подмена DNS-запросов (DNS spoofing):
* Злоумышленник отравляет кэш DNS или подменяет DNS-серверы.
* В результате жертва перенаправляется на фальшивый сайт, который выглядит как легитимный.
* На схеме: стрелка от глобуса к браузеру с подписью «DNS spoofing».
4. Перехват и анализ данных:
* Получив доступ к каналу связи, злоумышленник прослушивает трафик — извлекает логины, пароли, токены, cookies и другую конфиденциальную информацию.
* Данные могут передаваться в открытом виде, если отсутствует шифрование (например, из-за понижения протокола).
5. Манипуляция данными:
* Атакующий может изменять содержимое запросов и ответов:
* подменять страницы авторизации;
* внедрять вредоносный код (веб-инъекции);
* перенаправлять пользователя на фишинговые ресурсы.
* Жертва при этом не замечает подмены, так как всё выглядит легитимно.
#### Уязвимости, которые использует MitM:
* Отсутствие шифрования (незащищённые Wi-Fi-сети, HTTP вместо HTTPS).
* Слабая аутентификация конечных точек (например, отсутствие двухфакторной аутентификации).
* Ненадёжные DNS-серверы (без поддержки DNSSEC).
* Уязвимости в сетевых протоколах (ARP, TLS, Wi-Fi-аутентификация).
#### Меры защиты (указаны на схеме зелёными галочками):
1. Использование протоколов шифрования (HTTPS, VPN, TLS) — защищает трафик от перехвата.
2. Сильная аутентификация конечных точек (двухфакторная аутентификация, сертификаты) — усложняет подмену участников.
3. Регулярный аудит безопасности и мониторинг сети — позволяет обнаружить подозрительную активность (например, аномальные DNS-запросы).
Итог: MitM-атака опасна тем, что проходит незаметно для жертв и может привести к утечке конфиденциальных данных, компрометации учётных записей и финансовым потерям. Защита требует комплексного подхода: шифрования, аутентификации и постоянного мониторинга сети.
Telegram
METANIT.COM
Как работает уязвимость Man in the Middle Attack (MitM)
(продолжение в следующем посте)
(продолжение в следующем посте)
👍6🔥4❤2
Microsoft планирует к 2030 году исключить весь код на C и C++ из основных баз
Microsoft планирует модернизировать свои крупнейшие кодовые базы и к концу десятилетия полностью исключить весь код на C/C++, заменив его на Rust.
«Моя цель — к 2030 году исключить из кода Microsoft каждую строку на C и C++. Наша стратегия заключается в объединении ИИ и алгоритмов для переписывания крупнейших кодовых баз Microsoft. Наша путеводная звезда — “1 инженер, 1 месяц, 1 миллион строк кода”. Для выполнения этой ранее невообразимой задачи мы создали мощную инфраструктуру обработки кода. Наша алгоритмическая инфраструктура создает масштабируемый граф над исходным кодом в больших масштабах. Затем инфраструктура обработки ИИ позволяет нам применять агентов ИИ, управляемых алгоритмами, для внесения изменений в код в больших масштабах. Ядро этой инфраструктуры уже работает над такими задачами, как понимание кода», — отметил ведущий инженер Microsoft Гален Хант в посте на LinkedIn.
https://www.thurrott.com/dev/330980/microsoft-to-replace-all-c-c-code-with-rust-by-2030
Microsoft планирует модернизировать свои крупнейшие кодовые базы и к концу десятилетия полностью исключить весь код на C/C++, заменив его на Rust.
«Моя цель — к 2030 году исключить из кода Microsoft каждую строку на C и C++. Наша стратегия заключается в объединении ИИ и алгоритмов для переписывания крупнейших кодовых баз Microsoft. Наша путеводная звезда — “1 инженер, 1 месяц, 1 миллион строк кода”. Для выполнения этой ранее невообразимой задачи мы создали мощную инфраструктуру обработки кода. Наша алгоритмическая инфраструктура создает масштабируемый граф над исходным кодом в больших масштабах. Затем инфраструктура обработки ИИ позволяет нам применять агентов ИИ, управляемых алгоритмами, для внесения изменений в код в больших масштабах. Ядро этой инфраструктуры уже работает над такими задачами, как понимание кода», — отметил ведущий инженер Microsoft Гален Хант в посте на LinkedIn.
https://www.thurrott.com/dev/330980/microsoft-to-replace-all-c-c-code-with-rust-by-2030
Thurrott.com
Microsoft to Replace All C/C++ Code With Rust by 2030
Microsoft is taking an impressive step in modernizing its biggest codebases and will eliminate all C/C++ code by the end of the decade.
🤣32🖕17🤡8👍6🤯6😭2👎1🔥1🌭1
Минцифры РФ хочет ввести единый идентификатор пользователя для всех интернет‑платформ
Минцифры введет единый идентификатор пользователя для всех цифровых платформ, чтобы точнее считать аудиторию. Об этом рассказала заместитель главы Минцифры России Бэлла Черкесова на заседании Общественного совета при министерстве.
Замминистра отметила, что идет работа по улучшению подходов к медиаизмерениям через способы унифицирования данных. По ее словам, сейчас совместно с отраслью идут обсуждения о том, как повысить прозрачность этой информации. Например, к диалогу уже присоединились российские онлайн-кинотеатры.
В пресс-службе Минцифры рассказали, что данные о просмотрах и активности пользователей онлайн-кинотеатров и соцсетей помогают оценить популярность контента. Для сбора этой статистики интернет-ресурсы из реестра Роскомнадзора передают компании Mediascope - измерителю ТВ и онлайн-аудитории - обезличенные данные в зашифрованном виде.
"Никто никогда не узнает, что смотрел конкретный пользователь. Данные передаются компании Mediascope в уже обезличенном виде. То есть обезличивает их не измеритель аудитории, а интернет-ресурсы", - рассказали в ведомстве.
Минцифры предлагает обновить состав передаваемых данных и изменить подход к формированию идентификатора пользователя (ID пользователя). Сейчас документ обсуждается с отраслью, бизнесом и заинтересованными ведомствами.
Важно, что ID пользователя будет неизменным. Сейчас один и тот же человек, который заходит на страницу с разных устройств и на разных площадках, учитывается как несколько уникальных пользователей, что искажает статистику. Предлагается привязывать ID к номеру телефона, а после этого обезличивать данные зрителя. Обезличивание и шифрование, как и сейчас, будут осуществляться интернет-ресурсами перед передачей данных.
https://rg.ru/2025/12/22/v-rossii-poiavitsia-edinyj-identifikator-polzovatelia-v-internete.html
Минцифры введет единый идентификатор пользователя для всех цифровых платформ, чтобы точнее считать аудиторию. Об этом рассказала заместитель главы Минцифры России Бэлла Черкесова на заседании Общественного совета при министерстве.
Замминистра отметила, что идет работа по улучшению подходов к медиаизмерениям через способы унифицирования данных. По ее словам, сейчас совместно с отраслью идут обсуждения о том, как повысить прозрачность этой информации. Например, к диалогу уже присоединились российские онлайн-кинотеатры.
В пресс-службе Минцифры рассказали, что данные о просмотрах и активности пользователей онлайн-кинотеатров и соцсетей помогают оценить популярность контента. Для сбора этой статистики интернет-ресурсы из реестра Роскомнадзора передают компании Mediascope - измерителю ТВ и онлайн-аудитории - обезличенные данные в зашифрованном виде.
"Никто никогда не узнает, что смотрел конкретный пользователь. Данные передаются компании Mediascope в уже обезличенном виде. То есть обезличивает их не измеритель аудитории, а интернет-ресурсы", - рассказали в ведомстве.
Минцифры предлагает обновить состав передаваемых данных и изменить подход к формированию идентификатора пользователя (ID пользователя). Сейчас документ обсуждается с отраслью, бизнесом и заинтересованными ведомствами.
Важно, что ID пользователя будет неизменным. Сейчас один и тот же человек, который заходит на страницу с разных устройств и на разных площадках, учитывается как несколько уникальных пользователей, что искажает статистику. Предлагается привязывать ID к номеру телефона, а после этого обезличивать данные зрителя. Обезличивание и шифрование, как и сейчас, будут осуществляться интернет-ресурсами перед передачей данных.
https://rg.ru/2025/12/22/v-rossii-poiavitsia-edinyj-identifikator-polzovatelia-v-internete.html
Российская газета
Один ID на все. Зачем Минцифры хочет ввести единый идентификатор пользователя во всех интернет-сервисах
Минцифры введет единый идентификатор пользователя для всех цифровых платформ, чтобы точнее считать аудиторию. Об этом рассказала заместитель главы Минцифры России Бэлла Черкесова на заседании Общественного совета при министерстве.
🤬26🤡16👌2🌭2🖕2❤1🤯1
Принципы ACID
(продолжение предыдущего поста)
ACID — это набор свойств, обеспечивающих надёжность и целостность данных при обработке транзакций в системах управления базами данных (СУБД). Аббревиатура включает четыре ключевых принципа: Atomicity (атомарность), Consistency (согласованность), Isolation (изолированность) и Durability (долговечность).
Соблюдение принципов ACID гарантирует надёжность, целостность и доступность данных в СУБД, что критически важно для финансовых, медицинских и других транзакционных систем.
1. Atomicity (Атомарность)
- Суть: каждая транзакция — единый неделимый блок операций, который либо выполняется полностью, либо не выполняется вовсе.
- Пример: при переводе денег с одного счёта на другой все шаги (проверка баланса, списание средств, зачисление) либо завершаются, либо отменяются, если что-то пошло не так.
- Механизм: СУБД использует логирование и откат транзакций для поддержания атомарности.
2. Consistency (Согласованность)
- Суть: каждая транзакция должна соблюдать правила и ограничения базы данных, поддерживая её целостность. Благодаря чему обеспечивается корректное состояние данных после транзакции.
- Пример: если в базе данных есть связь «клиент — заказ», транзакция не сможет создать заказ для несуществующего клиента.
- Механизм: ограничения целостности (уникальность, ссылочная целостность) гарантируют согласованность.
3. Isolation (Изолированность)
- Суть: параллельные транзакции выполняются независимо друг от друга, их промежуточные результаты невидимы до завершения.
- Пример: если два пользователя одновременно обновляют одну запись, изменения одного не повлияют на другого до фиксации транзакции.
- Механизм: СУБД использует блокировки и уровни изоляции (например, Serializable) для предотвращения конфликтов.
4. Durability (Долговечность)
- Суть: результаты завершённых транзакций сохраняются в энергонезависимой памяти и не теряются даже при сбоях системы. Данные остаются сохранёнными, несмотря на возможные ошибки.
- Пример: после подтверждения покупки в интернет-магазине данные о заказе останутся в базе, даже если произойдёт сбой сервера.
- Механизм: записи транзакций фиксируются в журнале (log) и переносятся в постоянное хранилище.
(продолжение предыдущего поста)
ACID — это набор свойств, обеспечивающих надёжность и целостность данных при обработке транзакций в системах управления базами данных (СУБД). Аббревиатура включает четыре ключевых принципа: Atomicity (атомарность), Consistency (согласованность), Isolation (изолированность) и Durability (долговечность).
Соблюдение принципов ACID гарантирует надёжность, целостность и доступность данных в СУБД, что критически важно для финансовых, медицинских и других транзакционных систем.
1. Atomicity (Атомарность)
- Суть: каждая транзакция — единый неделимый блок операций, который либо выполняется полностью, либо не выполняется вовсе.
- Пример: при переводе денег с одного счёта на другой все шаги (проверка баланса, списание средств, зачисление) либо завершаются, либо отменяются, если что-то пошло не так.
- Механизм: СУБД использует логирование и откат транзакций для поддержания атомарности.
2. Consistency (Согласованность)
- Суть: каждая транзакция должна соблюдать правила и ограничения базы данных, поддерживая её целостность. Благодаря чему обеспечивается корректное состояние данных после транзакции.
- Пример: если в базе данных есть связь «клиент — заказ», транзакция не сможет создать заказ для несуществующего клиента.
- Механизм: ограничения целостности (уникальность, ссылочная целостность) гарантируют согласованность.
3. Isolation (Изолированность)
- Суть: параллельные транзакции выполняются независимо друг от друга, их промежуточные результаты невидимы до завершения.
- Пример: если два пользователя одновременно обновляют одну запись, изменения одного не повлияют на другого до фиксации транзакции.
- Механизм: СУБД использует блокировки и уровни изоляции (например, Serializable) для предотвращения конфликтов.
4. Durability (Долговечность)
- Суть: результаты завершённых транзакций сохраняются в энергонезависимой памяти и не теряются даже при сбоях системы. Данные остаются сохранёнными, несмотря на возможные ошибки.
- Пример: после подтверждения покупки в интернет-магазине данные о заказе останутся в базе, даже если произойдёт сбой сервера.
- Механизм: записи транзакций фиксируются в журнале (log) и переносятся в постоянное хранилище.
Telegram
METANIT.COM
Принципы ACID
(продолжение в следующем посте)
(продолжение в следующем посте)
👍7🔥5🥰1🗿1
Работа с Cron
(продолжение предыдущего поста)
1. Что такое Cron и Crontab?
Cron — это планировщик задач в Linux, который автоматически выполняет скрипты или команды по расписанию. Crontab — это файл с расписанием задач (таблицы заданий), доступный каждому пользователю системы.
Cron позволяет автоматизировать выполнение задач с высокой гибкостью: от ежеминутных проверок до ежегодных операций. Главное — правильно настроить расписание с помощью синтаксиса и операторов, а также использовать удобные макросы для стандартных интервалов.
2. Синтаксис Cron-выражений
Cron-выражение состоит из 5 полей, определяющих расписание выполнения задачи:
- Минуты (0–59);
- Часы (0–23);
- День месяца (1–31);
- Месяц (1–12);
- День недели (0–6, где 0 = воскресенье, 6 = суббота).
Формат записи:
(где
Примеры из изображения:
-
-
-
3. Специальные сокращения (макросы)
Для удобства используются макросы — короткие обозначения стандартных расписаний:
-
-
-
-
-
-
Примеры:
-
-
-
4. Операторы в Cron
В Cron используются специальные операторы для настройки расписаний:
- `*` — все возможные значения (например,
- `,` — перечисление значений (например,
- `-` — диапазон значений (например,
- `/` — шаг (например,
- `L` — последнее значение (используется в полях «день месяца» и «день недели»);
- `W` — ближайший будний день (например,
- `?` — игнорирование поля (используется в «день месяца» или «день недели»).
5. Команды для работы с Crontab
Для управления заданиями Cron используются команды:
-
-
-
-
-
-
-
-
6. Примеры расписаний из изображения
- Каждые 6 часов:
- Каждые 5 минут:
- Ежемесячно:
- Раз в год:
7. Практические шаги
1. Откройте файл crontab:
2. Добавьте расписание и команду (используя синтаксис из п. 2–4).
3. Сохраните изменения (например, в редакторе
4. Проверьте список задач:
5. При необходимости удалите задачи:
(продолжение предыдущего поста)
1. Что такое Cron и Crontab?
Cron — это планировщик задач в Linux, который автоматически выполняет скрипты или команды по расписанию. Crontab — это файл с расписанием задач (таблицы заданий), доступный каждому пользователю системы.
Cron позволяет автоматизировать выполнение задач с высокой гибкостью: от ежеминутных проверок до ежегодных операций. Главное — правильно настроить расписание с помощью синтаксиса и операторов, а также использовать удобные макросы для стандартных интервалов.
2. Синтаксис Cron-выражений
Cron-выражение состоит из 5 полей, определяющих расписание выполнения задачи:
- Минуты (0–59);
- Часы (0–23);
- День месяца (1–31);
- Месяц (1–12);
- День недели (0–6, где 0 = воскресенье, 6 = суббота).
Формат записи:
* * * * * команда (где
* — любое значение, команда — выполняемая команда/скрипт).Примеры из изображения:
-
# every Mon midnight → 0 0 * * 1 command (выполняется в полночь по понедельникам);-
# everyday 05:04 AM → 4 5 * * * command (каждый день в 05:04 утра);-
# every Sun 12:05 PM → 5 12 * * 0 command (каждое воскресенье в 12:05).3. Специальные сокращения (макросы)
Для удобства используются макросы — короткие обозначения стандартных расписаний:
-
@reboot — при загрузке системы;-
@hourly — каждый час;-
@daily (или @midnight) — ежедневно в полночь;-
@weekly — каждую неделю;-
@monthly — каждый месяц;-
@yearly (или @annually) — каждый год.Примеры:
-
@reboot command — запуск команды при старте системы;-
@hourly command — выполнение команды каждый час;-
@yearly command — выполнение команды раз в год.4. Операторы в Cron
В Cron используются специальные операторы для настройки расписаний:
- `*` — все возможные значения (например,
* * * * * — каждую минуту каждого часа);- `,` — перечисление значений (например,
0 8,12,16 * * * command — в 8:00, 12:00 и 16:00);- `-` — диапазон значений (например,
0 9-17 * * 1-5 command — с 9:00 до 17:00 по будням);- `/` — шаг (например,
*/5 * * * * command — каждые 5 минут);- `L` — последнее значение (используется в полях «день месяца» и «день недели»);
- `W` — ближайший будний день (например,
15 10 * * 5W — в 10:15 в ближайшую пятницу);- `?` — игнорирование поля (используется в «день месяца» или «день недели»).
5. Команды для работы с Crontab
Для управления заданиями Cron используются команды:
-
$ crontab -e — редактирование/создание файла crontab;-
$ crontab — просмотр текущего crontab-файла;-
$ crontab -r — удаление crontab-файла;-
$ crontab -u username -l — просмотр crontab другого пользователя;-
$ crontab -u username -e — редактирование crontab другого пользователя;-
$ echo "username" > /etc/cron.allow — разрешение пользователю использовать cron;-
$ echo "username" > /etc/cron.deny — запрет пользователю использовать cron;-
$ crontab -v — показ времени последнего изменения crontab.6. Примеры расписаний из изображения
- Каждые 6 часов:
0 */6 * * * command;- Каждые 5 минут:
*/5 * * * * command;- Ежемесячно:
0 0 1 * * command (1-го числа каждого месяца в 00:00);- Раз в год:
@yearly command или @annually command.7. Практические шаги
1. Откройте файл crontab:
$ crontab -e.2. Добавьте расписание и команду (используя синтаксис из п. 2–4).
3. Сохраните изменения (например, в редакторе
nano — Ctrl+O, затем Ctrl+X).4. Проверьте список задач:
$ crontab -l.5. При необходимости удалите задачи:
$ crontab -r.Telegram
METANIT.COM
Работа с Cron
(продолжение в следующем посте)
(продолжение в следующем посте)
👍8❤3👏2🔥1