202205 InfoQ - Building Microservices in Java
202205 InfoQ - Building Microservices in Java
Building
Microservices in Java
Building
Microservices in Java
IN THIS ISSUE
06 20
Spring Boot Tutorial: Project Helidon Tutorial:
Building Microservices Building Microservices with
Deployed to Google Cloud Oracle’s Lightweight Java
Framework
14 29
Virtual Panel: the MicroProfile
Getting Started with
Influence on Microservices
Quarkus
Frameworks
PRODUCTION EDITOR Ana Ciobotaru / COPY EDITORS Susan Conant DESIGN Dragos Balasoiu / Ana Ciobotaru
GENERAL FEEDBACK [email protected] / ADVERTISING [email protected] / EDITORIAL [email protected]
CONTRIBUTORS
With the increasing popularity of microservices in We’ll then make a few changes to containerize the
the industry, there’s been a boom in technologies application using Jib (builds optimized Docker
and platforms from which to choose to build and OCI images for your Java applications without
applications. Sometimes it’s hard to pick a Docker) and a distroless version of Java 11.
something to get started. In this article, I’ll show Jib works both with Maven and Gradle. We’ll use
you how to create a Spring Boot based application Maven for this example.
that leverages some of the services offered by
Google Cloud. This is the approach we’ve been Next, we will create a Google Cloud Platform (GCP)
using in our team at Google for quite some time. I project and use Spring Cloud GCP to leverage Cloud
hope you find it useful. Firestore. Spring Cloud GCP allows Spring-based
applications to easily consume Google services like
The Basics databases (Cloud Firestore, Cloud Spanner or even
Let’s start by defining what we will build. We’ll Cloud SQL), Google Cloud Pub/Sub, Stackdriver for
begin with a very basic Spring Boot-based logging and tracing, etc.
application written in Java. Spring is a mature
framework that allows us to quickly create very After that, we’ll make changes in our application
powerful and feature-rich applications. to deploy it to Google Kubernetes Engine (GKE).
GKE is a managed, production-ready environment
6
for deploying containerized Kubernetes-based
Creating a Google Cloud Project Next, we’ll make sure your machine has application
Setting up a GCP instance is easy. You can credentials to run your application locally:
accomplish this by following these instructions.
This new project will allow us to deploy our gcloud auth application-default login
application to GKE, get access to a database
(Cloud Firestore) and will also allow us to have Enabling the APIs
a place where we can push our images when we Now that we have everything set up we need to
containerize the application. enable the API’s we will be using in our application:
Install Cloud Code • Google Container Registry API - This will allow
Next, we’ll install Cloud Code. You can follow these us to have a registry where we can privately
instructions on how to install Cloud Code to push our images.
IntelliJ. Cloud Code manages the installation of • Cloud Firestore in Datastore mode - This will
Skaffold and Google SDK that we’ll use later in the allow us to store entities in a NoSQL database.
article. Cloud Code also allows us to inspect our Make sure to select Datastore mode so that we
GKE deployments and services. Most importantly, can use Spring Cloud GCP’s support for it.
it also has a clever GKE development mode that
continuously listens to changes in your code You can manage the APIs that are enabled in your
when it detects a change it builds the app, builds project by visiting your project’s API Dashboard.
the image, pushes the image to your registry,
deploys the application to your GKE cluster, starts Creating our Dog Service
streaming logs and opens a localhost tunnel so you First things first! We need to get started with a
can test your service locally. It›s like magic! simple application we can run locally. We’ll create
something important like a Dog microservice. Since
In order to use Cloud Code and proceed with our I’m using IntelliJ Ultimate I’ll go to `File -> New
application, let’s make sure that you log in using -> Project…` and select «Spring Initializr». I’ll
the Cloud Code plugin by clicking on the icon that select Maven, Jar, Java 11 and change the name to
should show up on the top right of your IntelliJ something important like `dog` as shown below:
window:
7
We’ll create a controller class for the Dog and the
The InfoQ eMag / Issue #96 / July 2021
REST endpoints:
@RestController
@Slf4j
public class DogController {
@GetMapping(“/api/v1/dogs”)
public List<Dog> getAllDogs() {
log.debug(“->getAllDogs”);
return ImmutableList.of(new
Dog(“Fluffy”, 5),
new Dog(“Bob”, 6),
new Dog(“Cupcake”, 11));
}
Click next and add: Lombok, Spring Web and GCP
Support: @PostMapping(“/api/v1/dogs”)
public Dog saveDog(@RequestBody Dog
dog) {
log.debug(“->saveDog {}”, dog);
return dog;
}
}
8
@Entity TIP: To quickly test this, you can create an HTTP
9
Notice we are using Google’s distroless image for
The InfoQ eMag / Issue #96 / July 2021
Restricting what’s in your runtime container to This allows your GKE nodes to have permissions to
precisely what’s necessary for your app is a best access the rest of the Google Cloud services. After
practice employed by Google and other tech giants a few moments the cluster will be created (please
that have used containers in production for many check image on page 11).
years. It improves the signal-to-noise of scanners
(e.g. CVE) and reduces the burden of establishing Applications living inside of Kubernetes
provenance to just what you need. Kubernetes likes to monitor your application to
ensure that it’s up and running. In the event of a
Make sure to replace your GCP registry in the code failure, Kubernetes knows that your application
above to match the name of your project. is down and that it needs to spin up a new
instance. To do this, we need to make sure that our
After doing this, you can attempt to build and push application is able to respond when Kubernetes
the image of the app by running a command like: pokes it. Let’s add an actuator and Spring Cloud
Kubernetes.
$ ./mvnw install jib:build
Add the following dependencies to your POM file:
This will build and test the application. Create the
image and then finally push the newly created <dependency>
image to your registry. <groupId>org.springframework.boot</
groupId>
<artifactId>spring-boot-starter-
NOTE: It’s usually a common good practice to use
actuator</artifactId>
a distro with a specific digest instead of using </dependency>
“latest”. I’ll leave it up to the reader to decide what
base image and digest to use depending on the If your application has an application.
version of Java you are using. properties file inside the src/main/
resources directory, remove it and create
Deploying the Dog Service an application.yaml file with the following
At this point, we are almost ready to deploy our contents:
application. In order to do this, let’s first create a
GKE cluster where we will deploy our application. spring:
application:
name: dog-service
Creating a GKE Cluster
To create a GKE cluster, follow these instructions. management:
You’ll basically want to visit the GKE page, wait endpoint:
health:
for the API to get enabled and then click on the
enabled: true
button to create a cluster. You may use the default
settings, but just make sure that you click on the This adds a name to our application and exposes
“More options” button to enable full access to all the health endpoint mentioned above. To verify
the Cloud APIs: that this is working, you may visit your application
10
The InfoQ eMag / Issue #96 / July 2021
at localhost:8080/actuator/health You initialDelaySeconds: 20
should see something like: httpGet:
port: 8080
path: /actuator/health
{ readinessProbe:
“status”: “UP” initialDelaySeconds: 30
} httpGet:
port: 8080
path: /actuator/health
Configuring to run in Kubernetes
In order for us to deploy our application to our Add a service.yaml file with the following:
new GKE cluster, we need to write some additional
YAML. We need to create a deployment and a apiVersion: v1
kind: Service
service. Use the deployment that follows. Just metadata:
remember to replace the GCR name with the one name: dog-service
from your project: spec:
type: NodePort
deployment.yaml selector:
apiVersion: apps/v1 app: dog-service
kind: Deployment ports:
metadata: - port: 8080
name: dog-service targetPort: 8080
spec:
selector: The deployment contains a few changes to the
matchLabels: readiness and liveness probe. This is so that
app: dog-service Kubernetes uses these endpoints to poke the
replicas: 1
app to see if it’s alive. The service exposes the
template:
metadata: deployment so that other services can consume it.
labels:
app: dog-service After doing this, we can now start using the Cloud
spec:
Code plugin we installed at the beginning of this
containers:
- name: dog-service article. From the Tools menu, select: Cloud Code
image: gcr.io/<YOUR GCR -> Kubernetes -> Add Kubernetes Support.
REGISTRY NAME>/dog This will automatically add a Skaffold YAML to your
ports:
application and set up a few things for you so that
- containerPort: 8080
livenessProbe: you can deploy to your cluster by clicking a button.
11
To confirm that all this worked you can inspect the Conclusions
The InfoQ eMag / Issue #96 / July 2021
configuration from the Run/Debug Configurations Congratulations if you made it this far! The
section in IntelliJ. If you click on the Develop on application we built in this article showcases some
Kubernetes run, it should have automatically picked key technologies that most microservices-based
up your GKE cluster and Kubernetes configuration applications would use: a fast, fully managed,
files and should look something this: serverless, cloud-native NoSQL document
Click OK and then click on the green “Play” button database (Cloud Firestore), GKE a managed,
at the top right: production-ready environment for deploying
Kubernetes-based containerized applications and
finally a simple cloud native microservice build with
Spring Boot.
12
The InfoQ eMag / Issue #96 / July 2021
TL;DR
• Using Google
Kubernetes Engine
(GKE) along with Spring
Boot allows you to
quickly and easily set up
microservices.
• Setting up Skaffold
with Cloud Code allows
developers to have
a nice development
cycle. This is especially
useful with starting to
prototype a new service.
13
The InfoQ eMag / Issue #96 / July 2021
Quarkus created quite a buzz in the enterprise Java resources or just a small amount. In most cases,
ecosystem in 2019. Like all other developers, I was we wouldn’t care that much as long as we
curious about this new technology and saw a lot could run the application. However, the Cloud is
of potential in it. What exactly is Quarkus? How now changing the way we develop and deploy
is it different from other technologies established applications.
in the market? How can Quarkus help me or my
organization? Let’s find out. In the Cloud, we pay exactly for what we use. So
we have become pickier with our hardware usage. If
What is Quarkus? the application takes 10 seconds to start, we have
The Quarkus project dubbed itself Supersonic to pay for these 10 seconds even if the application
Subatomic Java. Is this actually real? What does is not yet ready for others to consume.
this mean? To better explain the motivation behind
the Quarkus project, we need to look into the Java and the Cloud
current state of software development. Do you remember when the first Java version was
released? Allow me to refresh your memory — it
From On-Premises to Cloud was in 1996. There was no Cloud back then. In fact,
The old way to deploy applications was to use it only came into existence several years later. Java
physical hardware. With the purchase of a was definitely not tailored for this new paradigm
physical box, we paid upfront for the hardware and had to adjust. But how could we change a
requirements. We had already made the investment, paradigm after so many years tied to a physical box
so it wouldn’t matter if we used all the machine
14
where costs didn’t matter as much as they do in the @Path(“/{id}”)
@GET
15
<?xml version=”1.0”?> </dependency>
The InfoQ eMag / Issue #96 / July 2021
16
</configuration> For convenience, the sample Maven project already
17
To accomplish this, you have to run Quarkus in • Quarkus Start Page
The InfoQ eMag / Issue #96 / July 2021
Resources
• Quarkus Website
18
SPONSORED ARTICLE
19
The InfoQ eMag / Issue #96 / July 2021
Oracle introduced its new open-source This tutorial will introduce Helidon SE and Helidon
framework, Project Helidon, in September 2018. MP, explore the three core components of Helidon
Originally named J4C (Java for Cloud), Helidon SE, how to get started, and introduce a movie
is a collection of Java libraries for creating application built on top of Helidon MP. There will
microservices-based applications. Within six also be a discussion on GraalVM and what you can
months of its introduction, Helidon 1.0 was expect with the upcoming release of Helidon 2.0.
released in February 2019.
Helidon Landscape
The current stable release is Helidon 1.4.4, but Helidon, designed to be simple and fast, is
Oracle is well on their way to releasing Helidon 2.0 unique because it ships with two programming
planned for late Spring 2020. models: Helidon SE and Helidon MP. In the graph
below, you can see where Helidon SE and Helidon
20
MP align with other popular microservices Let’s start with the first version of
21
$ mvn clean package server:
The InfoQ eMag / Issue #96 / July 2021
22
private static void startServer() { We can now build and run this version of our web
Next, we create an instance You can use one of three approaches to implement
of ServerConfiguration, providing immutable security in your Helidon application:
web server information, by invoking
its create() method by passing in the • a builder pattern where you manually provide
statement, config.get(“server”). configuration
The web server is created like the previous We will be using the hybrid approach to implement
example except we use a different version of security in our application, but we need to do some
the create() method that accepts the two instance housekeeping first.
variables, serverConfig and routing.
23
Let’s review how to reference the users defined }
The InfoQ eMag / Issue #96 / July 2021
24
users.put(“admin”, new AppUser(ben. .get(“/admin”, (request,
Now that we have this new functionality built WebServer webServer = WebServer
.create(serverConfig, routing)
into our web server application, let’s update
.start()
the startServer() method to add security .toCompletableFuture()
with Helidon’s implementation of HTTP Basic .get(10, TimeUnit.SECONDS);
Authentication:
System.out.println(“INFO: Server
started at: http://localhost:” + webServer.
private static void startServer() {
port() + “\n”);
Config config = Config.create();
}
ServerConfiguration serverConfig
= ServerConfiguration.create(config.
get(“server”)); As we did in the previous example, we will build
the instance variables, config and serverConfig. We
Map<String, AppUser> users = then build our map of roles to users, users, with
getUsers(config);
the getUsers() method as shown above.
displayAuthorizedUsers(users);
25
accepts the store instance variable we just built to We can now build and run this version of
The InfoQ eMag / Issue #96 / July 2021
validate users in our application. our web server application using the same
Maven and Java commands and execute the
With our provider instance variable, we can now following curl commands:
build an instance of the Security class used to
bootstrap security and integrate it with other • $ curl -X GET http://localhost:8080/ will
frameworks. We use the config() and addAuthenti- return “Greetings from the web server!”
cationProvider() methods to accomplish this.
• $ curl -X GET http://localhost:8080/
Please note that more than one security admin will return “Greetings from the admin,
provider may be registered by chaining together ben!”
additional addAuthenticationProvider() methods.
• $ curl -X GET http://localhost:8080/
For example, let’s assume we defined instance
user will return “Greetings from the user, mike!”
variables, basicProvider and digestProvider, to
represent the HttpBasicAuthProvider and HttpDi-
You can find a comprehensive server
gestAuthProvider classes, respectively. Our securi-
application that demonstrates all three versions
ty instance variable may be built as follows:
of the startServer() method related to the three
core Helidon SE components we just explored.
Security security = Security.builder() You can also find more extensive Helidon security
.config(config.get(“security”))
examples that will show you how to implement
.addAuthenticationProvider(basicProvider) some of the other security providers.
.addAuthenticationProvider(digestProvider) Helidon MP
.build();
Built on top of Helidon SE, Helidon MP is a small,
declarative style API that is an implementation
The WebSecurity class implements
of the MicroProfile specification, a platform that
the Service interface which encapsulates
optimizes enterprise Java for a microservices
a set of routing rules and related logic.
architecture for building microservices-based
The instance variable, webSecurity, is
applications.
built using the create() method by passing
in the security instance variable and
The MicroProfile initiative, formed in 2016 as
the WebSecurity.authentic() method, passed into
a collaboration of IBM, Red Hat, Payara and
the securityDefaults() method, ensures the request
Tomitribe, specified three original APIs - CDI
will go through the authentication process.
(JSR 365), JSON-P (JSR 374) and JAX-RS (JSR-
370) - considered the minimal amount of APIs for
Our familiar instance variable, routing, that we’ve
creating a microservices application. Since then,
built in the previous two examples looks much
MicroProfile has grown to 12 core APIs along with
different now. It registers the webSecurity instance
four standalone APIs to support reactive streams
variable and defines the endpoints, ‘/’, ‘/admin’, and
and GraphQL. MicroProfile 3.3, released in February
‘/user’ by chaining together get() methods. Notice
2020, is the latest version.
that the /admin and /user endpoints are tied to
users, ben and mike, respectively.
Helidon MP currently supports MicroProfile 3.2.
For Java EE/Jakarta EE developers, Helidon MP is
Finally, our web server can be started! After all the
an excellent choice due to its familiar declarative
machinery we just implemented, building the web
approach with use of annotations. There is no
server looks exactly like the previous example.
26
deployment model and no additional Java EE Helidon Quick Start Guides
27
Movie Application GRAALVM_HOME=/usr/local/bin/graalvm-ce-
The InfoQ eMag / Issue #96 / July 2021
$ gu install native-image You can learn more details on what developers can
$ export expect in the upcoming GA release of Helidon 2.0.0.
28
The InfoQ eMag / Issue #96 / July 2021
Virtual Panel: the MicroProfile Influence
on Microservices Frameworks
by Michael Redlich, Senior Research Technician at ExxonMobil Research & Engineering
Since 2018, several new microservices frameworks or framework in order to create cloud-ready
- including Micronaut, Helidon and Quarkus - have applications.
been introduced to the Java community, and have
made an impact on microservices-based and When it comes to the decision to build an
cloud-native applications development. application using either a microservices or
monolithic style, developers should analyze the
The MicroProfile community and specification was business requirements and technical context
created to enable the more effective delivery of before choosing the tools and architectures to use.
microservices by enterprise Java developers. This
effort has influenced how developers are currently In mid-2016, two new initiatives, MicroProfile and
designing and building applications. the Java EE Guardians (now the Jakarta EE
Ambassadors), had formed as a direct response
MicroProfile will continue to evolve with changes to to Oracle having stagnated their efforts with the
its current APIs and most likely the creation of new release of Java EE 8.
APIs.
The Java community felt that enterprise Java had
Developers should familiarize themselves with fallen behind with the emergence of web services
Heroku’s “Twelve-Factor App,” a set of guiding technologies for building microservices-based
principles that can be applied with any language applications.
29
Introduced at Red Hat’s DevNation conference on In mid-2018, Red Hat renamed WildFly Swarm,
The InfoQ eMag / Issue #96 / July 2021
June 27, 2016, the MicroProfile initiative was an extension of Red Hat’s core application
created as a collaboration of vendors - IBM, Red server, WildFly, to Thorntail to provide their
Hat, Tomitribe, Payara - to deliver microservices microservices framework with its own identity.
for enterprise Java. The release of MicroProfile However, less than a year later, Red Hat
1.0, announced at JavaOne 2016, consisted of released Quarkus, a “Kubernetes Native Java
three JSR-based APIs considered minimal for stack tailored for OpenJDK HotSpot and GraalVM,
creating microservices: JSR-346 - Contexts and crafted from the best-of-breed Java libraries and
Dependency Injection (CDI); JSR-353 - Java API for standards.”
JSON Processing (JSON-P); and JSR-339 - Java
API for RESTful Web Services (JAX-RS). Dubbed “Supersonic Subatomic Java,” Quarkus
quickly gained popularity in the Java community to
By the time MicroProfile 1.3 was released in the point that Red Hat announced Thorntail’s end-
February 2018, eight community-based APIs, of-life in July 2020. Quarkus joined the relatively
complementing the original three JSR-based new frameworks, Micronaut and Helidon, that were
APIs, were created for building more robust introduced to the Java community less than a year
microservices-based applications. A fourth earlier. With the exception of Micronaut, all of these
JSR-based API, JSR-367 - Java API for JSON microservices-based frameworks support the
Binding (JSON-B), was added with the release of MicroProfile initiative.
MicroProfile 2.0.
The core topics for this virtual panel are threefold:
Originally scheduled for a June 2020 first, to discuss how microservices frameworks
release, MicroProfile 4.0 was delayed so and building cloud-native applications have been
that the MicroProfile Working Group could influenced by the MicroProfile initiative.
be established as mandated by the Eclipse
Foundation. Second, to explore the approaches to developing
cloud-native applications with microservices and
The working group defines the MicroProfile monoliths, and also the recent trend in reverting
Specification Process and a formal Steering back to monolith-based application development.
Committee composed of organizations and And third, to debate several best practices for
Java User Groups (JUGs), namely Atlanta building microservices-based and cloud-native
JUG, IBM, Jelastic, Red Hat and Tomitribe. Other applications.
organizations and JUGs are expected to join in
2021. The MicroProfile Working Group was able Panelists
to release MicroProfile 4.0 on December 23, 2020 • Cesar Hernandez, senior software engineer at
featuring updates to all 12 core APIs and alignment Tomitribe.
with Jakarta EE 8.
• Emily Jiang, Liberty microservice architect and
advocate at IBM.
The founding vendors of MicroProfile offered their
own microservices frameworks, namely Open • Otavio Santana, developer relations engineer at
Liberty (IBM), WildFly Swarm/Thorntail (Red Platform.sh.
Hat), TomEE (Tomitribe) and Payara Micro (Payara),
• Erin Schnabel, senior principal software
that ultimately supported the MicroProfile initiative.
engineer at Red Hat.
30
InfoQ: How has the MicroProfile initiative, first Tolerance, define APIs that are essential for
Santana: The term cloud-native is still a large gray Santana: Yes, I strongly believe that there is a big
area and it’s concept is still under discussion. If trend with this type of framework especially to
you, for example, read ten articles and books on the explore AOT compilation and the benefits from the
subject, all these materials will describe a different application’s cold start.
concept. However, what these concepts have in
common is the same objective - get the most out The use of reflection by the frameworks has its
of technologies within the cloud computing model. trade-offs. For example, at the application start and
MicroProfile popularized this discussion and in-memory consumption, the framework usually
created a place for companies and communities invokes the inner class ReflectionData within Class.
to bring successful and unsuccessful cases. In java. It is instantiated as type SoftReference, which
addition, it promotes good practices with APIs, demands a certain time to leave the memory.
such as MicroProfile Config and the third factor So, I feel that in the future, some frameworks
of The Twelve-Factor App. will generate metadata with reflection and other
frameworks will generate this type of information at
Schnabel: The MicroProfile initiative has done a compile time like the Annotation Processing API or
good job of providing Java developers, especially similar. We can see this kind of evolution already
those used to Java EE concepts, a path forward. happening in CDI Lite, for example.
Specific specs, like Config, Rest Client, and Fault
31
Another trend in this type of framework is to other areas I think MicroProfile can improve is to
The InfoQ eMag / Issue #96 / July 2021
support a native image with GraalVM. This provide some guidance such as how to do logging,
approach is very interesting when working with require all MicroProfile supporters to support CORS,
serverless, after all, if you have code that will run etc. If any readers have any other suggestions,
only once, code improvements like JIT and Garbage please start up a conversation on the MicroProfile
Collector don’t make sense. Google Group. Personally, I would like to open
up the conversation in early 2021 on the new
Schnabel: I don’t see the trend stopping. As initiatives and gaps MicroProfile should focus on.
microservices become more specialized, there is a
lot more room to question what is being included Santana: Yes, and also improvements that need
in the application. There will continue to be a and can be made on the existing ones. Many things
push to remove unnecessary dependencies and need to be worked together with the Jakarta EE
reduce application size and memory footprint team. The first point would be to embrace The
for microservices, which will lead either to new Twelve-Factor App even more in the APIs. For
Java frameworks, or to more microservices in example, making it easier for those who need
other languages that aren’t carrying 20+ years of credentials, such as username and password, in an
conventions in their libraries. application through the MicroProfile Config API. I
could use JPA and the JMS as examples.
InfoQ: With a well-rounded set of 12 core
MicroProfile APIs, do you see the need for Another point would be how to think about the
additional APIs (apart from the standalone integration of CDI events with Event-Driven Design
APIs) to further improve on building more and increasingly explore the functional world within
robust microservices-based and cloud-native databases and microservices.
applications?
Schnabel: There is still a lot of evolution to come in
Hernandez: Eventually, we will need more than the reactive programming space. We all understand
the 12 core APIs. The ecosystem goes beyond REST, but even that space is seeing some change
MicroProfile and Java; the tooling, infrastructure, as pressure grows to streamline capabilities.
and other stakeholders greatly influence creating There is work to do to align with changing industry
new APIs. practices around tracing and metrics, and I
think there will continue to be some changes as
Jiang: The MicroProfile community adapts itself the capabilities that used to be provided by an
and stays agile. It transforms together with the application server move out into the infrastructure
underlying framework or cloud infrastructure. For be that raw Kubernetes, a serverless PaaS-esque
example, due to the newly established CNCF project environment, or whatever comes next as we try to
OpenTelemetry (OpenTracing + OpenCensus), make Kubernetes more friendly.
MicroProfile will need to realign MicroProfile Open
Tracing with OpenTelemetry. Similarly, the previous InfoQ: How would building cloud-native
adopted technologies might not be mainstream any applications be different if it weren’t for
more. MicroProfile will need to align with the new microservices? For example, would it be more
trend. For example, with the widely adopted metrics difficult to build a monolith-based cloud-native
framework, Micrometer, which provides a simple application?
facade over the instrumentation clients for the
most popular monitoring systems, the MicroProfile Hernandez: When we remove microservices from
community is willing to work with Micrometer.The the cloud-native equation, I immediately think of
32
monolith uber-jars deployments. I feel that the depend on the specifics of its environment (e.g., it
Schnabel: In my opinion, the key characteristics for In summary, there is no default answer. You have
cloud-native applications are deployment flexibility to make your own choice based on your company
and frequency: as long as your application does not setting and culture. Choose whatever suits the
33
company best. You should not measure the approach depend on how well you apply the base
The InfoQ eMag / Issue #96 / July 2021
34
Schnabel: Avoid special code paths. They are hard evolve with either new APIs or changes to existing
Conclusions
In this virtual panel, we asked the expert
practitioners to discuss MicroProfile and
microservices frameworks. We even asked for their
thoughts on the recent trend to return to monolith-
based application development.
35
Read recent issues
Does it feel to you like the We have prepared this eMag In this eMag we want to talk
modern application stack is for you with content created about “Innovations That Are
constantly shifting with new by professional software On Their Way”. This includes
technologies and practices developers who have been massive, root-and-branch
emerging at a blistering pace? working with microservices changes such as Project
We’ve hand-picked a set of for quite some time. If you Valhalla as well as some
articles that highlight where are considering migrating to of the more incremental
we’re at today. With a focus a microservices approach, deliveries coming from Project
on cloud-native architectures be ready to take some Amber such as Records and
and Kubernetes, these notes about the lessons Sealed Types.
contributors paint a picture of learned, mistakes made, and
what’s here now, and what’s recommendations from those
on the horizon. experts.