Kwarc

Kwarc
Deweloper (y) czerwony kapelusz
Pierwsze wydanie 20 marca 2019 ; 3 lata temu ( 20.03.2019 )
Wersja stabilna
2.16.4 / 6 marca 2023 r .; 0 dni temu ( 2023-03-06 )
Magazyn Repozytorium Quarkus
Napisane w Jawa
Platforma Jawa
Typ Ramy aplikacji
Licencja Licencja Apache 2.0
Strona internetowa kwarc .io

Quarkus to framework Java dostosowany do wdrożenia na platformie Kubernetes . Kluczowymi komponentami technologii otaczającymi go są OpenJDK HotSpot i GraalVM . Celem Quarkus jest uczynienie Java wiodącą platformą w środowiskach Kubernetes i bezserwerowych, oferując jednocześnie programistom ujednolicony model programowania reaktywnego i imperatywnego, aby optymalnie obsługiwać szerszą gamę rozproszonych architektur aplikacji.

Historia wersji

Wersja Data Notatki
0,12 20 marca 2019 r Pierwsze wydanie
1,0 Listopad 2019
1.3 marzec 2020
1.7 Czerwiec 2020
1.11 sierpień 2020
1.13 marzec 2021
2.0 Czerwiec 2021
2.2 sierpień 2021
2.4 Październik 2021
2.5.2 Grudzień 2021
2.7.5 Maj 2022
2.13.5 grudzień 2022 r Wersja ostateczna – wersja konserwacyjna
2.16.1 luty 2023 r
Notatka GraalVM to wirtualna maszyna Java do kompilowania i uruchamiania aplikacji napisanych w różnych językach w natywnym pliku binarnym maszyny. Istnieją trzy dystrybucje GraalVM: GraalVM Community Edition (CE), GraalVM Enterprise Edition (EE) i Mandrel. GraalVM CE i EE mają różne wymagania dotyczące wsparcia i licencji . Mandrel jest dalszą dystrybucją GraalVM CE, obsługującą te same możliwości tworzenia natywnych plików wykonywalnych, ale opartą na otwartym kodzie źródłowym OpenJDK. Mandrel ma na celu ułatwienie korzystania z GraalVM przez aplikacje Quarkus poprzez włączenie wyłącznie komponentów GraalVM CE, których potrzebuje Quarkus. Firma Red Hat oferuje komercyjne wsparcie dotyczące używania Mandrel do tworzenia natywnych aplikacji Quarkus od wydania Quarkus 1.7 w październiku 2020 r.

Quarkus oferuje także niemal natychmiastowe skalowanie i wykorzystanie dużej gęstości na platformach orkiestracji kontenerów, takich jak Kubernetes. Przy tych samych zasobach sprzętowych można uruchomić znacznie więcej instancji aplikacji. Po swoim pierwszym debiucie w ciągu następnych kilku miesięcy Quarkus przeszedł kilka ulepszeń, których kulminacją było wydanie wersji 1.0 w społeczności open source w październiku 2019 r. Jako nowe środowisko Quarkus nie musi podejmować prób dopasowywania nowych wzorców i zasad do istniejącej bazy kodu . Zamiast tego może skupić się na innowacjach.

Filary projektowe

Najpierw kontener

Od samego początku Quarkus został zaprojektowany w oparciu o filozofię kontenerową i natywną dla Kubernetes, optymalizując pod kątem niskiego zużycia pamięci i krótkiego czasu uruchamiania.

W czasie kompilacji odbywa się możliwie najwięcej przetwarzania, łącznie z przyjęciem założenia zamkniętego świata podczas tworzenia i uruchamiania aplikacji. Ta optymalizacja oznacza, że ​​w większości przypadków cały kod, który nie ma ścieżki wykonania w czasie wykonywania, nie jest ładowany do maszyny JVM.

W Quarkusie klasy używane tylko podczas uruchamiania aplikacji są wywoływane w czasie kompilacji i nie są ładowane do wykonawczej maszyny JVM. Quarkus również unika odbicia w jak największym stopniu, zamiast tego faworyzuje statyczne wiązanie klas. Te zasady projektowania zmniejszają rozmiar, a ostatecznie także zużycie pamięci aplikacji działającej na maszynie JVM, jednocześnie umożliwiając Quarkusowi pracę w trybie natywnym .

Projekt Quarkus od samego początku uwzględniał natywną kompilację. Został zoptymalizowany pod kątem wykorzystania natywnych możliwości obrazu GraalVM do kompilacji kodu bajtowego JVM do natywnego pliku binarnego maszyny. GraalVM agresywnie usuwa wszelki nieosiągalny kod znaleziony w kodzie źródłowym aplikacji, a także wszelkie jego zależności. W połączeniu z kontenerami systemu Linux i Kubernetesem aplikacja Quarkus działa jako natywny plik wykonywalny systemu Linux, eliminując maszynę JVM. Natywny plik wykonywalny Quarkus uruchamia się znacznie szybciej i zużywa znacznie mniej pamięci niż tradycyjna maszyna JVM. Oto przykład, jak szybko Quarkus może zapewnić znaczną efektywność działania w oparciu o testy Red Hat:

$ ./my-native-Java-rest-app Quarkus uruchomił się w 0,008 s
  • Szybkie uruchamianie (dziesiątki milisekund) umożliwia automatyczne skalowanie w górę i w dół mikrousług na kontenerach i Kubernetesie, a także realizację FaaS na miejscu
  • Niskie wykorzystanie pamięci pomaga zoptymalizować gęstość kontenerów we wdrożeniach architektury mikrousług wymagających wielu kontenerów
  • Mniejszy rozmiar obrazu aplikacji i kontenera

Kodowanie na żywo

Jednym z głównych problemów związanych z produktywnością, przed którym staje większość programistów Java, jest tradycyjny przepływ prac programistycznych w języku Java. W przypadku większości twórców stron internetowych będzie to zazwyczaj:

Napisz kod Kompiluj Wdróż Odśwież przeglądarkę Powtórz

Może to znacznie obniżyć produktywność, ponieważ cykl kompilacji i ponownego wdrożenia może często zająć nawet minutę lub dłużej. Quarkus ma na celu rozwiązanie tego problemu za pomocą Live Coding . Podczas pracy w trybie programistycznym przepływ pracy jest po prostu:

Napisz kod Odśwież przeglądarkę Powtórz

Będzie to działać od razu po wyjęciu z pudełka i nie wymaga specjalnej konfiguracji. Działa to w przypadku pliku Java, konfiguracji aplikacji i zasobów statycznych.

Notatka Po uruchomieniu mvn Compare quarkus:dev Quarkus uruchomi się w trybie programistycznym. Po otrzymaniu żądania HTTP wstrzyma je i sprawdzi, czy jakiekolwiek pliki źródłowe aplikacji nie zostały zmienione. Jeśli tak, w przejrzysty sposób skompiluje zmienione pliki, ponownie wdroży aplikację ze zmienionymi plikami, a następnie żądanie HTTP będzie kontynuowane do ponownie wdrożonej aplikacji. Ponowne wdrożenia Quarkus są znacznie szybsze niż w przypadku tradycyjnego serwera aplikacji, więc w przypadku wszystkich aplikacji oprócz największych powinno to zająć znacznie mniej niż sekundę.

Interaktywny interfejs użytkownika programisty (DEV UI)

Quarkus udostępnia interaktywny interfejs programisty, który umożliwia prezentację wszystkich dodanych zależności, gdy programista uzyskuje dostęp do punktu końcowego http://localhost:8080/q/dev po uruchomieniu trybu deweloperskiego Quarkus za pomocą wiersza poleceń mvn quarkus:dev . Programiści mogą również aktualizować konfiguracje, a zmiany spowodują automatyczną synchronizację pliku application.properties .

Zerowa konfiguracja z usługami deweloperskimi

Instalacja bazy danych w lokalnym środowisku programisty nie jest zadaniem trywialnym, jeśli baza danych ma być taka sama jak wersja produkcyjna. Oczywiście użytkownicy Linuksa (programiści) mogą łatwo uruchomić bazę danych za pomocą narzędzia wiersza poleceń kontenera (np. Docker ) i silnika kontenera (np. Docker ). Nadal nie uruchamiają gotowych do produkcji baz danych (np. PostgreSQL i MariaDB ) ze względu na duże zużycie zasobów (np. procesora, pamięci i miejsca na dysku). Zamiast tego wolą używać magazynów danych w pamięci, takich jak baza danych H2.

Aby rozwiązać ten problem, firma Quarkus zapewnia usługi programistyczne oparte na kontenerach testowych. Na przykład programista może testować aplikacje, jeśli działają w produkcyjnej bazie danych PostgreSQL, a nie w magazynie danych w pamięci H2 w pliku application.properties:

quarkus.datasource.devservices.image-name=postgres:latest

DevServices jest zazwyczaj domyślnie włączone, chyba że istnieje istniejąca konfiguracja. Gdy DevServices jest włączone, Quarkus podejmie próbę automatycznego skonfigurowania i uruchomienia bazy danych podczas działania w trybie programistycznym lub testowym.

Ciągłe testowanie

Testowanie nie jest opcją do tworzenia solidnych aplikacji w procesie tworzenia oprogramowania od monolitu po mikrousługi. Programiści prawdopodobnie myślą o zewnętrznych narzędziach ciągłej integracji (CI), za weryfikację przypadków testowych najprawdopodobniej odpowiada zespół ds. kontroli jakości. Co się stanie, jeśli programiści nie będą musieli integrować narzędzi CI, ale wykonają przypadki testowe w środowisku wykonawczym, w którym rozwijają się i działają aplikacje biznesowe? Quarkus zapewnia funkcję ciągłego testowania za pośrednictwem interfejsu wiersza poleceń oraz interfejsu użytkownika DEV. Ta funkcja eliminuje wysiłki programisty mające na celu integrację zewnętrznego narzędzia CI i zapewnia funkcjonalność przy ciągłym rozwijaniu logiki biznesowej.

Zbudowany w oparciu o standardy

Quarkus opiera się na rozległym ekosystemie technologii, standardów, bibliotek i interfejsów API. Programiści nie muszą spędzać dużo czasu na nauce zupełnie nowego zestawu interfejsów API i technologii, aby skorzystać z korzyści, jakie Quarkus wnosi do JVM lub obrazów natywnych. Wśród specyfikacji i technologii leżących u podstaw Quarkus znajdują się Contexts & Depency Injection ( CDI ), JAX-RS , Java Persistence API (JPA), Java Transaction API (JTA), Apache Camel i Hibernate , żeby wymienić tylko kilka. [ potrzebne źródło ]

Quarkus to także platforma kompilacji z wyprzedzeniem (AOT), optymalizująca kod dla JVM, a także kompilująca do kodu natywnego w celu poprawy wydajności. Wszystkie podstawowe technologie obsługują AOT, a firma Quarkus stale wprowadza nowe technologie, standardy i biblioteki obsługujące AOT.

Wszystkie technologie i możliwości potrzebne do budowania mikrousług są dostępne i zoptymalizowane dla Quarkus. Technologie te wykorzystują wszystkie omówione już optymalizacje czasu kompilacji i działania. Technologie takie jak Keycloak do uwierzytelniania i autoryzacji lub Infinispan do rozproszonego buforowania są zoptymalizowane do użytku w programie Quarkus, niezależnie od tego, czy działają w maszynie HotSpot JVM, czy jako obraz natywny. Zewnętrzni twórcy frameworków i bibliotek mogą skorzystać z tej platformy AOT, aby zoptymalizować je pod kątem Quarkus. [ potrzebne źródło ]

Bibliografia