Softwarové architektury

Organizační informace

Cílem předmětu je seznámit studenty s prací softwarového architekta a poskytnout základy softwarových architektur pro praktický vývoj projektů. Předmět nezachází v tématech do hloubky, ale naopak se zaměřuje na široký přehled skrze technologie, metodologie a procesy v softwarovém vývoji. Jejich propojením se znažíme dosáhnout úspěšné realizace a kvalitního zpracování projektu.


Předmětová komunikace

Pokud potřebujete něco předmětového probrat, tak využijte Discord předmětu: https://discord.gg/Tzp9xK5kJt


Podmínky úspěšného zakončení

Předmět je ukončený vypracováním projektu, který lze zpracovat samostatně nebo v týmu (maximálně 5 lidí). Za projekt lze získat 120 bodů. Pro úspěšné zakončení předmětu je třeba získat minimálně 70 bodů. 

Projekt je rozdělený na 3 samostatné části:

1. část 

Tato část je zaměřená na návrh projektu. Pro návrh využijte metodu event stroming. Je možné využít tradiční fyzickou metodu na roli papíru s postit papírky, a nebo využít šablonu z Figmy jako na cvičení.

Za každého člena týmu musí být minimálně zpracován 1 bounded context pro core/supporting subdoménu o alespoň 5 událostech a 3 agregátech. Pokud jich bude více (včetně menších kontextů, generické subdomény) tak je to hodnocené pozitivně. 

Tj. pětičlený tým musí vytvořit min. 5 bounded contextů, kde každý z ních má minimálně 5 událostí a 3 agregáty na kontext.

Zaměřte se prioritně na části řešící problém. Na vždy více funkcí je výhoda a naopak systémy řešící to nejdůležitější se mohou prodávat stejně dobře.

Za první část lze získat 40 bodů.

 2. část

V této části se zaměříme na infrastruktu projektu. Dle návrhu vyberte cílovou archikteturu (monolit, SOA, mikroslužby, ...) a navrhněte infrastrukturu pro váš projekt. Vyberte si volitelný cloud (Azure, AWS, ...) a seznamte se se službami, který nabízí. Vyberte vhodné služby pro váš projekt - např. App Service pro hostování aplikace, VM pro databázi v HA setupu, REDIS pro cache, Elastic Search pro vyhledávání, aj. 

Vytvořte diagram (libovolný nástroj - preferované draw.io nebo Excalidraw) zachycující vybranou infrastrukturu. 

Připravte dokument vysvětlující vaše rozhodnutí pro výběr a popisující infrastrukturu. Do dokumentu dejte odhad provozních nákladu za cloud pokud budete mít 1000 uživatelů celkově, 10 000 uživatelů, a 1 000 000 uživatelů. Pro odhad, musíte odhadnout kolik requestů zvládnou utáhnout vaše služby. Udělejte kvalifikovaný odhad. Podle toho určete počet instancí a využijte kalkulačku poskytovatele na cenu.

Za druhou část lze získat 30 bodů.

3. část

Poslední část je implementační. Každý člen týmu implementuje vybranou část systému (každý různý bounded context - platí stejné minimální požadavky jako u event stormingu - pokud máte událostí nebo agregátů v návrhu než je minimum, tak některé můžete vychat). Implementujte pouze API služby. Můžete použít modulární monolit, SOA a nebo mikroslužby. Před implementací si vytvořte pipeline pro build a vytvoření docker kontejneru.

Požadavky přistup:

  • využijte vertical slices
  • použijte clean architecture na strukturování projektu
  • využijte CQRS (skupina C# může použít Mediatr nebo Critter stack, skupina TS https://docs.nestjs.com/recipes/cqrs)

Otestujte systém pomocí K6 test (happy path scénář).

Za třetí část lze získat 50 bodů.


Během semestru lze získat maximálně 100 bodů. Na úspěšné dokončení je třeba získat minimálně 75 bodů.

Body lze získat za následující aktivity:

  1. půlsemestrální test 15 bodů
  2. závěrečný test 15 bodů
  3. vypracování architektonické katy (koncepční návrh systému bez implementace) - 3 katy celkem - každá 10 bodů 
  4. implementace vybrané katy (pokryvá nastavení procesů, prostředí, nástrojů a implementaci MVP) 40 bodů


Účast na semináři

Účast na semináři je NEPOVINNÁ. Semináře jsou nahrávané. Záznamy najdete do 14 dní na streamovací platformě, následně na Dropboxu a v interaktivní osnově. Pozn: v případě technických problémů se ovšem může stát, že záznam v tom daném týdnu nebude. 

Od druhého týdne semestru budou semináře streamované. 


Přednášky

1       Úvod do architektury rozsáhlých aplikací: architektonický proces, role a úkoly architekta.

2       Cloudové prostředí, Infrastructure as a Code

3       Domain Driven Design (DDD): Strategický návrh

4       Domain Driven Design (DDD): Strategický návrh

5       Domain Driven Design (DDD): Taktický návrh

6       Domain Driven Design (DDD): Taktický návrh

7       Metriky, logování, trasování, monitorování, fitness funkce

8       Monolitické architektury: Vrstvená architektura, Pipeline architektura

9       Monolitické architektury: Microkernel architektura, Plug-in architektura

10      Monolitické architektury: Clean architektura, onion, hexagonal

11      Servisně orientované architektury: Service-based architektura

12      Servisně orientované architektury: Mikroslužby, Sidecar pattern

13      Servisně orientované architektury: Event driven architektury, service mesh


Semináře

1       Úvod do ASP.NET MinimalAPI / Úvod do NestJS

2       Kontejnerizace aplikace, nastavení infrastruktury

3       Provedení CI/CD pipeline pro nasazení aplikace s využitím IaaC

4       Zabezpečení aplikace pomoci JWT a OAuth

5       Návrh aplikace z pohledu DDD, návrh infrastruktury aplikace

6       Návrh aplikace z pohledu DDD, návrh infrastruktury aplikace

7       Implementace opentelemetry v aplikaci, vytvoření dashboardu pro monitoring

8       Implementace aplikace pomocí vrstvené architektury

9       Implementace aplikace pomocí vrstvené architektury

10      Migrace na modulární monolit

11      Migrace na servisní architekturu

12      Migrace na mikroslužby

13      Migrace na event-driven architekturu (Kafka/Redpanda)