Software architecture is the collection of the fundamental decisions about a software product/solution designed to meet the project's quality attributes (i.e. requirements). The architecture includes the main components, their main attributes, and their collaboration (i.e. interactions and behavior) to meet the quality attributes. Architecture can and usually should be expressed in several levels of abstraction (depending on the project's size).
If an architecture is to be intentional (rather than accidental), it should be communicated. Architecture is communicated from multiple viewpoints to cater the needs of the different stakeholders.
Architectural decisions are global tied to quality attributes Designs decisions are local –tied to functionality
”The system being produced will tend to have a structure the mirrors the structure of the group that is producing it
(Events vs. Commands)
Immutable data – things that already occurred
Hector Garcia-Molina and Kenneth Salem defined the term Saga back in 1987 as a way to solve the problem of long lived database transactions. Hector and Kenneth described a Saga as a sequence of related small transactions. In a Saga the coordinator (database in their case) makes sure that all of the involved transactions are successfully completed. Otherwise, if the transactions fails the coordinator runs compensating transactions to amend the partial execution. What made sense for databases makes even more sense for service interactions in SOA. We can break a long service interaction into individual actions or activities and compensations (in case of faults and errors
ODS – Operational Data Store
The Erlang view of the world, as Joe Armstrong, co-inventor of Erlang summarized in his PhD thesis: Everything is a process. Processes are strongly isolated. Process creation and destruction is a lightweight operation. Message passing is the only way for processes to interact. Processes have unique names. If you know the name of a process you can send it a message. Processes share no resources. Error handling is non-local. Processes do what they are supposed to do or fail.
Architecture transcends technology but technology is meaningful Docker
But also Kafka
Pub/sub Vs log processing
Actually they are not isolated and hide
Netflix conductor AWS Step Various API gateways
Microservices - it's déjà vu all over again
it’s déjà vu all over again
הַ״מ-ָהיָה ֶּׁש,ֶּׁהי ְהִּי ֶּׁש הּוא,
הַּומ-ה ֲָשעַנ ֶּׁש,ה ֶָּׁשעֵּי ֶּׁש הּוא;
ין ֵּאְוָלכ-שָדָח,שֶּׁמ ָשַה תַח ַת.״
ט פסוק א פרק קהלת
"What has been will be again,
what has been done will be done again;
there is nothing new under the sun."