Beginnen Sie mit serverlosem Java mit dem leichtgewichtigen Framework Micronaut!

Serverless ist sehr aufregend. Einige Leute sagten, dass Java aufgrund des sogenannten Kaltstartproblems nicht für Serverless geeignet ist, aber die Situation hat sich aufgrund des Auftretens von Mikroframes wie Micronaut, die dieses Mal eingeführt wurden, und der nativen Bilderzeugungsfunktion (Substrate VM) von Graal VM geändert. Es hat sich sehr verändert.

Was den Fluss hier betrifft, gibt es wundervolle Vorlesungsmaterialien von @_kensh und @jyukutyo bei "JJUG CCC 2019 Fall". Seien wir also gespannt, sie zu sehen.

Jetzt machen wir mit Micronaut tatsächlich serverloses Java!

Warum Mikronaut?

Micronaut behauptet, in seiner Catch-Kopie ein "Framework für Serverless" zu sein. Wir haben auch eine Sitzung über Micronaut und Lambda bei "re: Invent 2019" abgehalten. Im Vergleich zu anderen Frameworks habe ich mich auf Serverless konzentriert und fand es persönlich sehr attraktiv, also habe ich mich für diese Zeit entschieden.

Gibt es einen anderen Rahmen?

Ich denke, es gibt drei wichtige Mikro-Frameworks, die von Java verwendet werden können (JVM-Sprachen wie).

All dies sind Frameworks, auf die ich mich in Zukunft freue. Ich habe die Fangkopie usw. verglichen. Bitte beziehen Sie sich darauf.

Kopie fangen

Rahmen Kopie fangen Freie Übersetzung
Micronaut A modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications. Es ist ein modernes Full-Stack-Framework für Microservices und ohne Server
Quarkus A Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM. Kubernetes natives Framework, optimiert für OpenJDK HotSpot und GraalVM
Helidon Lightweigt. Fast. Crafted for Microservices. Es ist ein leichtes, schnelles Framework für Microservices.

Google Trends (USA, letztes Jahr)

Screen Shot 2019-12-04 at 23.01.22.png

GitHub Star Count

Screen Shot 2019-12-04 at 22.59.19.png https://www.githubcompare.com/

Andere

Micronaut-Setup

Jetzt richten wir Micronaut ein. Auf der offiziellen Website wird die Installation mit SDKMAN empfohlen. Installieren Sie sie daher gemäß diesem Verfahren.

SDKMAN-Installation

$ curl -s https://get.sdkman.io | bash

Starten Sie das Terminal neu oder führen Sie die folgende Shell aus

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

OK, wenn der Befehl sdk übergeben wird

$ sdk version
SDKMAN 5.7.4+362

Micronaut installieren

$ sdk install micronaut

OK, wenn der Befehl mn übergeben wird

$ mn -V
| Micronaut Version: 1.2.7
| JVM Version: 11.0.5

Erstellen von Lambda-Funktionen in Micronaut

Die Projektvorlage wird über den Befehl mn erstellt. Sie können es im interaktiven Modus starten, indem Sie nur mn eingeben. Dies ist praktisch, da Sie auch Befehle ausführen können. Sie können auch den Befehlsverlauf verfolgen.

$ mn
| Starting interactive mode...
| Enter a command name to run. Use TAB for completion:
mn> 

Sie können überprüfen, wie der Befehl mit mn> help verwendet wird.

mn> help
Usage: mn [-hnvVx] [COMMAND]
Micronaut CLI command line interface for generating projects and services.
Commonly used commands are:
  create-app NAME
  create-cli-app NAME
  create-federation NAME --services SERVICE_NAME[,SERVICE_NAME]...
  create-function NAME
・ ・ ・

Dieses Mal möchte ich eine Lambda-Funktion erstellen, also verwenden wir die Funktion "create-function".

mn> create-function hello-world
| Generating Java project...
| Function created at /Users/cojohnny/micronaut/hello-world
| Initializing application. Please wait...

Verlassen Sie den interaktiven Modus einmal und überprüfen Sie das generierte Projekt.

mn> exit
$ cd hello-world/
$ tree
.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── micronaut-cli.yml
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── hello
    │   │       └── world
    │   │           ├── Application.java
    │   │           ├── HelloWorld.java
    │   │           └── HelloWorldFunction.java
    │   └── resources
    │       ├── application.yml
    │       └── logback.xml
    └── test
        └── java
            └── hello
                └── world
                    ├── HelloWorldClient.java
                    └── HelloWorldFunctionTest.java

Werfen wir einen Blick auf die generierte Quelle. Die Apply-Methode von HelloWorldFunction.java ist die Lambda-Funktion. Die aktuelle Implementierung gibt nur die Eingabe-JSON-Einstellung für den Namen zurück.

HelloWorldFunction.java


package hello.world;

import io.micronaut.function.executor.FunctionInitializer;
import io.micronaut.function.FunctionBean;
import javax.inject.*;
import java.io.IOException;
import java.util.function.Function;

@FunctionBean("hello-world")
public class HelloWorldFunction extends FunctionInitializer implements Function<HelloWorld, HelloWorld> {

    @Override
    public HelloWorld apply(HelloWorld msg) {
         return msg;
    }

    /**
     * This main method allows running the function as a CLI application using: echo '{}' | java -jar function.jar 
     * where the argument to echo is the JSON to be parsed.
     */
    public static void main(String...args) throws IOException {
        HelloWorldFunction function = new HelloWorldFunction();
        function.run(args, (context)-> function.apply(context.get(HelloWorld.class)));
    }    
}

Lassen Sie uns mit "gradlew" bauen.

$ ./gradlew assemble

Zwei Arten von Gläsern sind abgeschlossen.

$ tree build/libs/
build/libs/
├── hello-world-0.1-all.jar
└── hello-world-0.1.jar

Die mit "-all" am Ende des Dateinamens ist "Fat Jar", das die abhängigen Bibliotheken enthält. Laden Sie diese also auf Lambda hoch.

Lambda-Funktion einrichten

Laden wir die erstellte "hello-world-0.1-all.jar" auf AWS hoch. Setzen Sie im Handler "hello.world.HelloWorldFunction :: apply".

image.png

Ausführung der Lambda-Funktion

Führen wir nun die Lambda-Funktion aus. Legen Sie den JSON-Wert der Anforderung über die Schaltfläche "Test" oben in der Lambda-Konsole fest. Geben Sie für JSON Folgendes an.

{
  "name": "Lambda"
}

image.png

Führen Sie "Test" aus! Es funktionierte!

image.png

Zusammenfassung

Diesmal war es nur ein einfacher Prozess, aber Sie können problemlos eine Lambda-Funktion erstellen und ausführen, die ein Framework enthält. Durch die Verwendung eines leichtgewichtigen Frameworks wie Micronaut wird es möglich sein, Lambda unter Verwendung der umfangreichen Funktionen des Frameworks zu erstellen, sodass die Anwendung der serverlosen Architektur auf große Anwendungen anscheinend weiter zunehmen wird.

In Bezug auf den Kaltstart, der das größte Problem darstellte, werden die Hürden für die Anwendung in der Produktionsumgebung immer geringer, da neulich eine leistungsstarke Lösung namens "Provisioned Concurrency" vorgestellt wurde, die auf der re: Invent 2019 angekündigt wurde.

Ich freue mich sehr auf die Welt ohne Server, die 2020 voraussichtlich weiter expandieren wird! Insbesondere selbst diejenigen, die mit weniger Servern nicht allzu vertraut waren, waren an einem großen Java-System beteiligt. Ich denke, dass es zu Beginn im Voraus ist. Beginnen wir gemeinsam mit serverlosem Java!

Referenz

Probieren Sie die neuesten Java-Frameworks, Helidon, Micronaut, Quarkus zusammen bis zum nativen Image aus Micronaut User Guide AWS Lambda announces Provisioned Concurrency

Recommended Posts

Beginnen Sie mit serverlosem Java mit dem leichtgewichtigen Framework Micronaut!
[Java] [Play Framework] Bis das Projekt mit Gradle gestartet wird
[Java] Ermitteln Sie das Datum mit der LocalDateTime-Klasse
Grundlegendes zum MVC-Framework mit serverseitiger Java 1/4 View
Grundlegendes zum MVC-Framework mit serverseitigem Java 3/4 Controller
Grundlegendes zum MVC-Framework mit dem serverseitigen Java 2/4 -Modell
Beginnen Sie mit Gradle
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
Erfahrene Java-Benutzer beginnen mit der Entwicklung von Android-Apps
[Java] Holen Sie sich das Datum 10 Tage später mit der Calendar-Klasse
Beginnen Sie mit Spring Boot
Erste Schritte mit Java Basics
Im ersten Jahr versuchte der Java-Entwickler bei udemy, mit PHP zu beginnen
Jetzt ist es an der Zeit, mit der Stream-API zu beginnen
Beginnen wir mit der parallelen Programmierung
Zurück zum Anfang, Erste Schritte mit Java ② Steueranweisungen, Schleifenanweisungen
[Java1.8 +] Mit LocalDate das Datum des nächsten × Tages abrufen
Bean Validation mit Micronaut (Java) hinzufügen
Überlegungen zum Java Persistence Framework 2017 (1)
Ich habe das Java-Framework "Quarkus" ausprobiert.
Folgen Sie dem Link mit Selen (Java)
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
Holen Sie sich das Ergebnis von POST in Java
[Java] Listen- / Kartenelemente mit Iterator abrufen
Erraten Sie das Java Persistence Framework 2017 (3) Reladomo
Erste Schritte mit Ruby für Java-Ingenieure
[Java] Ermittelt den Tag eines bestimmten Tages
[Hinweis] Erste Schritte mit Rspec
Einführung in Java ab 0 Teil 1
[Java] So erhalten Sie das aktuelle Verzeichnis
Beginnen Sie mit der Funktionsweise von JVM GC
So erhalten Sie das Datum mit Java
[Java8] Durchsuchen Sie das Verzeichnis und holen Sie sich die Datei
Versuchen Sie es mit der Wii-Fernbedienung in Java
Java-Framework
Beginnen wir mit Java-Create a Development Environment ②
Beginnen wir mit Java-Create a Development Environment ①
Links & Memos für den Einstieg in Java (für mich)
[LeJOS] Lassen Sie uns den EV3-Motor mit Java steuern
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
Verwendung des Java-Frameworks mit AWS Lambda! ??
[JAVA] Nur den Dateinamen abrufen, ausgenommen die Erweiterung
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
[Java] Holen Sie sich Bilder mit der Google Custom Search API
Erste Schritte mit Eclipse Micro Profile
Vielleicht funktioniert es! Beginnen wir mit Docker!
Erste Schritte mit Doma-Using Joins mit der Criteira-API
Finden Sie die Fibonacci-Nummer mit dem Fork / Join Framework
Rails-Anfänger haben versucht, mit RSpec zu beginnen
[Java] So erhalten Sie die endgültige umgeleitete URL
Erste Schritte mit Doma-Einführung in die Kriterien-API
Java beginnend mit JShell-A Einblick in die Java-Welt
[LeJOS] EV3-Sensorwert per Fernzugriff mit Java abrufen
Kommen Sie mit Java-Containern in Cloud Run zurecht
Zurück zum Anfang und erste Schritte mit Java ① Datentypen und Zugriffsmodifikatoren
[DDD] Was ist die am besten zugängliche Architektur, um mit domänengesteuertem Design zu beginnen?