Как всегда может быть больше решений одной проблемы. Следующие предложения основаны на моей повседневной работе и опыте работы архитектором программного обеспечения.
Факты
Ваша система состоит из трех (микро) сервисов (A, B и C), брокера сообщений (RocketMQ), кэша (Redis) и базы данных (MySQL). В комментариях вы также упоминаете, что планируете запустить его на оборудовании F5 и Docker.
Предложения
Служба A доступна во внешнем интерфейсе для обработки HTTP-запросов. Асинхронная обработка используется для управления нагрузкой, однако эффективность по-прежнему ограничена производительностью службы А. Поэтому Служба A должна быть масштабируемой , чтобы обеспечить более высокую пропускную способность. Для определения масштабирования необходимо оценить производительность отдельного устройства (взгляните на тестирование производительности, стресс-тестирование ...).
Чтобы включить автоматическое масштабирование контейнеров Docker, вам понадобится инструмент оркестровки (например, Kubernetes), который будет масштабировать вашу систему на основе настроенных метрик. Также подумайте о системных ресурсах, которые может использовать масштабируемая система.
Также услуги B и C могут быть легко масштабируемыми. Оцените, могут ли функции Сервиса B и Сервиса C быть объединены в единый сервис . Вместо того, чтобы B просто помещал новые данные в Redis, он также мог сохранять их в MySQL. Это зависит от того, сколько вам нужно фрагментации и как вы справитесь с дополнительной сложностью, которая сопровождает фрагментацию. B уже отреагирует на опубликованный контент, в то время как служба C, похоже, постоянно объединяет в кэш Redis количество записей (это можно решить с помощью уведомлений пространства клавиш).
Будьте внимательны при чтении данных из Redis, сохраняйте их MySQL и очищайте их. Вы можете легко пропустить или сбросить некоторые данные, которые не были сохранены в MySQL, когда или если вы используете один ключ Redis для всех экземпляров служб, которые в него записывают.
При работе с асинхронной обработкой вы часто сталкиваетесь с конечной согласованностью , что означает, что данные, которые обрабатывает Service A, не будут доступны сразу для других служб, которые могут захотеть прочитать их из MySQL (просто мысль о более широкая картина, значение варьируется от случая к случаю).