Я работаю над приложением, которое имеет дело с «конфиденциальными» данными (также известными как номера кредитных карт), и для достижения соответствия PCI нам необходимо убедиться, что наша база данных отделена от наших общедоступных серверов.
Чтобы данные поступали и сохранялись, должно быть что-то посередине - я не хочу, чтобы данные записывались или читались непосредственно с веб-серверов/серверов приложений, поэтому мне было интересно, если очередь/рабочий Архитектура может подойти.
Основной поток будет:
- Данные от клиента -> Отправить в API
- Сервер API помещает данные в объект «запрос» -> Поставить в очередь
- Рабочий (во «внутренней» сети) получает запрос, записывает в БД, выполняет работу, обновляет БД, затем ставит в очередь объект «ответ».
- Сервер API получает этот объект ответа, а затем отправляет ответ клиенту.
По сути, я надеюсь на то, что данные будут возвращаться к одному и тому же «запросу», чтобы весь процесс можно было выполнить в одном запросе, но это, похоже, идет вразрез с асинхронной природой очередей сообщений и может быть больше подходит для «веб-служба», действующая как строгий «протокол» как таковая...
Изменить Вероятно, я должен добавить, что мне нужно следующее:
- Долговечность - если очередь или что-то еще «сбой», она должна быть в состоянии восстановить «поставленные в очередь» элементы.
- Безопасность - конфиденциальные данные должны быть защищены - с транспортом все в порядке, потому что мы можем использовать что-то на транспортном уровне (TLS, SSL, IPSec), однако хранение номеров карт на стороне отправителя (общедоступная сеть) не идеально...
- Скорость - конечно.
Итак, я иду об этом неправильно?