Проектирование крупного приложения на Elang
Банк, маркетплейс, платформа стартапа и публичный API имеют разные требования к корректности и эксплуатации. Elang предоставляет HTTP, доступ к данным, транзакции, аутентификацию учётных записей, API-токены, политики, фоновые задания, планирование и транспорт в реальном времени. Архитектура приложения и результаты эксплуатационных проверок определяют, готова ли конкретная система к своей нагрузке.
Разделите бизнес-логику на модули
Организуйте такие модули, как Accounts, Orders, Payments и Reporting, в app/. Оставляйте контроллеры небольшими. Помещайте бизнес-операции во внедряемые сервисы и регистрируйте интеграции через провайдеры сервисов. Держите авторизацию рядом с операцией, чтобы HTTP, задания и команды WebSocket применяли одно и то же правило.
Используйте Gate для политик приложения, репозитории с ограничением по владельцу для пользовательских данных и явные ограничения SQL для инвариантов. Одной отображаемой роли недостаточно для полной модели разрешений. Идентификаторы арендаторов должны поступать из доверенной аутентификации и применяться к каждому соответствующему запросу, уникальному ключу, заданию и каналу событий.
Обеспечьте атомарность изменений
Оборачивайте операции, которые должны фиксироваться вместе, в Database::connection()->transactional(). Очередь и хранилище событий Elang могут участвовать, если используют то же подключение. Сохраняйте транзакции короткими. Добавляйте ограничения базы данных, а также блокировки или проверки версий там, где параллельные операции записи могут конфликтовать. Проверяйте конкуренцию за ресурсы на той базе данных, которая используется при развёртывании.
Используйте поддержку Idempotency-Key стартового проекта API для повторяемых операций записи JSON. Транзакция базы данных не фиксирует атомарно удалённый платёж, письмо или операцию брокера сообщений. На этих границах используйте долговременный outbox, ключи идемпотентности провайдера, сверку и компенсирующие операции.
Продуманно работайте с деньгами и данными аудита
Для финансовых приложений храните суммы в виде проверенных целых чисел в минимальных денежных единицах или десятичных значений базы данных с явно заданной валютой и правилами округления. Никогда не используйте числа с плавающей точкой для достоверных остатков. Используйте бухгалтерский регистр с двойной записью, соответствующий приложению, неизменяемые записи журнала, сверку, доступ к базе данных с минимальными привилегиями и независимо проверенные бизнес-процедуры контроля.
Таблица воспроизведения событий, журналы выполнения и записи очереди — эксплуатационные инструменты. Они не являются финансовым регистром, системой аудита с обнаружением вмешательства, сертификатом соответствия или заменой независимой проверки безопасности. Эта предварительная версия для разработчиков не имеет банковской сертификации и не проходила независимый аудит безопасности.
Сохраняйте интерактивные операции короткими
Возвращайте ответы API ограниченного размера с постраничной навигацией. Ставьте в очередь отчёты, импорт, уведомления и массовые задачи. Делайте каждое задание безопасным для повторения. Используйте SSE для односторонних обновлений браузера и WebSocket, когда клиент должен отправлять команды по постоянному соединению. Авторизуйте каждый канал и команду и обновляйте снимки состояния ресурсов после разрыва в истории воспроизведения.
Текущий транспорт реального времени читает историю событий SQL. Проверяйте нагрузку от опроса; не выводите неограниченную пропускную способность соединений из ограничения их числа. Если развёртыванию нужна очень широкая рассылка, оцените специализированный брокер и адаптер транспорта перед запуском.
Эксплуатация нескольких экземпляров
Используйте общую базу данных рабочей среды, централизованные секреты, синхронизированные часы и HTTPS. Кеш, счётчики ограничения частоты, блокировки и сессии по умолчанию основаны на файловой системе. Для нескольких хостов нужно намеренно настроенное общее хранилище или распределённые адаптеры конкретного приложения; Elang не превращает эти сервисы автоматически в инфраструктуру на Redis.
Запускайте обработчики очереди и процессы WebSocket под управлением диспетчера процессов от имени непривилегированного пользователя. Перезапускайте процессы при развёртывании, чтобы код и регистрации оставались актуальными. Развёртывайте миграции с совместимостью как со старой, так и с новой версией приложения. Создавайте резервные копии закрытых данных и проверяйте восстановление; сохраняйте доступ к ключам приложения для расшифровки хранимых данных.
Определите и измерьте нагрузку
Запишите ожидаемую частоту запросов, число одновременных соединений WebSocket, размер базы данных, задержку заданий и допустимую частоту сбоев. Измеряйте задержки p50/p95/p99, пропускную способность, память, блокировки базы данных, насыщение обработчиков и восстановление после отказа зависимости. Включайте в тест реалистичные авторизацию, данные и операции записи.
Микротест маршрута приветствия не может установить, что один фреймворк лучше для любого проекта. Узкий тест производительности репозитория — воспроизводимое измерение в среде разработки, а не обещание пропускной способности рабочей среды. Перед выбором Elang для критической системы проверьте собственную нагрузку и проведите независимую проверку кода и безопасности.
Начните с интеграции API и интерфейса, очередей, транспортов реального времени и развёртывания.