Size: a a a

Архитектура ИТ-решений

2020 June 11

RT

Roman Tsirulnikov in Архитектура ИТ-решений
это развязывает сервисы: сервис отправивший событие не знает того кто это событие прочитает и как обработает,
то есть условный сервис “платеж” вообще не знает что где-т оесть сервис с лентой истории, собирающий его события
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, это один из вариантов. Зато при таком подходе сложно восстановить всю логику происходящего и что произойдет при изменении формата этого самого события (или какой-то неочевидной семантики типа "решили на стадии авторизации тоже отправлять события того же типа"
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Но, реально, пофиг. Читает топик или слушает порт. Все равно же EntityService
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Там нет логики. Там только прочитать топик и записать что в этом топике прилетело.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
И потом отдать по фильтру.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
И ты все равно думаешь, что и куда надо послать, что бы оно попало в историю. Т.е. все равно помнишь связь сервиса платежа и сервиса истории.
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
В любой системе ты все равно должен знать бизнес-процесс, магии никто тут не обещал.
В инженерной практике всегда улучшая одни характиристики, приходится жертвовать другими, улучшения одновременно всех показателей почти никогда не бывает.
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
На мой взгляд самое большое зло в сложной системе это возможность “быстренько тут вот добавить поле”.
Just Do It это худшая практика в ИТ
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
размотать потом этот Big Ball Of Mud будет стоить миллионы юнитов ресурсов уже через год
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, по разному. Скорее "быстренько добавить поле" можно только в специально отведенных местах. Изолированных от прочей логики.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Но если про EnityService.
Внутри агрегата - они вполне допустимы.
Реализция внешнего API агрегата в виде CRUD Entity Service - скорее всего нет.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
(Как и хореографию я скорее пущу между агрегатами, а внутри - будет оркестрация)
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
Я последние лет пять поклонник подходов ФП. Многие паттерны применяются и к архитектуре.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
А какие?
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
например принцип immutability, принцип отсувтствия сайд-эффектов, сведение модели данных к событиям
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
мы сейчас проектируем сервис где почти нет операций UPDATE. Соотв. нет никаких блокировок/синхронизаций вообще, все очень легко масштабируется.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Очень хочется как-нибудь посмотреть вживую. Мне пока не удалось придумать схему, где домен было бы удобно описывать в функциональной парадигме. Не отдельные сервисы, а агрегат целиком
источник
2020 June 12

A

Alexey in Архитектура ИТ-решений
Roman Tsirulnikov
мы сейчас проектируем сервис где почти нет операций UPDATE. Соотв. нет никаких блокировок/синхронизаций вообще, все очень легко масштабируется.
А как же тогда вычислять условный остаток по карте в момент авторизации транзакции?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, для этого update в базу не нужен, достаточно хранить текущий стейт в памяти, а в хранилище - транзакции от предыдущего сохраненного состояния
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Я так ещё лет 15 назад делал, иначе никаких iops не хватит.
источник