Welcome back. Until now, we have taken a look at the various OCI Developer Services. In this lesson, let's take a look at a case study which brings all these services together. What we have done for the case study is we have come up with a small hotel chain. The name is vision stays. I know we could have come up with a better name and they have a static website. What they're planning to do is to expand and enhance their website. Today the website looks pretty static, but they want to add functionality like providing capability for end-users to make their own bookings in a self-service manner. They also want to integrate with hotel aggregators. Then they want to use microservices to build this whole solution. What this would look like, they would allow customers to sign up, create an account. They will enable customers to browse hotel availability. Remember, it's a chain so multiple locations are there and make reservations, view bookings all in self-service manner so they could do it on from the website. They also want to share the available inventory in real time with hotel aggregators, let's say third-party aggregators so they can sell, not just on their own website, but they can sell inventory on third-party websites because we know customers actually access third-party booking aggregators. What does it look like right now? Well, this is the website they have right now. It's a very simple website which has just some details like hotel locations and there is a contact us form. Their customers can get details like their phone numbers, etc. Now what do we want to do going forward is they want to convert this into a dynamic website. You can see here, the screen is not that clear, but you can see there is a tab here which says Hotel. There's a tab that says My Bookings and there is a tab which says Sign Out, and you can sign in here, like you can see Customer Login. They want customers to be able to sign-up, sign-in, look at the hotels, look at the inventory all in real time, make those bookings, and then also come back to this website and view the bookings and also be able to update the bookings or cancel the bookings and all that. This is basically what they have and this is what they are planning to do. Now there are various steps in order to do this. Let's assume the current website is running on-premises and it's running in a datacenter, it's getting closed, shut down, so they want to move it to OCI. Typically a migration like this in real life will happen in phases. It's not like suddenly one day this new application would be built in the cloud and everything gets moved over. That can happen as well, but typically these happen in phases because they have to, let say, get out from their existing on-premises datacenter. The first thing you could do as a customer, it would be to migrate the static website to OCI. You would deploy the static website to virtual machines and put behind a load balancer. This would make your application, which is currently static, highly available, so that's the first step. In order to automate this whole process, you could use a service like OCI Resource Manager, which can be used to automate the entire infrastructure creation here, this whole process. You could tear it down, you could create again and you could automate the deployment using OCI Resource Manager. Then the next step you would take would be to enhance the website by using microservices. You can change to a microservices based architecture pattern. You can see all the services being used. In the next slide, let me go through these components in a little bit more detail. The first thing you see here is we have three dedicated microservices: customer, hotel, and booking, and these are given a name service. These are all running as microservices. These microservices implement a specific functional area of the application. Customer microservices is used for registering new customers and getting customer-related data. Booking microservices is used for managing and making bookings. Hotel microservices is used for hotel inventory, including details such as hotel location, room availability, and pricing. Each of these microservices are deployed in containers as you can see here and they are running on Oracle Container Engine for Kubernetes, OKE. You create these microservices, deploy them containers, and run them on OKE. On the database side, you can see that each microservices has its own database. Booking has a booking DB, hotel DB, and customer DB. Now, having one database for each service ensures loose coupling between services because all requests for data go through the service API and not a shared database, you can see here it's not called out. Application leverages Oracle Autonomous JSON Database that has really nice developer friendly document APIs and native JSON support. This is all running in autonomous and JSON database. These are the microservices running on OKE. They are accessing data which is running in dedicated databases, autonomous JSON databases. Then you see these two functions here, now remember we talked about a requirement where this customer can sell inventory through its first-party, but it can also sell through a third-party aggregators. To implement that functionality, we are using functions OCI's serverless offerings. There are two functions here. The first one is get-hotel-details-function, and this is used as an interface to expose the hotel booking application to third-party aggregators to retrieve the hotel details, so whatever details we have here, this as an interface to get that data out to aggregators. Then there is a create-booking-function and this is used to make bookings by third-party aggregators. You can see here, customers are coming to third-party aggregators, they can make these bookings, and then these bookings can go through the create-booking-function here and that function is used for that. We have covered these services earlier in individual lessons, containers microservices running here and then functions is used for implementing this functionality of sharing data with third-party aggregators and providing them an ability to make bookings by their end customers. Now let's look at some other components you are using API Gateway. API Gateway is used to create governed interface for microservices and functions. You can see here, these application actually calls these microservices and these functions through the API Gateway. Now what does that do? This enables end users, folks who are here to sign up, list hotels, query, availability, make reservations and view bookings, all the functionality we talked about which these microservices providing these functions provide. All those go through the API gateway. That's the core of the functionality for the application and then on the right-hand side you see a lot of, I would say, add-on functionality, which is equally critical. Security is very critical for this application, so we leverage a service called Web Application Firewall, WAF. WAF basically can do multiple things but in this context, we're using WAF to add rate-limiting. Rate-limiting basically monitors the frequency of requests from a particular client IP address and limits the number of requests allowed, so we make sure that it's not a lot of traffic comes from a single IP, for example. There are lots of other functionality which are implemented. You also see Key Vault being called here. OCI Vault is used to create and retrieve secrets. This ensures that username and passwords for the JSON database and OCI registry or not hard-coded in the application because not a good practice to hard code security credentials. Then you can see it's not called out on this slide, but the build test and deployment is automated using the OCI DevOps services. OCI DevOps service supports three types of deployment environments, functions, OKE cluster and compute instances. This application uses deployment pipelines to deploy to all three destinations. Finally, the application integrates with OCI observability services such as monitoring, logging, and streaming to monitor the CICD pipelines, view logs, and get an email notification when booking happens. This is a simplified architecture, is quite complex and advanced, this slide tries to do a quick overview of what the microservices component and architecture components look like. Just to recap, first we create all the resources, we deploy it in a static fashion inside a compute instance and then we create these microservices using OKE and functions for serving different purposes. We automate the whole build, test and deployment using deployment pipelines and using leveraging OCI DevOps service. Then we secure the application with components like Web Application Firewall, Vault, an API Gateway, and then finally we integrate application with observability services, logging, monitoring, notification, and streaming. Hopefully this gives you a good overview of how these services would integrate with each other in order to create a modern microservices based application. In the course, we will provide you a link to the developer workshop. Whatever I just went over is available as a hands-on developer workshop. It's quite advanced and beyond the scope of this foundational course. But if you're interested in trying it out, we'll include a link so you can try out this workshop for yourself. I hope you found this case study overview helpful. Thanks for your time.