Upload
michal-balinski
View
172
Download
0
Embed Size (px)
Citation preview
Aplikacje w chmurze (prywatnej)z perspektywy Deva i Opsa
Michał BalińskiArchitekt oprogramowania
Jakub FilipczakIntegrator systemów
May 1, 2023
Czym się zajmujemy?
Oberthur Software Platforms
DIGITALIDENTITY
TRANSPORT& ACCESS CONTROL
MACHINE-TO-MACHINE
MOBILE FINANCIALSERVICES
SMARTTRANSACTIONS
Oberthur Software Platforms
CustomerSystems
Oberthur Cloud Customer Premises
OT Secure Elements
OT R&D PolandOprogramowanie:- serwerowe- wbudowane
(UICC)
Podejście produktowe
BezpieczeństwoSkalowalnośćDostępność
May 1, 2023
Jak pracujemy?
3
FrancjaPolskaUSAFilipinyIndonezjaChinyKorea
~700Inżynierów R&D
100+Osób w R&D Łódź
500+Repozytoriów GIT
500+ VMwspierających rozwój oprogramowania
2K+ kontenerów Docker
1000+ zadań continouus integration50+ Wspólnych bibliotek i komponentóww modelu „internal open source”
>10Multi-dyscyplinarnychzespołów w R&D Łódź
Arch Dev QA Ops
Trochę statystyk
May 1, 2023
Architektura rozwiązań – „chmura mikroserwisów”
Pod „instancja mikroserwisu”
Replication controller„mikroserwis”
Service„endpoint”
Node„host”
May 1, 2023 5
Kontenery - Docker
App
Libs
OS
HW
Klasyczne Środowisko
App#1
Libs
H-OS
HW
Środowisko Wirtualizowane
G-OS G-OS
Libs
App#2 App#1
Libs
OS
HW
Środowisko Wirtualizowane
Docker Engine
Libs
App#2
• Mechanizm lekkiej wirtualizacji• Docker wykorzystuje wbudowane mechanizmy jądra Linux
(cgroups, namespaces) • Tworzy pseudo izolowane środowiska uruchomieniowe
May 1, 2023 6
Linux
Docker
Kubelet
Host
Linux
Docker
Kubelet
Host
Linux
Docker
Kubelet
Host
Linux
Docker
Kubelet
Host
Chmura kontenerów
Linux
Docker
Kubelet
Host
OT PSFPlatformsOT PSF
PlatformsContainer
Pod
OT PSFPlatformsOT PSF
PlatformsContainer
Pod
OT PSFPlatformsOT PSF
PlatformsContainer
PodRepl
icat
ion
Cont
rolle
r
Service
Container
Pod
Service
Container
Pod
Kubernetes
May 1, 2023 7
Aplikacje gotowe na chmurę(ang. cloud native applications)
• Wykorzystują zalety chmury• Elastycznie dostosowują się do
dynamicznej infrastruktury• Bezstanowe usługi• Skalowalne• Zautomatyzowana, deklaratywna
konfiguracja• Wysoko dostępne i odporne na awarie
I. CodebaseII. DependenciesIII. ConfigIV. Backing ServicesV. Build, Release, RunVI. ProcessesVII. Port BindingVIII.ConcurrencyIX. DisposabilityX. Dev/Prod ParityXI. LogsXII. Admin Process
Cechy Praktyki 12-factor
May 1, 2023 8
I - Codebase
Repozytoria z kodem
źródłowym aplikacji
Repozytoria definiujące
obrazy bazowe
(Dockerfiles)
Repozytoria z konfiguracją środowisk i
deploymentów
Rejestry obrazów
i artefaktów
Git
GitGit
Dev
Test
Staging
Produkcja
Codebase
DependenciesInfrastructure as a Code
May 1, 2023
II - Dependencies
9
Repozytoria z kodem
źródłowym aplikacji
Repozytoria definiujące
obrazy bazowe
(Dockerfiles) Repozytoria z konfiguracją środowisk i
deploymentów
Rejestry obrazów
Git
DockerRegistry
Dev
Test
Staging
Produkcja
Env Dependencies
Rejestry artefaktów
Artifactory
Lib Dependencies
Immutable imageswith
bundled deps
9
May 1, 2023 10
III - Config
Repozytoria z konfiguracją środowisk
Git
Konfiguracja Produktu:- wersjonowana- prostsze projekty - zmienne środowiskowe- złożone projekty - pakiet per środowisko
STAGE Serwer QA SerwerDEV Serwer
May 1, 2023 11
IV – Backing services
ContainerContainer
Cassandra
ContainerContainer
MariaDB
ContainerContainer
Redis
ContainerContainer
etcd
ContainerContainer
ActiveMQ
App App App
Usługi wspomagające:
- stanowe- wysoko dostępne- klastrowane- persystentne- skalowalne
May 1, 2023 12
V – Build, Release, Run
Repozytoria z kodem
źródłowym aplikacji
Jenkins
Artifactory
Docker Registry
Artifactory
Repozytoria konfigurcji
Repozytoriumobrazów
May 1, 2023 13
V – Build, Release, Run
Repozytoria konfiguracji
Rejestry obrazów
i artefaktów
JenkinsGreen Junits
Stabilna wersja
Salt Stack/Puppet
QA Serwer #3QA Serwer #2QA Serwer #1
May 1, 2023 14
V – Build, Release, Run
Jenkins/Testy
Integracyjne
QA Serwer #1
Repozytoria konfigurcji
Wersja Promowana
May 1, 2023 15
VI - Processes
Container
Pod
appprocess
containerContainer
Pod
appprocess
container
Container
Pod
appprocess
containerContainer
Pod
appprocess
container
statefull, highly available backing services
Procesy aplikacyjne:
- bezstanowe- skalowalne- luźno powiązane- ulotne- niezależne- każdy w kontenerze
May 1, 2023 16
VII – Port Binding
Kontener
Aplikacja
Biblioteka Serwerowa
Część Aplikacyjna
TCP
TCP
May 1, 2023 17
VIII - Concurency
ContainerContainer
AppsContainer
ContainerApp 1
ContainerApps
ContainerContainer
App 2
ContainerContainer
AppsContainer
ContainerApp 3
ContainerContainer
AppsContainer
ContainerApp 1
ContainerApp 2
ContainerContainer
AppsContainer
ContainerApp 3
ContainerContainer
AppsContainer
ContainerApp 1
AppsContainer
ContainerApp 3
Współbieżność
skalowanie horyzontalne
• ilość instacji• osobne procesy
skalowanie wertykalne• małe instancje• optymalne
wykorzystanie zasobów
asynchroniczność• non-blocking I/O
ContainerContainer
AppsContainer
ContainerApp 1
May 1, 2023 18
IX - Disposability
App App App
• Instancje ulotne (ang. disposable)• Instancje niezmienne (ang. immutable)• Szybko startujące• Wprowadzanie zmian poprzez zastąpienie instancji nową• Polityka „crash only” (brak tzw. „gracefull shutdown”)• Asynchroniczność poprzez kolejkowanie komunikatów
May 1, 2023 19
X – Dev/Prod parity
HW
OS
Libs
App
HW
OS
Libs
HW
OS
Libs
HW
OS
Libs
AppApp App
DEV QA Stage PROD
?? ?
HW
OS
DEV
HW
OS
QA
HW
OS
Stage
HW
OS
PROD
Libs
App
Libs
App
Libs
App
Libs
AppKontener Kontener Kontener Kontener
May 1, 2023 20
XI - Logs
OT PSFPlatformsOT PSF
PlatformsContainer
Pod
OT PSFPlatformsOT PSF
PlatformsContainer
Pod
OT PSFPlatformsOT PSF
PlatformsContainer
Pod
Host
DockerFluentdDriver
stdout
Fluentd ElasticSearch
Kibana
JSON
KubernetesMaster
$kubectl logs POD
May 1, 2023 21
XII - Admin ProcessProcesy administracyjne:
- uruchamiane w tym samym środowisku co aplikacja- korzystające z REPL udostępnianych przez język- lub mechanizmów udostępnianych przez backend
Cassandra Cassandr
a
Docker Docker
CQLSH
App
BSH
App
Docker
TCP
TCP
May 1, 2023 22
Nasza droga
Stare podejście
Kontenery
Orkiestracja I
Orkiestracja II
Chmura (HA)
Custom
Customdocker compose
May 1, 2023 23
Wnioski (lessons learned)• Duża ilość repozytoriów / mikroserwisów jest wyzwaniem
(chociażby świadomość jakie komponenty posiadamy)
• Postawienie, ustabilizowanie i utrzymanie chmury prywatnej – to nietrywialny, kosztowny i długotrwały wysiłek
• Najnowsze technologie – potrafią przysporzyć trudności ;-)
• Aplikacje powinny być tworzone pod chmurę
• Dostęp do logów przez Kibanę – trzeba się nauczyć z tym żyć
• Wdrożenia u klienta (on-premises)o nie zawsze się da tak jak byśmy chcieli (docker, k8s)o klienci mają specyficzne ograniczenia i standardy ITo brak kompetencji docker / kubernetes u klientówo bezpieczeństwo kontenerów
• Wymuszanie najnowszych wersji poprzez usuwanie starych obrazów bazowych Docker
May 1, 2023 24
Rekrutujemy
Arch Dev QA Ops