Это иллюстративный пример — приватная очередь для чтения. Небольшой веб-интерфейс хранит ссылки и заметки. Ежедневное задание проверяет короткий список разрешённых лент, а еженедельная задача экспортирует сводку чтения. Это упражнение по планированию, а не утверждение, что клиент использует такую конфигурацию или что VPS выполняет эти задания за вас.
Отделите службу от задания
Веб-процесс — это служба: он должен быть доступен, когда вы открываете инструмент, под выбранными вами средствами контроля доступа. Обновление лент — это задание: оно запускается, обрабатывает ограниченный объём работы, записывает результат и завершается. Бесконечный цикл с долгим сном может скрыть, успешно ли прошло последнее обновление и почему начался ещё один запуск.
Держите первый объём малым. Загружайте только источники, которые вам разрешено использовать, соблюдайте их ограничения скорости и храните свои заметки независимо от импортированного содержимого лент. Личному инструменту может вообще не требоваться публичный веб-слушатель, если вы получаете к нему доступ через организованное приватное соединение. Если вы публикуете веб-эндпоинт, реализуйте аутентификацию и проверьте путь DNS, сети и HTTPS.
Планируйте одновременную работу
Тихая панель не показывает пиковое использование памяти заданием. Учитывайте то, что может перекрываться: операционная система, веб-процесс, хранилище данных, разбор лент и экспорт или развёртывание. Загрузка всех документов в память сразу создаёт иное требование, чем обработка одного ограниченного пакета за раз.
Для иллюстрации предположим, что рабочий лист планирования допускает 250 МиБ на системную работу, 200 МиБ на веб-инструмент и хранилище данных, 400 МиБ на ограниченное обновление и 400 МиБ на перекрывающийся экспорт или развёртывание. Итог 1,250 МиБ — выдуманный допуск для объяснения решения, а не проверенный объём. Измеряйте реальные задачи; их перекрытие и временные файлы важны не меньше, чем их состояние простоя.
Пример конфигурации начинается с Seed и добавляет 1 GB памяти. Поэтому он указывает 1 vCPU, 2 GB ОЗУ и 25 GB SSD при месячной промежуточной сумме $8.50 USD. Сравните фактически доступную память с рабочим листом и уменьшите размер пакета заданий, прежде чем предполагать, что нужно больше CPU. руководство по предупреждениям о ресурсах объясняет показания.
| Период обслуживания | Перед сохранением | Сохранено | Оплатить один раз |
|---|---|---|---|
| 1 месяц | $8.50 | $0.00 (0%) | $8.50 USD |
| 3 месяцев | $25.50 | $0.00 (0%) | $25.50 USD |
| 6 месяцев | $51.00 | $14.28 (28%) | $36.72 USD |
| 12 месяцев | $102.00 | $51.00 (50%) | $51.00 USD |
Эти итоги включают выбранный вариант памяти и используют те же повторяющиеся скидки, что и при оформлении заказа. В этом примере не выбран ни один вариант резервного копирования из каталога. Учитывайте хранилище для резервных копий и другие внешние расходы в отдельном бюджете; срок службы — это решение о расходах, а не обещание, что инструмент не требует обслуживания.
Определите расписание и правило пропущенного запуска
Напишите предполагаемый часовой пояс рядом с расписанием. Решите, следует ли догонять пропущенный запуск при возвращении сервера и сохраняет ли поздний результат ценность. Для этой очереди чтения одно текущее обновление может быть полезнее, чем воспроизведение каждого пропущенного ежедневного обновления.
В systemd таймер активирует службу. Если эта целевая служба всё ещё активна, таймер оставляет её работающей вместо порождения ещё одного экземпляра. Календарный таймер, использующий Persistent=true может инициировать догон при повторной активации после пропущенного события; он не создаёт отдельное выполнение для каждого пропущенного интервала. См. правила поведения и сохранения таймеров. руководство по запланированным заданиям превращает这些 choices into a limited example.
Контролируйте перекрытие и делайте повторы безопасными
Дайте плановому обновлению и любому ручному обновлению один и тот же путь выполнения. Если другая точка входа может запускать скрипт напрямую, общая блокировка может координировать эти попытки. Инструмент, такой как flock поддерживает эксклюзивную блокировку и неблокирующую политику отказа; все соответствующие писатели должны взаимодействовать, и поведение файловой системы имеет значение. См. руководство по блокировке и ограничения файловой системы.
Выберите явный результат для занятой блокировки, например запись того, что это обновление было пропущено, потому что предыдущее всё ещё выполнялось. Никогда не позволяйте оператору принять этот пропуск за успешную загрузку. Отдельно идентифицируйте импортированные элементы по стабильному идентификатору источника, чтобы повторная попытка могла распознать уже сохранённую работу. Блокировка решает проблему одновременной работы; логика приложения, безопасная к дубликатам, решает проблему работы, повторённой позже.
Ограничивайте внешние запросы и попытки повтора. Недоступная лента должна оставлять полезную запись об ошибке, а не удерживать задание навсегда. Если экспорт создаёт файл, подготовьте новый результат отдельно и публикуйте его только после проверки, чтобы панель могла продолжать использовать предыдущий полный экспорт при сбое запуска.
Записывайте полезный результат
Запланированное время в списке не является доказательством того, что обновление завершилось. Фиксируйте время начала и окончания, результат выхода, количество рассмотренных элементов и метку времени последних успешных данных. Для личного инструмента небольшое представление статуса может показывать эту метку времени, не раскрывая токены или сырые личные заметки.
Проверьте обычный запуск, недоступный источник, повторный вызов во время занятости и повтор того же ввода. Проверьте как результат процесса, так и сохранённый результат. Если веб-сервис останавливается, пока задания продолжаются, используйте чек-лист первой подсказки чтобы отличить проблему приложения от поведения планировщика.
Держите восстановление данных и очистку раздельно
Незаменимые данные здесь — это сохранённая очередь, состояние чтения и личные заметки. Конфигурация, определения расписания и идентификатор выпуска нужны для восстановления инструмента. Журналы помогают расследованию; временные загрузки и заменяемые экспорты могут иметь другие правила хранения. Классифицируйте эти пути перед автоматизацией очистки.
Установите ограниченную политику хранения для журналов и завершённых экспортов, затем наблюдайте за ростом перед включением удаления. Создавайте резервные копии постоянных данных методом, подходящим для их движка хранения. С restic выбор снимка и явной тестовой цели делает намерение восстановления видимым; его восстановление по умолчанию может перезаписать существующие файлы, поэтому используйте отдельное пустое назначение. См. поведение цели восстановления и перезаписи.
В тестовой копии извлеките известную заметку, подтвердите её состояние чтения и создайте экспорт. Сохраните процедуру и результат. В упражнением по восстановлению объясняется, почему целостность репозитория и работоспособное приложение — это отдельные проверки.
Настраивайте только то, что можете объяснить
Откройте конфигуратор Seed, просмотрите существующие варианты и добавьте 1 GB ОЗУ в соответствии с этим примером. Выберите период осознанно; ссылка не применяет опцию за вас. Выберите Малайзию, Румынию или Швейцарию для сервера и подтвердите расположение резервных копий и объём услуг, прежде чем полагаться на эту конфигурацию.
Выбор имени хоста или получение платёжных реквизитов не устанавливает инструмент и не планирует его задания. После организации доступа следуйте руководству по первому доступу и создавайте одну наблюдаемую задачу за раз. Добавляйте сложность, когда текущий результат говорит вам, зачем она нужна.
Использованная документация
Основные ссылки для этой страницы. Проверьте документацию для версии, установленной в вашей среде.