В настоящее время я разрабатываю систему, которая должна работать асинхронно, поэтому я решил, что пришло время попробовать архитектуру, управляемую событиями. Большая часть функциональности - CRUD
Различные части:
- Пользовательский интерфейс, который взаимодействует со шлюзом API через соединение через веб-сокет.
- Шлюз получает полезную нагрузку и создает сообщение с полезной нагрузкой, которое попадает в кластер Kafka.
- Служба использует сообщения, проверяет и сохраняет сущность в базе данных. Событие отправляется в Kafka для использования шлюзом и обратно в пользовательский интерфейс.
Для создания, обновления и удаления его довольно просто.
Однако, когда дело доходит до получения данных, где я обычно использую вызов HTTP GET, все становится немного сложнее. Как я могу правильно получить эти данные? Могу ли я создать событие запроса или какие у меня есть варианты? Данные в базе данных также должны быть «доступными для поиска» и «страничными» через службу - обычно я бы использовал для этого строку запроса. Я считаю, что мои «события запроса данных» довольно огромны и содержат много логики о том, какие данные запрашиваются. На самом деле поток сейчас такой же, как и для создания, обновления и т. Д. где в Kafka отправляется событие, содержащее информацию о том, какие данные следует запросить.
Как правильно обрабатывать считывание данных в зависимости от событий?
Как сделать мои данные доступными для поиска? (например, получить все ресурсы, которые имеют внешний ключ к ресурсу x или содержат name = "xyz")
asynchronous
- какова бизнес-причина этого? Для чтения вам, скорее всего, лучше запросить БД из шлюза API (возможно, через какой-то тонкий слой, чтобы абстрагироваться от деталей сохраняемости). Если бизнес-требованием является производительность / масштабируемость, вы можете решить это с помощью других инструментов (кэширование, зеркало БД только для чтения и т. Д.), Которые проще и намного эффективнее, чем делать это с помощью событий. - person JME   schedule 22.05.2020