Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc

Die Seite wird erstellt Hortensia-Barbara Franz
 
WEITER LESEN
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Mit der Zeit gehen ...

Flexible Architekturen
FALK SIPPACH

Mainz, 09.09.2020

                         0
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Falk Sippach

n   Softwarearchitekt, Berater, Trainer bei embarc

n   früher bei Orientation in Objects (OIO), Trivadis

                         fs@embarc.de

                         @sippsack

                         è xing.to/fsi

Flexible Architekturen                   embarc.de      2
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Flexible Architekturen   embarc.de   3
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Mit der Zeit gehen - Flexible Architekturen
 In der agilen Softwareentwicklung gibt es die Rolle des Architekten eigentlich nicht mehr.
 Paradoxerweise sind die Herausforderungen an den Entwurf moderner Softwaresysteme
 höher als früher. Um die Digitalisierung voranzutreiben, sich von den Mitbewerbern
 abzuheben, sich möglichst auch einen Wettbewerbsvorteil zu erarbeiten und die sowohl
 technische als auch organisatorische Skalierbarkeit sicherzustellen, sind zu den altbekannten
 ganz neue Fragestellungen hinzugekommen:

 •   Laufzeitmonolith oder irgendetwas Entkoppeltes?
 •   DevOps oder klassischer Betrieb?
 •   Serverless/Cloud oder On Premises?
 •   Relationale Datenhaltung oder NoSQL bzw. sogar In-Memory?
 •   Lang- oder Kurzlebigkeit?

 Je nach eingesetzten Architekturstilen und -mustern kommen heutzutage ganz neue
 Herausforderungen auf euch zu. Wir diskutieren in diesem Vortrag, wie agile Teams eine
 flexible und vor allem auch robuste Softwarearchitektur entwerfen, sie festhalten,
 kommunizieren und pflegen können. Und das auch, wenn von der grünen Wiese nach ein paar
 Monaten nicht mehr viel zu sehen ist.

Flexible Architekturen                  embarc.de                                                4
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Flexible Architekturen
                         Softwarearchitektur
                             embarc.de     5
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Flexible Architekturen?
Flexible Architekturen   embarc.de      6
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Expertenmeinungen

                         “… not all design is architecture. Architecture represents
                         the significant design decisions that shape a system,
                         where significant is measured by cost of change.”
                                                                       (Grady Booch)

                         “Softwarearchitecture is about the important stuff,
                         whatever that is.”
                                                                       (Ralph Johnson)

                         “Software architecture is the set of design decisions
                         which, if made incorrectly, may cause your project to be
                         cancelled.”
                                                                        (Eoin Woods)

Flexible Architekturen                        embarc.de                                  7
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Was ist Architektur für mich?

                                fundamentale Strukturen,
                                              Konzepte,
                                        Entscheidungen
                                    und Lösungsansätze
                         ... die man nicht mehr leicht los bekommt!

Flexible Architekturen                embarc.de                       8
Flexible Architekturen - Mit der Zeit gehen ... FALK SIPPACH - embarc
Wer oder was ist ein Software-Architekt?

                         Architect is Latin for "Can’t code anymore".
                                                                        (Ted Neward)

                         Das Leben von Software-Architekten besteht aus einer
                         langen und schnellen Abfolge suboptimaler
                         Entwurfsentscheidungen, die meist im Dunkel
                         getroffen werden.
                                                               (Philippe Kruchten)

Flexible Architekturen                       embarc.de
                                                                         10
                                                                                       10
Anforderungen
                                 klären

               Architektur                   Architektur
                bewerten                     entwerfen

                              Architektur
                             kommunizieren

                                                  aus: Effektive Software-
                                                 architekturen (G. Starke)

Flexible Architekturen       embarc.de                               11   11
Agenda

                   1 Anforderungen klären

                   2 Flexible Lösungsansätze

                   3 Dokumentation

                   4 Ausblick

Flexible Architekturen               embarc.de   12
Agenda

                   1 Anforderungen klären

                   2 Flexible Lösungsansätze

                   3 Dokumentation

1
                   4 Ausblick

Flexible Architekturen               embarc.de   13
Einflüsse auf Entscheidungen
                                                       Vorgaben/Rahmenbedingungen
                                                       Technisch (z.B. Datenbankprodukt)
                                                       Organisatorisch (z.B. Team)

            - schränken die Lösung ein
            - schließen Optionen aus

                                                                          - prägen die Lösung
                                                                          - nachher schwierig “einzubauen”
                     Qualitätsanforderungen
                     Benutzbarkeit, Effizienz,
                     Wartbarkeit, Sicherheit ...

Flexible Architekturen                             embarc.de                                                 14
Rahmenbedingungen …

   … wirken eher einschränkend auf die Optionen beim Entwurf
   einer Software und können im Gegensatz zu
   Qualitätsanforderungen oft nicht mit dem Kunden diskutiert
   werden. Außerdem werden solche Randbedingungen oft auf
   binäre Art und Weise erfüllt oder nicht, ohne dass es
   dazwischen Abstufungen gäbe.

Flexible Architekturen    embarc.de                             15
Arten von Rahmenbedingungen
                         Technologisch
                           Hardware-Vorgaben
                           Software-Vorgaben
                           Vorgaben des Systembetriebs
                           Programmiervorgaben

                         Organisatorisch
                           Organisation und Struktur
                           Ressourcen (Zeit, Budget, Personal)
                           Organisatorische Standards
                           Juristische Faktoren

Flexible Architekturen            embarc.de                      16
Qualitätsziele
                         Die wichtigsten geforderten Qualitätsmerkmale für ein
                         Softwaresystem (Synonym: Architekturziele).
                         Typischerweise werden als Qualitätsziele im Rahmen
                         eines Architekturüberblicks die Top-3 bis Top-5 genannt.

Flexible Architekturen                      embarc.de                               17
Beispiel: Qualitätsziele Netflix
                         (aka „Architekturziele“ oder „Architekturtreiber“)
                         Ziel                Beschreibung
                                             Die Lösung steht auch bei Lastspitzen
                         Verfügbarkeit
                                             uneingeschränkt zur Verfügung.
                                             Auf allen wichtigen Geräten eine optimale User
                         Benutzbarkeit
                                             Experience.
                                             Es ist leicht, neue Funktionalität zu bauen und
                         Modifizierbarkeit
                                             hinzuzufügen.

                         Attraktivität       Wir sind als Arbeitgeber für gute Entwickler attraktiv.

                                             Wir haben gute Einblicke, was in unserer Umgebung
                         Betreibbarkeit
                                             läuft.

                                                  Quelle: Stefan Toth, Stefan Zörner
                                                  “Gut das ist? Umgekehrte Architekturbewertung eines Internetgiganten”

Flexible Architekturen                              embarc.de                                                             18
Themen für Entscheidungen
                         Zerlegung
                         Module und Abhängigkeiten
                         Komponentenbildung
                         ...

                         Technologie-Stack
                         Programmiersprache(n), Bibliotheken, Frameworks
                         Middleware (Kommunikation, Applikationsserver ...)
                         Querschnittsthemen (Persistenz, Oberfläche ...)
                         ...

                         Zielumgebung
                         Wo läuft die Software? (Endanwender vs. RZ vs. Cloud)
                         Verteilungsaspekte (Redundanz, Clustering)
                         Virtualisierung
                         ...
Flexible Architekturen            embarc.de                                      19
Agenda

                   1 Anforderungen klären

                   2 Flexible Lösungsansätze

                   3 Dokumentation

2
                   4 Ausblick

Flexible Architekturen               embarc.de   20
Flexible Architekturen   embarc.de   21
High Level Lösungsstrategien

             Laufzeitmonolith                 Microservices

         Klassischer Betrieb                     DevOps

                                      vs.
                 On Premises                 Serverless/Cloud

             Relationale DBs                 NoSQL/In-Memory

                 Langlebigkeit                 Kurzlebigkeit

Flexible Architekturen           embarc.de                      22
High Level Lösungsstrategien

             Laufzeitmonolith                 Microservices

       K on Betrieb
       Klassischer                                DevOps
              ser                            Mo
                   vat
          On Premises                             de
                                             Serverless/Cloud
                        iv?                         rn
        Relationale DBs
                                                       ?
                                             NoSQL/In-Memory

                 Langlebigkeit                 Kurzlebigkeit

Flexible Architekturen           embarc.de                      23
Vorteile/Herausforderungen/Ziele
                                                       Belastbar/hochverfügbar
                           “gediegen”                    widerstandsfähig
                 Gewohnheit                                        komplex
                       zustandsbehaftet                 Hohe Lernkurve
                   Datensicherheit                                    flexibel
                                                       automatisiert
                Klassische
                                                                skalierbar
                Organisationsstrukturen                 Neue
                  verstanden                            Herangehensweisen
                           Transaktionen               Conway’s Law beachten
                         planungssicher                      Time-To-Market
Flexible Architekturen                     embarc.de                             24
Rahmenbedingungen
                                                    Cloudausrichtung/-guidelines
              Klassische
              Organisationsstrukturen               (Public) Cloud first Ansatz
              Lange Produktlaufzeiten und
                                                    Agile Prozesse etabliert
              Kundenbindungen
                                                    Offene Mitarbeiter
              Datenschutz-/sicherheit
                                                    Ausreichende
              Unflexibler Inhouse-Betrieb
                                                    Entwicklungskapazitäten
              Keine agilen Prozesse
                                                    Fortgeschrittene
              Langlaufende                          Automatisierung und
              Lizenzverträge                        Infrastruktur als Code

Flexible Architekturen                  embarc.de                                  25
Qualitätsmerkmale
                                                     Benutzbarkeit                            Portabilität
               Begriffe                              (Usability)                              (Portability)

                 nach                     Ist die Software intuitiv zu bedienen,   Ist die Software leicht auf andere
                                                                                   Zielumgebungen (z.B. anderes OS)
            ISO 25010                     leicht zu erlernen, attraktiv?
                                                                                   übertragbar?

               Funktionale Eignung                   Effizienz                                  Kompatibilität
               (Functional Suitability)              (Performance)                              (Compatibility)

    Sind die berechneten Ergebnisse       Antwortet die Software schnell, hat      Ist die Software konform zu
    genau genug / exakt, ist die          sie einen hohen Durchsatz, einen         Standards, arbeitet sie gut mit
    Funktionalität angemessen? ...        geringen Ressourcenverbrauch? ...        anderen zusammen?

               Zuverlässigkeit                        Sicherheit                              Wartbarkeit
               (Reliability)                          (Security)                              (Maintainability)

   Ist das System verfügbar, tolerant     Ist das System sicher vor Angriffen?      Ist die Software leicht zu ändern,
   gegenüber Fehlern, nach Abstürzen      Sind Daten und Funktion vor               erweitern, testen, verstehen? Lassen
   schnell wieder hergestellt? ...        unberechtigtem Zugriff geschützt? ...     sich Teile wiederverwenden? ...

Flexible Architekturen                            embarc.de                                                                26
Qualitätsziele
                                                     Skalierbarer Durchsatz und
                                                     Antwortzeiten
                         Einheitliche
                         Bedienbarkeit                       Hohe Zuverlässigkeit

                                                         Effiziente Wartbarkeit

                                                     Korrekte Funktionalität

                              Gebotene Sicherheit

                           Einfacher und günstiger            Leicht erweiter-/
                           Betrieb                            integrierbar

Flexible Architekturen                   embarc.de                                  27
Lösungsstrategie
                         Stellt Qualitätsziele und zugeordnete high-level
                         Lösungsansätze in Beziehung zueinander dar.

                                    Form: Tabelle ([ Ziele | Lösungsansätze ]).

                                                                         Architektur-
                                                                         /Lösungsansätze

                           Architektur-
                         /Qualitätsziele

Flexible Architekturen                            embarc.de                                28
Kompakte Darstellung
                         Lösungsstrategie
                         Qualitätsziel                Architekturansatz
                         QZ 1                         Ansatz a)
                                                                           Prägende
                                                      Ansatz b)         Entscheidungen,
                         QZ 2                         Ansatz c)         Konzepte, Muster,
                                                                          Prinzipien ...
                         QZ 3                         Ansatz d)
                         QZ 4                         Ansatz e)
                                                      Ansatz f)
                         ...
                                   Top 3-5
                                Architekturziele

Flexible Architekturen                             embarc.de                                29
Typische Lösungsansätze

Flexible Architekturen   embarc.de   30
Wichtig ...

                    !
                         Die Lösungsstrategie schlägt die
                         Brücke zwischen
                         architekturrelevanten
                         Anforderungen und Eurer Lösung.

Flexible Architekturen       embarc.de                      31
Beispiel
                         Ziel                Passende Lösungsansätze

                                             •   Betrieb in Public Cloud
                         Verfügbarkeit
                                             •   Resilience Patterns
                                             •   Public API
                         Benutzbarkeit
                                             •   Asynchrone Verarbeitung und Messaging

                         Modifizierbarkeit   •   Microservices
                         Wartbarkeit         •   Komplette Automatisierung
                                             •   Einsatz modernster Technologien
                         Attraktivität
                                             •   Viele Lösungen sind Open Source
                                             •   Oauth und OpenID
                         Sicherheit
                                             •   Hoher Datenschutz durch private Cloud

Flexible Architekturen                           embarc.de                               32
High Level Lösungsstrategien

             Laufzeitmonolith                 Microservices

         Klassischer Betrieb                     DevOps

                                      vs.
                 On Premises                 Serverless/Cloud

             Relationale DBs                 NoSQL/In-Memory

                 Langlebigkeit                 Kurzlebigkeit

Flexible Architekturen           embarc.de                      33
Monolith
Flexible Architekturen   embarc.de              34
Microservices – in kurz ...
                     “In short, the microservice architectural style is an
                     approach to developing a single application as a suite of
                     small services, each running in its own process and
                     communicating with lightweight mechanisms, often an
                     HTTP resource API.”
                                                                        (James Lewis, Martin Fowler)

                     Charakteristische Eigenschaften
                         Zerlegung in relativ kleine (fachliche) Services
                         Services sehr lose gekoppelt
                         Services einzeln installierbar und upgradebar
                         Dezentrale Datenhaltung
                         Hoher Freiheitsgrad bei Technologieauswahl

                                            è https://www.martinfowler.com/articles/microservices.html

Flexible Architekturen                             embarc.de                                             35
Laufzeitmonolith vs. Microservices
 q Effizienz (solange nicht zu groß)               q Fördert Domänenorientierung und Fokussierung
                                                   q Erzwingt Modularisierung/saubere Schnittstellen
 q Leichte Installier- und Betreibbarkeit
                                                   q Kleinere Arbeitspakete, funktionale Blöcke leicht
 q Strukturierung möglich (Modulith)                 auszutauschen und zu ergänzen
                                                   q Technische Schulden einfacher kontrollierbar
                                                   q Separate Skalierung, unabhängiges Deployment
 q Schwierige Wartbarkeit bei Big Ball of          q Schnelle Anpassungen im laufenden Betrieb
   Mud                                               (Time-To-Market)
                                                   q Autonom arbeitende Teams
 q Niedrige Strukturiertheit
                                                   q Elastisch auf Lastanforderungen reagieren
 q Unkontrollierte Abhängigkeiten
 q Pathologische Phänomene für                     q Hohe Komplexität beim Deployment und Betrieb
   schlechtes Design (hohe Kopplung,               q Netzwerk-Kommunikation
   niedrige Kohäsion, zyklische                    q Steile Lernkurve, Org.struktur anpassen
   Abhängigkeiten, Zerbrechlichkeit,               q Hoher Automatisierungsgrad notwendig
   Unbeweglichkeit, Starrheit)

Flexible Architekturen                 embarc.de                                                    36
Klassischer Betrieb vs. DevOps
 q Jahrzehntelange Erfahrung                      q Crossfunktionale, autonome Teams
                                                  q Hoher Automatisierungsgrad
 q Fokusierung des Betriebssystems
                                                  q Reproduzierbarkeit, Dokumentation
                                                    und Versionierung durch Infrastructure
                                                    as Code und GitOps
 q Strikte Trennung zw. Betrieb und
                                                  q Kontinuierliche
   Entwicklung                                      Verbesserungsprozesse
 q Aufwändige Fehlersuche                         q Zero-Downtime Deployments, Canary
                                                    Releases
 q Unflexibel und starr
                                                  q Plattformunabhängigkeit durch
 q meist kaum oder nur einfache                     Containerisierung und Kubernetes
   Automatisierungen
 q Lange Beschaffungsprozesse                     q Hohe Teamverantwortung
                                                  q Neue Komplexitätsstufe, steile
 q Wartezeiten für die Entwicklung                  Lernkurve

Flexible Architekturen                embarc.de                                              38
On-Premises vs. Serverless/Cloud (Public)
 q Daten und Software vor Ort                   q Elastisch, auf Lastspitzen reagieren

 q Hoher Datenschutz und –sicherheit in         q Infrastruktur up to date
   eigener Hand                                 q Großes Angebot an Diensten
 q Unterstützung verschiedener                  q Bezahlung nur bei Nutzung
   Deployment-Szenarien (Bare Metal,            q Global verfügbar, regionsbasierte
   VMs, Private Cloud)                            Lastverteilung, Verteilung geschenkt
                                                q Zero-Downtime Deployments, Canary
                                                  Releases, selbst heilende Software

 q Aufwändiger Betrieb (Patches,                q Teuer bei großer Last
   Bugfixes, Sicherstellen der
   Datensicherheit)                             q Daten außerhalb der Organisation
                                                q Alternative Deploymentartefakte
 q Spezielles Personal, ggf. 24/7 Support         (GraalVM, Go, …)

Flexible Architekturen              embarc.de                                            39
Relationale DBs vs. NoSQL/In-Memory
 q Gut verstandene Konzepte                      q Hohe Verfügbarkeit
 q Ausgereifte Datenbanken und Tools             q Gute Skalierbarkeit, große
                                                   Datenmengen
 q Viele verfügbare Entwickler
                                                 q Einfache Datenredundanz
 q ACID Transaktionen (aber gar nicht
                                                 q An Usecase angepasste
   immer notwendig!)                               Datenmodelle (Schemafreiheit)
 q Datenbank-Schema                              q Einfacheres Programmiermodell
                                                   (Aggregatorientierung)

 q Skalierung aufwändig/unmöglich                q Polyglotte Persistenz

 q Allgemeines Datenmodell (Schema)
                                                 q Eventually Consistency (BASE)
 q Impedence Mismatch
   (Objektrelationale Unverträglichkeit)         q Technologie-Zoo, kaum Standards
                                                 q Andere Modelle - Mindchange

Flexible Architekturen               embarc.de                                       40
Langlebigkeit vs. Kurzlebigkeit
 q Vorausschauende, planbare                  q Schnell mit Ideen am Markt (A/B-
   Produktentwicklung                           Testing, Canary Releases)
 q Zukunftssicherheit                         q Schnelles Reagieren auf Änderungen
                                              q Integriert sich gut mit agilen
                                                Methoden
                                              q Automatisiertes Ausrollen durch
                                                Deployment Pipelines (Continuous
                                                Delivery)
 q Langsame Entwicklungszyklen
                                              q Automatisierte Regressions- und
 q Schlecht bei häufigen Änderungen             E2E-Tests
 q Big-Bang Releases (Stop-The-World)
                                              q Aufwändigere Qualitätskontrollen
                                              q Ggf. Kundenunzufriedenheit in Kauf
                                                nehmen

Flexible Architekturen            embarc.de                                          41
Agenda

                   1 Anforderungen klären

                   2 Flexible Lösungsansätze

                   3 Dokumentation

3
                   4 Ausblick

Flexible Architekturen               embarc.de   42
Dokumentation des Entwurfs

  Architekturüberblick               Lösungsansätze
  - Mission Statement                - Architekturstil
  - Kontextabgrenzung                - Technologie-Stack
                                     - Konzepte
  Einflüsse
                                     - Prinzipien
  - Vorgaben
                                     - Zerlegung
  - Architekturziele
                                     - ....
Flexible Architekturen   embarc.de                         43
Was ist ein Architekturüberblick?
 Ein Architekturüberblick macht die zentralen Lösungsansätze Eurer
 Softwarearchitektur für Außenstehende nachvollziehbar.

                     Neue          Entscheider   Teamfremde
                 Teammitglieder    Stakeholder     Kollegen

Flexible Architekturen            embarc.de                          44
Mission Statement

                         Plakative Darstellung der
                         Aufgabenstellung

                         Wenige (2 – 3) Sätze
                         oder Stichpunkte

                         Metapher Produktkarton

Flexible Architekturen    embarc.de                  45
Kontextabgrenzung
 Abgrenzung des Systems und Visualisierung der Benutzer und
 Fremdsysteme, mit denen es interagiert.

                         Form: Graphik, ergänzt um kurze Beschreibungen.

                                                                    Fremdsysteme

                   Benutzer

                                                      System (Blackbox)

Flexible Architekturen                    embarc.de                                46
Systemkontext einer Online-Platform

Flexible Architekturen                embarc.de                47
Was sonst noch dokumentieren?
 Sichten auf das System
 •    Bausteinsicht
 •    Laufzeitsicht
 •    Verteilungssicht

 Querschnittliche Konzepte erklären

 Entwurfsentscheidungen nachvollziehbar festhalten

 Qualitätsszenarien als Ausgangspunkt für quantitative Bewertungsmethoden (ATAM, …)

Flexible Architekturen                embarc.de                                       48
arc42

Vorschlag für ein Template
(G. Starke, P. Hruschka)

 è http://arc42.org/

Flexible Architekturen       embarc.de   49
„Abheften“ in arc42

Flexible Architekturen   embarc.de   50
Agenda

                   1 Anforderungen klären

                   2 Flexible Lösungsansätze

                   3 Dokumentation

4
                   4 Ausblick

Flexible Architekturen               embarc.de   51
Anforderungen
                                 klären

               Architektur                   Architektur
                bewerten                     entwerfen

                              Architektur
                             kommunizieren

                                                  aus: Effektive Software-
                                                 architekturen (G. Starke)

Flexible Architekturen       embarc.de                               52   52
Beeinflussungen und Abhängigkeiten

             Laufzeitmonolith                      Contin
                                                          uou   s Deliv
                                                                       ery
                                                                                              Microservices
                                                 Provi
                                                       sio
         Klassischer Betrieb                                                                       DevOps

                                                                                                Ti
                                                  Konfi inierung

                                                                                                   m
                                                        gurat

                                                                                                    e-
                                                              ion               Persistenz

                                                                                                       To
                                                                                                          -M
                                                                                                          ar
                                                                                                            ke
                                                                                                              t
                 On Premises
                         Provisionierung
                    Automatisiertes Deployment
                                                                                             Serverless/Cloud

             Relationale DBs                       Installiert auf
                                                                                             NoSQL/In-Memory

                 Langlebigkeit                                               Läuft auf
                                                                                               Kurzlebigkeit

Flexible Architekturen                                          embarc.de                                         53
Was bleibt/wird wichtig?

      Schnelligkeit
         Zügige Entwicklung und Ausrollen für schnelle Anpassung an den Markt
         Fehler akzeptieren, daraus lernen

      Flexibilität
         Einfacher Austausch von Bausteinen und Technologien
         Redundanzen in Kauf nehmen

      Skalierbarkeit
         Hohe Anpassbarkeit an wechselnde Bedürfnisse

Flexible Architekturen            embarc.de                                     54
Fazit

      Es gibt nicht die eine flexible Softwarearchitektur

      Alles hat seine Vorteile, aber auch Kompromisse/Herausforderungen

      Stärken/Schwächen kennen, um gute Entscheidungen treffen zu können
         Aber: Anforderungen ändern sich
         Erfahrungen bauen sich auf

Flexible Architekturen               embarc.de                             55
Schlusswort(e)

      Softwarearchitekturarbeit bleibt weiterhin anspruchsvoll

      Moderne Technologien, Architekturstile/-muster eröffnen neue Optionen,
      machen es aber nicht per se einfacher

Flexible Architekturen              embarc.de                                  56
Vielen Dank.
  Ich freue mich auf Eure Fragen!

                            fs@embarc.de

                            @sippsack

                            è xing.to/fsi
Falk Sippach

   Flexible Architekturen                   embarc.de   57
Sie können auch lesen