{"id":4118,"date":"2022-12-15T01:01:10","date_gmt":"2022-12-15T01:01:10","guid":{"rendered":"https:\/\/www.javaadvent.com\/?p=4118"},"modified":"2022-12-10T18:44:52","modified_gmt":"2022-12-10T18:44:52","slug":"components-of-cloud-native-java","status":"publish","type":"post","link":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html","title":{"rendered":"Components of Cloud Native Java"},"content":{"rendered":"<h5><strong>WHAT IS CLOUD NATIVE JAVA\u00a0<\/strong><\/h5>\n<p><span style=\"font-weight: 400\">Cloud native is a software approach to building, deploying and managing modern applications in cloud computing environments.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">It allows companies to build highly scalable and resilient applications that can easily be enhanced to meet customer needs without breaking existing functionality. The cloud native approach involves<\/span><b> immutable infrastructures<\/b><span style=\"font-weight: 400\"> which enables the servers that are hosting the applications to remain unchanged after deployment, <\/span><b>microservices<\/b><span style=\"font-weight: 400\"> that allow the product to be broken apart into smaller applications that serve only one purpose, <\/span><b>containers <\/b><span style=\"font-weight: 400\">which are used to store services and allow for the application to run independent of OS and hardware, and many other tools that are making the cloud native paradigm a favorable choice of many modern applications.<\/span><\/p>\n<h5><strong>Microservices<\/strong><\/h5>\n<p><span style=\"font-weight: 400\">Microservices are small autonomous services that work together. They are the foundation that is essential to building cloud native applications.\u00a0<\/span><\/p>\n<h6><strong>\u00a0advantages:<\/strong><\/h6>\n<ul>\n<li><b>Time to market<\/b><span style=\"font-weight: 400\">: The smaller the code base is, the easier it is to develop and release into production.<\/span><\/li>\n<li><b>Productivity<\/b><span style=\"font-weight: 400\">: When new developers join the team they can more easily set up their local development environment, as well as become productive faster.<\/span><\/li>\n<li><b>Extensibility<\/b><span style=\"font-weight: 400\">: When we need new functionality we can just add more microservices. <\/span><\/li>\n<li><b>Replaceability<\/b><span style=\"font-weight: 400\">: When we need to change a part of the application we can modify and redeploy only the respective microservice and not the whole application. <\/span><\/li>\n<li><b>Scalability<\/b><span style=\"font-weight: 400\">: Microservices can be independently scaled. If a certain service is highly used or is essential to the application, it is a great candidate for being scaled &#8211; either horizontally (by having multiple instances of it), or vertically (by adding more CPU and RAM to the machine on which it is deployed).<\/span><\/li>\n<\/ul>\n<h6><strong>Microservice resilience with Spring Cloud<\/strong><\/h6>\n<p><span style=\"font-weight: 400\">Spring Cloud is a project built on top of Spring Boot, which is designed to aid the development of distributed systems such as microservices. <\/span><span style=\"font-weight: 400\">The Spring Cloud suite of projects contains many of the services you need to make your Java applications run in the cloud. These services include: API Gateway, Cloud Configuration, Circuit Breakers, Service Discovery, Tracing, Testing, Distributed messaging, Leadership election and cluster state, Global locks, Load balancing, Service-to-service calls, Routing. Click <\/span><a href=\"https:\/\/spring.io\/projects\/spring-cloud\"><span style=\"font-weight: 400\">here<\/span><\/a><span style=\"font-weight: 400\"> for more information about Spring Cloud.<\/span><\/p>\n<h4><a href=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?ssl=1\">Simple Spring Cloud Architecture example <img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4119\" data-permalink=\"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html\/springcloud\" data-orig-file=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?fit=1488%2C828&amp;ssl=1\" data-orig-size=\"1488,828\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"SpringCloud\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?fit=600%2C334&amp;ssl=1\" class=\"alignnone size-full wp-image-4119\" src=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?resize=600%2C334&#038;ssl=1\" alt=\"\" width=\"600\" height=\"334\" srcset=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?w=1488&amp;ssl=1 1488w, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?resize=300%2C167&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?resize=1024%2C570&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?resize=768%2C427&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?resize=1240%2C690&amp;ssl=1 1240w, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/SpringCloud.png?resize=508%2C283&amp;ssl=1 508w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/h4>\n<h5><strong>Containers<\/strong><\/h5>\n<p><span style=\"font-weight: 400\">Containers and the most widely adopted containerization solution, Docker, are another fundamental part of most modern cloud based Java applications.<\/span><\/p>\n<p><span style=\"font-weight: 400\">They are executable units of software in which application code, along with their libraries and dependencies are packaged together.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">The popularity of containers among IT professionals is growing.<\/span><\/p>\n<p><span style=\"font-weight: 400\">According to a <\/span><a href=\"https:\/\/www.cncf.io\/reports\/cncf-annual-survey-2021\/\"><span style=\"font-weight: 400\">survey<\/span><\/a><span style=\"font-weight: 400\"> conducted by SlashData for Cloud Native Computing Foundation among around 4000 developers from all over the world, 62% of the respondents in Q1 2020 have been using containers and in Q1 2021 &#8211; 73%.<\/span><\/p>\n<p><span style=\"font-weight: 400\">If we take a closer look at the containerization technology we would find some similarities from a conceptual point of view between it and the JVM(Java Virtual Machine). Just like JVM, Docker enables CPU and RAM usage limitation and monitoring. Both technologies achieve portability by isolating the application from its runtime environment. What Docker does additionally is that it packages the application, JVM and all other dependencies together. This ensures that the container will always include compatible versions of the JVM and the application.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Containers also improve on the idea of virtual machines(VMs), where the applications are run on a software emulation of a physical machine.<\/span><\/p>\n<p><span style=\"font-weight: 400\">However, VMs have one big disadvantage &#8211; each application should have its own guest operating system &#8211; this leads to poor horizontal scaling.<\/span><\/p>\n<h6><strong>advantages:<\/strong><\/h6>\n<ul>\n<li><b><i>Lightweight<\/i><\/b><span style=\"font-weight: 400\">: Containers share the machine OS kernel, eliminating the need for a separate full OS instance per application. Their smaller size means they can spin up quickly and better support cloud-native applications that scale horizontally. <\/span><\/li>\n<li><b><i>Portable and platform independent<\/i><\/b><span style=\"font-weight: 400\">: Containers are packing all their dependencies with them, meaning that software can be written once and then run on any hardware and OS without any additional reconfiguration.<\/span><\/li>\n<li><b><i>Supports modern development and architecture<\/i><\/b><span style=\"font-weight: 400\">: Due to their deployment portability across platforms and their small size, containers are an ideal fit for modern development and application approaches \u2014 DevOps, serverless, and microservices as they are built on regular code deployments in small increments.<\/span><\/li>\n<li><b><i>Improves utilization<\/i><\/b><span style=\"font-weight: 400\">: Thanks to their improved design and smaller size compared to VMs, provide more benefits in addition to improving CPU and memory utilization of physical machines. They also enable microservice architectures that can be deployed and scaled more granularly.<\/span><\/li>\n<\/ul>\n<h6><strong>disadvantages:<\/strong><\/h6>\n<ul>\n<li><b><i>Complexity<\/i><\/b><span style=\"font-weight: 400\">: Containers add to the complexity of a project and their impact should be considered when the architecture is designed.<\/span><\/li>\n<li><b><i>Insufficient expertise in container development and management<\/i><\/b><b>: <\/b><span style=\"font-weight: 400\">Finding talent familiar enough with the technology is another common difficulty among IT companies. <\/span><\/li>\n<li><b><i>Redesign<\/i><\/b><b>: <\/b><span style=\"font-weight: 400\">This is an especially important drawback for applications that were not developed as cloud native in the first place (like monolith for example). The architecture redesign and code refactoring introduce a lot of risk that should be carefully calculated.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">With all that said, containers will still grow in popularity in the near future and will be the best choice for modern Java applications. As for legacy solutions, the pros and cons will have to be weighed for each different case.<\/span><\/p>\n<h5><strong>CI\/CD<\/strong><\/h5>\n<p><span style=\"font-weight: 400\">CI\/CD stands for continuous integration, continuous delivery and continuous deployment. This is a methodology for frequently developing code changes more frequently and reliably. Also it is a best practice in agile methodology.<\/span><\/p>\n<h6><strong>Continuous integration<\/strong><\/h6>\n<p><span style=\"font-weight: 400\">Continuous integration focuses on smaller commits and smaller code changes to integrate. A developer commits code at regular intervals, at minimum once a day. The developer pulls code from the code repository to ensure the code on the local host is merged before pushing to the build server. At this stage the build server runs the various tests and either accepts or rejects the code commit. <\/span><\/p>\n<h6><strong>Continuous Delivery and Deployment<\/strong><\/h6>\n<p><span style=\"font-weight: 400\">Continuous delivery (CD) is a software development practice where code changes are automatically built, tested, and prepared for production release. It expands on continuous integration by deploying all code changes to a testing environment, a production environment, or both after the build stage has been completed. Continuous delivery can be fully automated with a workflow process or partially automated with manual steps at critical points. When continuous delivery is properly implemented, developers always have a deployment-ready build artifact that has passed through a standardized test process. With continuous deployment, revisions are deployed to a production environment automatically without explicit approval from a developer, making the entire software release process automated. This, in turn, allows for a continuous customer feedback loop early in the product life cycle. <\/span><\/p>\n<h6><strong>Common CI\/CD tools in Java environment<\/strong><\/h6>\n<p><span style=\"font-weight: 400\">All CI\/CD tools do the same work: They run mundane, repetitive tasks to safely ship iterative code updates to end users. Their functionality covers:<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">build automation, where<\/span><i><span style=\"font-weight: 400\"> build<\/span><\/i><span style=\"font-weight: 400\"> means turning source code into a deployable version,<\/span><\/li>\n<li><span style=\"font-weight: 400\">test automation<\/span><\/li>\n<li><span style=\"font-weight: 400\">deploy automation<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Due to the dynamically evolving cloud-native space in Java the most used CI tools often vary. Among the most popular\u00a0 are <\/span><b>Jenkins, Buddy, TeamCity, Travis CI.<\/b><span style=\"font-weight: 400\"> These tools support a wide specter of platforms and features due to this fact it is hard to determine which one would suit you best. For reference, <\/span><a href=\"https:\/\/www.slant.co\/topics\/1707\/~best-java-continuous-integration-tools\"><span style=\"font-weight: 400\">check out the link <\/span><\/a><span style=\"font-weight: 400\">\u00a0where the Java community provides feedback on the pros and cons of the different software.<\/span><\/p>\n<h6><strong>A complete CI\/CD workflow typically looks like this:<\/strong><a href=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/CICD-Workflow.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4125\" data-permalink=\"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html\/cicd-workflow\" data-orig-file=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/CICD-Workflow.png?fit=512%2C272&amp;ssl=1\" data-orig-size=\"512,272\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"CI:CD-Workflow\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/CICD-Workflow.png?fit=512%2C272&amp;ssl=1\" class=\"alignnone size-full wp-image-4125\" src=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/CICD-Workflow.png?resize=512%2C272&#038;ssl=1\" alt=\"\" width=\"512\" height=\"272\" srcset=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/CICD-Workflow.png?w=512&amp;ssl=1 512w, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/CICD-Workflow.png?resize=300%2C159&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2022\/11\/CICD-Workflow.png?resize=508%2C270&amp;ssl=1 508w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/h6>\n<h6><strong>CI\/CD in JAVA Spring Application<\/strong><\/h6>\n<p><span style=\"font-weight: 400\">Sample project structure:<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">Gradle\/Maven<\/span><span style=\"font-weight: 400\"> are<\/span><span style=\"font-weight: 400\"> used for dependency management, to build and run individual microservices.<\/span><\/li>\n<li><span style=\"font-weight: 400\">Docker <\/span><span style=\"font-weight: 400\">&#8211; you can check in <\/span><b>3.<\/b><span style=\"font-weight: 400\"> For more information on containers <\/span><\/li>\n<li><span style=\"font-weight: 400\">Jenkins <\/span><span style=\"font-weight: 400\">&#8211; essentially defines the automation pipeline with various stages such as build, test, dockerize, run docker container etc. It is used by Jenkins to trigger a job as per the defined pipeline.<\/span><\/li>\n<\/ul>\n<h5><strong>Is Java ready for Cloud native?<\/strong><\/h5>\n<p><span style=\"font-weight: 400\">Java as a whole already has the necessary tools, and enhancements are being made to both the language and the tools that are supporting it, to be part of the cloud native community. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Even though, approaching 28 years of age the language still has a broad community of developers, frameworks and tools that are enabling it to remain in the fast-paced modern industry. Tool providers such as <\/span><b>AWS<\/b><span style=\"font-weight: 400\">, <\/span><b>Docker<\/b><span style=\"font-weight: 400\">, <\/span><b>Kubernetes <\/b><span style=\"font-weight: 400\">and many others, are passionate to integrate Java into their systems as it is a programming language that is still the leading force of a lot of applications and would be of financial benefit to them. <\/span><\/p>\n<p><span style=\"font-weight: 400\">What is probably the biggest setback in Java being cloud native is that the majority of developers are not familiar with all the new tools and technologies that are being used to develop a cloud native application. Small to mid-sized companies do not have the resources to invest in the teaching of those developers which leaves them out of the cloud native space. <\/span><\/p>\n<p><span style=\"font-weight: 400\">However, more and more companies are adopting the cloud native approach and are investing in the development of new skills through internal and external academies for their software engineers, which will inevitably put Java forward in the cloud native space.<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WHAT IS CLOUD NATIVE JAVA\u00a0 Cloud native is a software approach to building, deploying and managing modern applications in cloud computing environments.\u00a0 It allows companies to build highly scalable and resilient applications that can easily be enhanced to meet customer needs without breaking existing functionality. The cloud native approach involves immutable infrastructures which enables the [&hellip;]<\/p>\n","protected":false},"author":247,"featured_media":3218,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[646],"tags":[400,558,251,281],"coauthors":[681,684,685,686],"class_list":["post-4118","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-advent-2022","tag-cloud","tag-cloud-native","tag-java","tag-spring-cloud"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Components of Cloud Native Java - JVM Advent<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Components of Cloud Native Java - JVM Advent\" \/>\n<meta property=\"og:description\" content=\"WHAT IS CLOUD NATIVE JAVA\u00a0 Cloud native is a software approach to building, deploying and managing modern applications in cloud computing environments.\u00a0 It allows companies to build highly scalable and resilient applications that can easily be enhanced to meet customer needs without breaking existing functionality. The cloud native approach involves immutable infrastructures which enables the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html\" \/>\n<meta property=\"og:site_name\" content=\"JVM Advent\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Java-Advent-Calendar-229536173843473\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-15T01:01:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alexander Gruev, Nikolay Hristov, Antoniy Hristov, Ivaylo Ivanov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javaadvent\" \/>\n<meta name=\"twitter:site\" content=\"@javaadvent\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alexander Gruev, Nikolay Hristov, Antoniy Hristov, Ivaylo Ivanov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html\"},\"author\":{\"name\":\"Alexander Gruev\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/#\\\/schema\\\/person\\\/c909441590a69dc3bfd54a5b8e644ac9\"},\"headline\":\"Components of Cloud Native Java\",\"datePublished\":\"2022-12-15T01:01:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html\"},\"wordCount\":1497,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/www.javaadvent.com\\\/content\\\/uploads\\\/2021\\\/12\\\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1\",\"keywords\":[\"Cloud\",\"cloud native\",\"java\",\"spring cloud\"],\"articleSection\":[\"2022\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html\",\"url\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html\",\"name\":\"Components of Cloud Native Java - JVM Advent\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/www.javaadvent.com\\\/content\\\/uploads\\\/2021\\\/12\\\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1\",\"datePublished\":\"2022-12-15T01:01:10+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/#\\\/schema\\\/person\\\/c909441590a69dc3bfd54a5b8e644ac9\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/www.javaadvent.com\\\/content\\\/uploads\\\/2021\\\/12\\\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/www.javaadvent.com\\\/content\\\/uploads\\\/2021\\\/12\\\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1\",\"width\":800,\"height\":800},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/2022\\\/12\\\/components-of-cloud-native-java.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javaadvent.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Components of Cloud Native Java\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javaadvent.com\\\/\",\"name\":\"JVM Advent\",\"description\":\"The JVM Programming Advent Calendar\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javaadvent.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/#\\\/schema\\\/person\\\/c909441590a69dc3bfd54a5b8e644ac9\",\"name\":\"Alexander Gruev\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javaadvent.com\\\/content\\\/uploads\\\/2022\\\/12\\\/alexander-gruev_avatar-96x96.jpega07644b9e233905aafe7fb38a4dc403a\",\"url\":\"https:\\\/\\\/www.javaadvent.com\\\/content\\\/uploads\\\/2022\\\/12\\\/alexander-gruev_avatar-96x96.jpeg\",\"contentUrl\":\"https:\\\/\\\/www.javaadvent.com\\\/content\\\/uploads\\\/2022\\\/12\\\/alexander-gruev_avatar-96x96.jpeg\",\"caption\":\"Alexander Gruev\"},\"sameAs\":[\"https:\\\/\\\/blankfactor.com\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/alexander-gruev\\\/\"],\"url\":\"https:\\\/\\\/www.javaadvent.com\\\/author\\\/agruev\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Components of Cloud Native Java - JVM Advent","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html","og_locale":"en_US","og_type":"article","og_title":"Components of Cloud Native Java - JVM Advent","og_description":"WHAT IS CLOUD NATIVE JAVA\u00a0 Cloud native is a software approach to building, deploying and managing modern applications in cloud computing environments.\u00a0 It allows companies to build highly scalable and resilient applications that can easily be enhanced to meet customer needs without breaking existing functionality. The cloud native approach involves immutable infrastructures which enables the [&hellip;]","og_url":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html","og_site_name":"JVM Advent","article_publisher":"https:\/\/www.facebook.com\/Java-Advent-Calendar-229536173843473\/","article_published_time":"2022-12-15T01:01:10+00:00","og_image":[{"width":800,"height":800,"url":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1","type":"image\/png"}],"author":"Alexander Gruev, Nikolay Hristov, Antoniy Hristov, Ivaylo Ivanov","twitter_card":"summary_large_image","twitter_creator":"@javaadvent","twitter_site":"@javaadvent","twitter_misc":{"Written by":"Alexander Gruev, Nikolay Hristov, Antoniy Hristov, Ivaylo Ivanov","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#article","isPartOf":{"@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html"},"author":{"name":"Alexander Gruev","@id":"https:\/\/www.javaadvent.com\/#\/schema\/person\/c909441590a69dc3bfd54a5b8e644ac9"},"headline":"Components of Cloud Native Java","datePublished":"2022-12-15T01:01:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html"},"wordCount":1497,"commentCount":0,"image":{"@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1","keywords":["Cloud","cloud native","java","spring cloud"],"articleSection":["2022"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html","url":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html","name":"Components of Cloud Native Java - JVM Advent","isPartOf":{"@id":"https:\/\/www.javaadvent.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#primaryimage"},"image":{"@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1","datePublished":"2022-12-15T01:01:10+00:00","author":{"@id":"https:\/\/www.javaadvent.com\/#\/schema\/person\/c909441590a69dc3bfd54a5b8e644ac9"},"breadcrumb":{"@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#primaryimage","url":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1","width":800,"height":800},{"@type":"BreadcrumbList","@id":"https:\/\/www.javaadvent.com\/2022\/12\/components-of-cloud-native-java.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javaadvent.com\/"},{"@type":"ListItem","position":2,"name":"Components of Cloud Native Java"}]},{"@type":"WebSite","@id":"https:\/\/www.javaadvent.com\/#website","url":"https:\/\/www.javaadvent.com\/","name":"JVM Advent","description":"The JVM Programming Advent Calendar","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javaadvent.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.javaadvent.com\/#\/schema\/person\/c909441590a69dc3bfd54a5b8e644ac9","name":"Alexander Gruev","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javaadvent.com\/content\/uploads\/2022\/12\/alexander-gruev_avatar-96x96.jpega07644b9e233905aafe7fb38a4dc403a","url":"https:\/\/www.javaadvent.com\/content\/uploads\/2022\/12\/alexander-gruev_avatar-96x96.jpeg","contentUrl":"https:\/\/www.javaadvent.com\/content\/uploads\/2022\/12\/alexander-gruev_avatar-96x96.jpeg","caption":"Alexander Gruev"},"sameAs":["https:\/\/blankfactor.com","https:\/\/www.linkedin.com\/in\/alexander-gruev\/"],"url":"https:\/\/www.javaadvent.com\/author\/agruev"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-15.png?fit=800%2C800&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":3090,"url":"https:\/\/www.javaadvent.com\/2021\/12\/different-approaches-to-building-stateful-microservices-in-the-cloud-native-world.html","url_meta":{"origin":4118,"position":0},"title":"Different Approaches to building Stateful Microservices in the Cloud Native World","author":"Mary Grygleski","date":"December 23, 2021","format":false,"excerpt":"Cloud Native computing is all about working with stateless data and serverless systems. But we all live in a stateful world, in which data flows through systems inter-connected with one another through complex networks. So how can systems be able to manage and track the flow of data in a\u2026","rel":"","context":"In &quot;2021&quot;","block_context":{"text":"2021","link":"https:\/\/www.javaadvent.com\/category\/2021"},"img":{"alt_text":"valley near snowy mountain during daytime","src":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/11\/pexels-photo-164170.jpeg?fit=1200%2C510&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/11\/pexels-photo-164170.jpeg?fit=1200%2C510&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/11\/pexels-photo-164170.jpeg?fit=1200%2C510&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/11\/pexels-photo-164170.jpeg?fit=1200%2C510&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/11\/pexels-photo-164170.jpeg?fit=1200%2C510&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4542,"url":"https:\/\/www.javaadvent.com\/2023\/12\/multicloud-communication-for-kubernetes-but-with-applications-in-charge.html","url_meta":{"origin":4118,"position":1},"title":"Multicloud Communication for Kubernetes &#8211; But with Applications in Charge","author":"Markus Eisele","date":"December 1, 2023","format":false,"excerpt":"We almost reached the end of another calendar year and the wonderful tradition of the Java Advent Calendar continues into another year. I\u2019ve had the pleasure of either opening or at least contributing to the 24 yearly surprise articles for a few years now and it always lets me be\u2026","rel":"","context":"In &quot;2023&quot;","block_context":{"text":"2023","link":"https:\/\/www.javaadvent.com\/category\/2023"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-1.png?fit=800%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-1.png?fit=800%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-1.png?fit=800%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-1.png?fit=800%2C800&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":4574,"url":"https:\/\/www.javaadvent.com\/2023\/12\/production-grade-kubernetes-for-java-developers.html","url_meta":{"origin":4118,"position":2},"title":"Production-Grade Kubernetes for Java Developers","author":"Kevin Dubois","date":"December 11, 2023","format":false,"excerpt":"What does it mean to be a good Java Cloud Citizen? It's definitely more than just putting an application in a container and deploying it. It is essential to consider factors such as providing real-time health status through fine-grained metrics to optimize your Java application's performance and resilience in the\u2026","rel":"","context":"In &quot;2023&quot;","block_context":{"text":"2023","link":"https:\/\/www.javaadvent.com\/category\/2023"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-11.png?fit=800%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-11.png?fit=800%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-11.png?fit=800%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-11.png?fit=800%2C800&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":3120,"url":"https:\/\/www.javaadvent.com\/2021\/12\/you-need-more-than-containers-a-short-history-of-the-mess-were-in.html","url_meta":{"origin":4118,"position":3},"title":"You need more than containers. A short history of the mess we&#8217;re in.","author":"Markus Eisele","date":"December 7, 2021","format":false,"excerpt":"Lean microservice infrastructures continue to replace classic 3-tier architectures in \u200b\u200benterprise software. Pushing enterprise developers who lived in the fully integrated world of application servers towards dealing with new methodologies and technologies in a cloud-native world. As a matter of fact, distributed architectures differ fundamentally from known, monolithic applications. And\u2026","rel":"","context":"In &quot;2021&quot;","block_context":{"text":"2021","link":"https:\/\/www.javaadvent.com\/category\/2021"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-7.png?fit=800%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-7.png?fit=800%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-7.png?fit=800%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-7.png?fit=800%2C800&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":5703,"url":"https:\/\/www.javaadvent.com\/2024\/12\/5-cool-applications-you-can-build-with-java-and-graalvm.html","url_meta":{"origin":4118,"position":4},"title":"5 cool applications you can build with Java and GraalVM","author":"Alina Yurenko","date":"December 17, 2024","format":false,"excerpt":"There are many cool apps you can build with Java, and GraalVM can make them even better \u2014 faster, smaller, more secure. In the recent years GraalVM and Native Image have gained significant traction in the Java ecosystem, so now building applications with it is easier than ever. There are\u2026","rel":"","context":"In &quot;2024&quot;","block_context":{"text":"2024","link":"https:\/\/www.javaadvent.com\/category\/2024"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-17.png?fit=800%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-17.png?fit=800%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-17.png?fit=800%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2021\/12\/Feature-Image-Day-17.png?fit=800%2C800&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":2296,"url":"https:\/\/www.javaadvent.com\/2019\/12\/getting-started-with-graalvm.html","url_meta":{"origin":4118,"position":5},"title":"Getting started with GraalVM","author":"Oleg Shelajev","date":"December 24, 2019","format":false,"excerpt":"Recently at a conference, I was approached by someone asking whether it's true that GraalVM breaks reflection? Which of course it doesn't. And I explained to them what GraalVM is, what it can do and how to maybe start experimenting with it. And they were happy to learn about it,\u2026","rel":"","context":"In &quot;2019&quot;","block_context":{"text":"2019","link":"https:\/\/www.javaadvent.com\/category\/christmas-2019-is-coming"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2019\/12\/GraalVM-rgb.png.png?fit=655%2C294&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2019\/12\/GraalVM-rgb.png.png?fit=655%2C294&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.javaadvent.com\/content\/uploads\/2019\/12\/GraalVM-rgb.png.png?fit=655%2C294&ssl=1&resize=525%2C300 1.5x"},"classes":[]}],"jetpack_likes_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/posts\/4118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/users\/247"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/comments?post=4118"}],"version-history":[{"count":3,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/posts\/4118\/revisions"}],"predecessor-version":[{"id":4376,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/posts\/4118\/revisions\/4376"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/media\/3218"}],"wp:attachment":[{"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/media?parent=4118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/categories?post=4118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/tags?post=4118"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.javaadvent.com\/wp-json\/wp\/v2\/coauthors?post=4118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}