 Thank you for coming. Yeah, so today, I'm going to talk about Quarkar's bring some of this to the Java developer. So thank you for coming, and welcome to this session. So I'm going to talk about a little bit more at the Java developer perspective, and also the brand new Kubernetes-native Java stack, the Quarkar's application framework, and how to build your serverless application. So my name is Daniel. I'm working for Red Hat as the principal technical product marketing. And also, I've been a long time providing some guidelines and inspiration to how to build your cloud-native application development, and also agile and dev-observe practice. So out of Red Hat, I'm a CNC player ambassador. So if you are interested in about the CNC project, like Kubernetes and Prometheus and Envoy Proxy, just let me know. And if you are interested about my specialty or already a technology, just follow my Twitter or you can follow my GhilliePriceWe. So let's talk about some developer journey for cloud-native application development. So many, many years ago, maybe still some people still are living in there. So there are more than, say, application many, many years ago. So more than, say, application actually really cool because I've been a long time Java developer more than 16 years. But 10 years ago, there was only one architecture, modernized application. That application architecture contains 100% functionality and 100% dependency libraries. But there are two big problems to maintain your modernized application. So for example, if you want to change just a small piece of feature, you need to repackaging everything. And retest everything, like a PROMON test, integration test, and also the regression test and interface test, all tests you should be done that everything. So that's why developer gets started to break down your modernized application and small piece of module. For example, a PROMO module and file-onload module and also interface module. So based on your business functionality, the developer got started to break down your modernized application to small module just like this picture. But still, you, the developer have to packaging your entire module with the single application artifact, such as the Java technology. We can call that one file or year file. And running on top of the big middleware. So that is the half solution at a time. And that's why microservice was born. So microservice enables the developer to run your single module on top of the independent application non-time, such as Java, like a Spring Boot, and Node.js, JavaScript, and Go, Python, Paul. So whatever you want, you can run your single module on single application non-time. And now we jump into the cloud. So you have maybe 100,000 microservices and you can have a multiple application non-time, like a multiple application program languages. And now you are, you need to run your 1000 microservices on the cloud, which means your microservices are running on some network of services like a distributed microservice who can call that. And also you might have a multiple entry point. For example, from another application API or some web browser or mobile devices, also some single small piece of the IoT sensors. And you might have a multiple data source as well. So just 10 years ago, you have only the RDBMS to transact your data sources. But now you have a multiple data source like a data grid, in-memory data grid, or the RDBMS and also NoSQL DBMS, even some just file. So now we are arrived in the function error. So from beginning monolithic application, now you have a distributed microservice running on cloud, sometimes the public cloud and private cloud and also hybrid cloud. And now you have a function. So what exactly that mean the function? So function means you can understand event. So this is three pillars. How it works, you are the function as a service or a serverless platform. So they are already coming up some event from web browser, from mobile devices or the other application APIs. And all event call the map to a single function. And function call back to the backend services. We can call that microservices or cloud-enabled application. So I have a many chance to discuss about this journey and the serverless and also cloud-enabled application platform with many enterprise developers. And I always try to ask this question to enterprise developers. How do enterprise developers imagine the serverless computing? The answer is three things for developer perspective in enterprise companies. First answer is they don't want to worry about infrastructure in terms of how many CPUs, memory, network devices and also storage, they don't want to care about that. Just develop application like a Java application or a JavaScript and just upload the application artifact. And the rest of them will be processed automatically. And the second thing, expectation is auto-scaling. So sometimes your application maybe has some seasonality capabilities. So maybe there are some repeats increasing your workload. Your application should be auto-scaling automatically. And the last thing is the pay as you go, like money. And this picture, actually some people still compute the serverless means there is no server in the room. But that is not true. Actually there is a server full. So why the enterprise developer are thinking about that expectation? Because the Amazon Lambda make it happen. So actually Amazon Lambda really cold and you can just the application, which means the enterprise company doesn't need to any operation team, just developer. And the developer application and upload and the other things prove like a magic. But there are some two big concerns. If you adapt to the manager service like Amazon Lambda to manage your serverless application, two big things came up. The first thing in multi-cloud strategy. More and more and the project company jump into the multi-cloud strategy or hybrid cloud strategy. But if you adapt to just a single and the serverless platform, you can not run your multiple function across the hybrid cloud and the private probably even on-prem cannot do that. And the other thing is more the developer point of view, you have some constraints about the dependency. So for example, if you adapt to Amazon Lambda, you just can develop just a few application language like a Java, JavaScript, something like that. But sometimes developer wants to develop multiple polygon language like a Go, Python, Ruby and Java, JavaScript. So there are two big things to use manager service. So how to solve this kind of problem? The answer is easy, managing by yourself. But some people worry about, isn't really harder to manage by ourselves. But luckily in the meantime, we have such a great technology, such a full things to make it easier, make it faster and even normal complexity. So first thing Linux containers like from the beginning from Docker, but now we move forward to the OCI. So it's a more standard format container image. The container as a default provides you the portability and immutability to run your application across hybrid cloud. And Kubernetes is a defector container occasion platform. I don't want to talk about, it's a really pervasive in the world. And Istio Submash, it's enable you to give some dedicated infrastructure, aka onboard proxy side of the car. So based on Istio Submash, you don't need to worry about non-functional microservice capability, such as the smart or router and advance the deployment strategy, like a cloud deployment and the blue green deployment or AB testing marketing stuff. And also our last thing is the API as a service in a modern application architecture. API is not an option. It's always the, your application should expose your business functionality through the RESTful API. So this is a full new paradigm and technology makes it easier to manage your serverless application platform. And let me draw it down Kubernetes, how Kubernetes impact influence the serverless and function as a service world. So there's a more than 13 serverless and function as a service open source project based on Kubernetes. So, but the fun fact, the Kubernetes is not easy for developer. So when I try to pitch this kind of the cloud neighbor journey for enterprise developer, always the maybe 80% of developer told me, I don't want to learn about Kubernetes. Even some people said to me, what the heck is the Kubernetes Yemo? I mean, it's a Java developer point of view. Maybe you, I believe some of you are filming because the Yemo stop maybe some similar to JSON format. But one interesting example, one of our, the customer's developer just changed the tool line in a Yemo file. And he spent, he takes more than three hours to figure it out what kind of problem because there are some one space indentation caused the, some matter. So developer mainly doesn't want to run about Kubernetes, Kubernetes Yemo file and some object, some like that. So that's why the K-name came up. The K-name based on Kubernetes platform and provide some kind of provide capabilities so developer can build, deploy and manage your microservices or cloud neighbor application as a serverless workloads. So here are the three primarily component of the K-name, the build, serving and eventing. So I'm going to show you a quick demo today about how do the K-name serving to provide the serverless capability based on your application. And one thing is notable, there is your service mesh is a mandatory component of the K-native and build, so just imagine you are familiar with the Docker container. So if you want to create containerized application you need the Docker demo and with some Docker CLI stuff like a Docker build, Docker run, some like that. So K-native has the build features which means it doesn't need to Docker demo to build containerized application. And K-native serving provide some functionality to handle. So for example, if you have any request during the time, your microservice application part will be scaled down to zero automatically just like the serverless mechanism and eventing. Some people wants to create the producer, some people just want to use the consumer and the eventing enable the people to bind to the consumer and the provider. So I'm going to talk a little bit about Corker stuff. So what is Corker? Corker is the, we can call that supersonic subatomic Java. It's a K-native Java stack and you can use the OpenJDK JVM stuff and also GRIVEM because if you use JVM and you need to git compiler and if you use the GRIVEM, you can use the ahead of time compiler. So why I'm going to talk about Corker's because there are so many challenges for Java developers because they don't have a monosay application or a microservice application but they need to develop cloud-able application which means more native on Kubernetes and also microservice even serverless with the same application. And also all Java application on time were born for Kubernetes and container technology. So that's why always the Java application keep fighting with some optimizing performance and some memory footprint and small size file even fast starting time. So that's why Corker's was born after this technology and try to solve the kind of problem. So let me show you a quick demo. So one of the easiest way to get started to Corker's application development, we have the git repository here, github.com slash Corker's.io and this is a 100% upstream project and you can click on Corker's dash quick start. There are many practical example and here is the getting started KNET. I'm gonna use this example but I just a little bit tweak because I don't have enough time to show everything. So I already clone my local environment here just like a Maven Java project structure and I'm gonna use the, you can use any ID tool. So in this case I'm gonna use the Jumin, I'm gonna use the VS code. So once you open your Maven project here, so Docker directory as a default and the Java, KNAV and test directory. It's very similar to typical Maven project. So go to the Java directory and before that I'm gonna quick show you PowerMax ML. So here is the raced version of the Corker's. We're gonna release the 1.0 version rate of September and there was some dependency here. So for example, REST easy. It means to expose the REST API and the unit test and we can use the Corker's Maven plugin which means you can use the Maven command to build package and install. And here interesting part is that we have a profile native. So natively so we can use this profile, we can create the native image. So what is native? It's a curable image, it's curable file like a Go program languages. I'm gonna show you the things. So here is the grouting resources, the simple application example. Just the expose the hello and the return hello. So now I was a Java developer and I already pulled some default application from scratch and now I just make sure, I will just make sure if this default function is working how do we get started? The Maven compile colon depth. So Corker's provide the development mode. So this is really cool. So I just already get started. We just need a 1.3 second to start off and back to the browser. And localhost 8080, there are some, the writing page hello and the exposure hello. Here is a hello. So just like this application is totally working now and let's change the code like a developer the life. So I'm gonna change here the return code. Welcome DevConf 2019. And I'm just save and back to the here and reload the page. Just already changed that. But I didn't even repackaging and rebuild I didn't even restart the mine in long time. Just automatically changed that thing and we just needed here 0.6 second to reload that thing. So end of the day this feature gives some developer, increasing developer productivity. So I just start to create the just now let's say we completed the application developer back to here. I just shut down. So the local environment is dead. Just make sure that. And next thing is we're gonna create the packaging file like a uber jar. How to make it just maybe Korean and packaging. And I'm gonna skip the unit test because the expectation of the unit test return hello but I just changed the code. So that's why I skip the unit test. So already done here. We just five second and make sure the directory target. Here is our uber jar. So running uber jar is exactly same the Java interface just target directory and running. But before that I'm gonna show you so the memory footprint if you use the uber jar. So here is the activity monitor in Macbook. So there is a two JVM already running. It's a background. So when I run here it's one. Okay, just start it. And we just need 0.7 second to start up. Just super fast. And back to here and the load the local environment is working and back to the activity monitor. Here we go. Java yeah this one. So 99.4 megabyte. This is real memory footprint almost the 100 megabyte to run over the small piece of the uber jar based on the focus application. And stop here. And next thing is the normally we're gonna containerize the application. Maybe there are two options. You can enable build or docker. But I'm gonna use docker. It's more familiar with that. So before that I'm gonna packaging using native image. I'm gonna show you what is different between JVM and GraVM technology. So just maybe packaging and using profile native. So normally you're gonna take just a couple of minutes to build because during the build time all dependent libraries will packaging in executable file. It's that that is a big different thing between JVM technology and also GraVM like a native image. So you're gonna take a little bit more time. So during the time I'm gonna show you here is our focus.io official page. So if you are interested about focus this is how to get started to develop your focus application. So click on the get started. So here we'll get started your first application build native image and click on the guide. And there are some practical examples such as how to create a core application and the web application and data application. And for example, here is the cloud section. Here is the how to deploy your application on Kubernetes or a push container platform on also K-Native. So I'm gonna use this example today for a little bit changing, allowing this demo. So back to the here still working on that. And just one more thing is when you build native image that native image only can be running on the operating system or what you build. So for example, this my local machine is a MacBook Pro which means the here target data we have here learning image but when you step the file format. So this file format the Mac OS which means the native running image only run Mac OS which means you cannot run this image on Linux operating system. So I'm gonna show you how to package the Linux operating system format but for that so I'm gonna run this application executable image. Just target, yeah, just get started. This is the Mac Pro, the security problem. This is a super cool. We just needed the nine millisecond to run this application. Just imagine that. So your application maybe you can package it with a JVM or you can package native image but you need to run this application for your serverless framework and platform. So which one could be better to manage it on serverless platform. And back to the here local environment and running load is totally working and I'm gonna split the terminal. Okay. This is the memory, this is the command is showing the memory footprint. This is almost 12 megabyte. So I already showed you if you're using the JVM and the Uberaja you need to more than at least 100 megabyte as a memory footprint. But now you just need 12 megabyte and you just needed nine millisecond to start off. It's a hundred times. Okay and I'm just the native. So I'm gonna read packaging here using the power meter, the native image the dot code is true which means I'm gonna repackaging this application based on to run on Linux operating system. So back to here, it takes a couple of minutes so gonna be boring. So I'm gonna show a little bit interesting stuff. How to get started, the focus application easily. So here is the already the developers.reddit.com slash launch. So if you have some experience to develop spring with the application maybe you are really love to use the spring initializer. It's a very helpful and practical to download and necessarily the dependent library. It's a very similar but more than that because we support back end runtime, dynamic core, spring boot, portals and many application non-time. So once you click on start and you can log in the free reddit developer credential or you can sign with the GitHub or Twitter and LinkedIn whatever you need. Just 100% free and once you log in you can see there's three menu get started to create your application, existing application or sample. So I'm gonna click on create a new application. There are three areas so you can configure front end like using AngularJS. Back end application you can use the dynamic core noJS spring boot. So I'm gonna click on the focus and the beauty of this launcher you can add the back end application capability such as you can add some basic code capability or you can add HTTP API. So once you set up you can click on the download but you can change the artifact name like a devcom demo and click on download and once again now you download here. And next step is totally same just extract this G file and get started application development using your prepare ID tool. Okay back to the environment, yeah just done and make sure file. So now you can see here so Linux operating system the format. So next thing is we're gonna create a container image. So before that I already learning my small the Kubernetes cluster. I'm gonna use a many ship all in on open ship the container platform based on Kubernetes. So I'm gonna use our the many ship the Docker environment first and using Docker build. So here is the outward Docker directory the focus application framework provides two type of the Docker file. The first thing is the JVM you can you can containerize the application using here the job file and the native image just like the runner, runner image file. And there are the KNAB directory. So this is a minimal version. That's why you can see just servicing YAML file based on the KNAB serving using Kubernetes CRD definition. But if you download the quick start KNAB you can find the more than that like a service account and secret and PVC the other things based on our default example using KNAB build. But today I'm gonna do make it quick. So I'm gonna use the Docker build. So I gonna create Docker build in the service YAML file we gonna use this Docker image tab. So just so we just done our Docker build just to make sure Docker image and reader. So we just building the Docker image. So next step I'm gonna deploy this application using this service YAML it's a defined KNAB serving. For both of that I'm gonna show you the mini-shift cluster. So one of the benefit of a mini-shift provide the web console. So I'm currently I'm using the OpenShift 3 level where some people already familiar with the OpenShift 4.1. So like I mentioned, the Istio service mesh already deployed here. So part already working on that and here is the KNAB build and KNAB serving. In OpenShift 4.1 the KNAB build, KNAB serving, KNAB eventing will be provided based on operator. The one more thing is here is the computer made and KNAB serving namespace and computer autoscaler. And here we go. So it's a scale two down to zero which means if you have any request, during this time your application part will be scaled down to zero automatically just like serverless capability. So we're gonna show you the things also. So I'm gonna create the empty namespace focus on KNAB demo there is nothing in there. Back to the BS code I'm gonna create the terminal and make sure we see get part there's no part and you can also cube CTL, cube CTL get so nothing in there. So I'm gonna deploy here just to make sure the current project, the same namespace. So I'm gonna here the cube CTL apply and this YAML file. Just run creating let's see yet automatically the application initialize. So back to the here environment. So part is still running on that. So once the running on that I click on the here and the logo file and now you can see here. So 21 millisecond to one because it's a little bit different because you're learning time it's a local environment is just a run but on Kubernetes download the image and a little bit more of the spend time. So back to here just to make sure functionality. So I'm just create the code script here we go with the same result here. So what is the code the script I'm gonna show you there. So you know what the KNAV using Istio service mesh which means the Istio ingress gateway as a default needed will deal with the all incoming and upcoming network trappy. So that's why I'm gonna put in the that the ingress gate to service domain and I'm gonna call that things based on this script. Just let keep it down let it down I'm gonna I'm not gonna decode this service during just more than 30 seconds. So let's see scale down to the zero automatically. So back to the my slides there I don't have some couple of slides there as take away today by slow. So there are a couple of benefit when you use a focus application framework and long time for your cloud native microservice even serverless application development. The first thing is developers you already saw that there's a rivalry load just in a second and no configuration. This is really fun for developer. And second thing is just my t-shirt supersonic subatomic there are two things supersonic means a fast super fast like the Queen's the song. And the subatomic is a very small piece. So here is the memory footprint just 13 megabyte with the gravity M and open dedicated 74. If you are have a sort of logic still gravity M 35 and open dedicated 100 that we and the traditional stack is more than 200. And the starting time is a supersonic you already saw there just a millisecond to start up and JDK one or two seconds just like spring boot but you are still not good enough for your serverless application platform. And the other thing is developer can you will find imperative in the reactive application program. So these days in the enterprise environment so the reactive system or more popular but problem is you need to develop reactive system in a different language preference such as you just use the spring boot like Java technology for traditional application like a service the microservice but you need to some Node.js or the other some application on time for reactive system. But with the focus you don't need to do that just the same application but add the annotation. The left side just inject right side inject also stream CAPCA for reactive system. And last thing is the is up you can use the latest open source project you can call that the best of a breed framework and standards. So here is a actually we have more than 55 zero extension so both as hibernate and you can monitor based on Yeager, Prometheus and you can deploy Kubernetes, OpenShift and Apache Camo, Apache CAPCA and for integration and distributing system and you can use the impence pan to data grid. So here's some resources. So I already published my article in open source.com it's a three years to how to build, enable your summer less platform based on Kubernetes Apache OpenWisk and multiple open source project. And the other thing is the how to build your KNAB component like a serving build configuration. And last to give repository we have a KNAB tutorial. You can use that for free. It's a very easy and you can learn that. So if you're more interested on corkers, there are corker style you already show that and there are jewelry chair. You can anyone can participate in and ask any technical issue. And there are Twitter, you can follow on their things. And just back to the environment. Okay, here we go. So the container is already terminating and back to the web console. Yeah, just terminating down to zero. In the meantime, we catch up the takeaways. So if I call the service once again and back to the here. So the service automatically scale up like expectation of a summer less platform. So KNAB will make it happen. But problem is the you can use KNAB on Kubernetes. But you needed to pick one application on time. Which one is more appropriate for your summer less platform. So back to the here. And just the output is same. And last thing is the, here is the YouTube channel. So we keep publishing video recording. It's just a five minute recording. I also created the corkers on Kubernetes. So just be sure to subscribe if you have interesting about corkers application. There are very practical and example, such as how to build application, how to deploy. And how to create the custom extension, something like that. Okay, I think this is done. So any question? Yep. Great talk. This is all really interesting. And I think it'd be great for a brand new application. You know, Greenfield Development. But I have a monolithic application that's at least 12 years old. That's about 200,000 lines of code in Java. With the traditional deployment of a war file to an application server. And I'm wondering, are there any resources to help people like me migrate those 200,000 lines of code into corkers? Yes. That's a really good question. So actually many people ask me, we have maybe a thousand monolithic application running on Oracle or IBM or the JVOS. But how to migrate to some brand new stuff? So actually it depends on the complexity of your application. But we provide some migration tool. It's a 4.3, the RHA EMT, Retail Application Migrant Toolkit. But currently they're just providing some policy from the JVM, I mean the Oracle and IBM open source project. And we're gonna supply them to print the corkers as well. So the way how to use that tool, you can just upload your Java file or the Classics file properly, even artifact like a war file or a job file. And just checking some options like a package name or the target environment like a JVM 11 or a JRE 11 or a JVC AP coming soon in the corkers. And at the end of the result, they will provide the storing point. The storing point, which means the one point is the kind of estimation three hours, four hours to migrate by the senior Java developers. So we are working on to provide that thing. But some people maybe needed to rewrite, not migration, rewrite your whole bunch of applications. So really good question, thank you. Okay, I'm gonna stick in around here. So thank you for coming. Thank you. Thank you.