Przegląd najpopularniejszych architektur oprogramowania wraz z ich analizą. Dodatkowo suplement w postaci dobrych praktyk w tworzeniu architektury oprogramowania
2. #codetecon #lbn2 @Czujnik81
O mnie…
▸ Szczęśliwy mąż i tatuś 3 urwisów ;)
▸ Back-end oriented: Spring, JEE
▸ Zawodowo:
Onwelo - Solution Delivery Manager
▸ TWITTER: @Czujnik81
3. #codetecon #lbn2 @Czujnik81
Architektura oprogramowania
Odcinek #8192
•Kilka słów o architekturze - tak ogólnie
•Wybrane architektury:
•Pulpa style
•Warstwy - czyli coś dla Ogrów
•Event Driven
•SOA i Mikroserwisy
•Where my servers?
•Jak tworzyć i zmieniać architekturę
4. #codetecon #lbn2 @Czujnik81
Architektura oprogramowania
przypomina trochę…
✓ każdy mówi jak ją robić;
✓ nikt nie wie na prawdę jak ją robić;
✓ wszyscy myślą, że wszyscy inni ją robią;
✓ więc wszyscy twierdzą, że ją robią
sex nastolatków:
5. #codetecon #lbn2 @Czujnik81
Definicja
•The software architecture of a computing system is the
set of structures needed to reason about the system,
which comprise software elements, relations among them
and properties of both
(Documenting Software Architecture: Views and Beyond, 2nd Ed., Clements et al. 2010)
•The important stuff, Whatever that is
(Ralph Johnson)
6. #codetecon #lbn2 @Czujnik81
Opowiastka o
Architekturze…
•Czym jest Architektura oprogramowania?
•Kiedy ją definiujemy?
•Co jest celem architektury?
•Komu na niej nie zależy ;)
•Czy można ją zmieniać?
7. #codetecon #lbn2 @Czujnik81
Poziomy architektury
•Simon Brown C4:
•System level - budujemy system w organizacji
•Container level - dostarczamy rozwiązania
•Component level - definiujemy elementy, które
tworzą rozwiązanie
•Code level - kod, który wykonuje konkretne
polecenia
https://c4model.com/
8. #codetecon #lbn2 @Czujnik81
#1 Pulpa Style:
Big ball of mud
• System bez wyraźnej
architektury
• Elementy w systemie łączą
się dowolnie - często każdy
z każdym
• Proces wprowadzania
zmian jest żmudny i trudny
ze względu na zależności
• Trudny w utrzymaniu
https://www.synthesis.co.za/agile-software-architecture-super-agile/
9. #codetecon #lbn2 @Czujnik81
#2 Architektury warstwowe
trochę jak Ogry i cebula
• Od jednej do wielu warstw
• Każda warstwa ma swoją z góry
określoną odpowiedzialność
• Każda warstwa komunikuje się tylko
w jednym kierunku: “w dół” i
odpowiada w jednym kierunku “do
góry”
• Jest uporządkowana
• Zmiany mogą być realizowane w
każdej warstwie osobno lub kilku
naraz
https://www.codeproject.com/articles/1018717/layered-software-architecture
Kwadrat Kwadrat Beczka
by Jarek Pałka ;)
10. #codetecon #lbn2 @Czujnik81
#3 Event driven
•Wszystko w aplikacji jest
zdarzeniem i z nich
możemy poznać stan
systemu
•Obsługa zdarzeń
wykonywana jest
asynchronicznie
•Wspiera skalowalność
poprzez swoje rozproszenie
•Łatwa w rozbudowywaniu,
trudna w testowaniu i
monitorowaniu
https://deepakpol.wordpress.com/2015/09/29/event-driven-and-reactive-architecture/
Event
Event Loop
Handler
11. #codetecon #lbn2 @Czujnik81
#4 SOA i Mikroserwisy
•Zorientowane na konkretne
usługi biznesowe
•Niezależne usługi dopiero
poprzez orkiestrację tworzą
system
•Luźno powiązane ze sobą
•Łatwo skalowalne
•Łatwe testowanie pojedynczych
serwisów, trudne testowanie
całości (e2e)
•Wymagają rozbudowanego
monitorowania
https://msdn.microsoft.com/en-us/library/
12. #codetecon #lbn2 @Czujnik81
#5 Where my servers?
#serverless
•Zero infrastructure
•Zazwyczaj vendor locked
•Super skalowalna bez
żmudnego procesu
dostosowywania
oprogramowania
•Wiele gotowych do użycia
rozwiązań
•Wbudowane narzędzia do
monitorowania
•A gdzie jest haczyk?… $$$$$ ;)
14. #codetecon #lbn2 @Czujnik81
Jak podejść do
architektury?
•Buduj z założeniem, że zmienisz
•KISS
•Pułapka overdesignu
•Architektura to nie tylko Dev ale i Ops, Security, Biznes
(sic!)
15. #codetecon #lbn2 @Czujnik81
Jak zmieniać
architekturę?
•Analizuj każdą potencjalną zmianę - daj sobie czas
•Nie wprowadzaj pochopnie nowych rozwiązań do
systemu
•Konsultuj z zespołem i dyskutuj
•Zmiany wprowadzaj powoli i iteracyjnie
•Jak rozmawiać o zmianach w architekturze z biznesem?
16. #codetecon #lbn2 @Czujnik81
Zalety dobrej architektury
•Wysoka produktywność
•Łatwa w utrzymaniu
•Łatwa w rozbudowie
•Bezpieczna
•Skalowalna
•Niezawodna
•Pozwala dostarczać lepsze
rozwiązania taniej