When moving to the cloud, and specifically when moving towards cloud-native applications, different design patterns apply when compared to the more traditional (on-premises) applications. All these cloud-native design patterns and principles have one common denominator – showing emphasis on scalability and function isolation.
Where traditional applications used to be developed as big monolith solutions housing a large set of functionalities, the more modern and cloud-native applications are a collection of isolated functions that together form the application. The benefit of the more isolated function design is that each function can be designed and developed in relative isolation from the other functions. The microservices paradigm supports this way of implementing systems by its prime design principles around both function isolation and scalability
In a system based on isolated functions, each function must interact with the others to support the system overarching functionality. Usually. no orchestration functionality is available in this architecture. Instead of a system overarching process engine to enable end-to-end functionality, a more choreography approach is used, where the functions themselves are responsible for the execution of a process. Additionally, each isolated function can be scaled up or down by adding more instances of a specific function if required. The need for isolated functionality and the ability to scale isolated functionality is driven by and helps fuel the adoption of microservices.
When developing microservices, you will have a rich set of options and almost every modern language provides solutions and functionality to develop microservices (polyglot approach). One of the most favored approaches at this moment is using Java with the support of Spring. Additionally, you see developers and enterprises moving to an approach where each microservice is deployed within a container for obvious reasons.
Without going into the detail about microservices and containers, on a more abstract level there are three major deployment options within the Oracle Cloud for deploying your microservices: Oracle IaaS, Oracle Container Engine and Oracle Serverless – each with their own benefits and difficulties.
Oracle Container Engine
The Oracle Container Engine provides an excellent tool when you want to leverage your cloud-native solution, delivered as microservices, in an environment with Kubernetes support. By using this cloud service, you can focus on development without having to build your own container and Kubernetes clusters and manage all associated infrastructure complexity. Building and maintaining your own container cluster infrastructure might be required in some very specific cases (see Oracle IaaS). For the majority of enterprises that want to focus on the application, the container service will provide the ideal platform.
Oracle Cloud Infrastructure Container Engine for Kubernetes is a fully-managed, scalable, and highly available service that you can use to deploy your containerized applications to the cloud. Use Container Engine for Kubernetes (sometimes abbreviated to just OKE) when your development team wants to reliably build, deploy, and manage cloud-native applications. You specify the compute resources that your applications require, and Container Engine for Kubernetes provisions them on Oracle Cloud Infrastructure in an existing OCI tenancy.
Oracle Fn, Oracle Serverless or Oracle Function Service is how Oracle is jumping on the serverless compute train.
Oracle is starting with the Fn project. This project has its foundations in the open-source Fn project. The Fn project is an open-source container-native serverless platform that you can run anywhere, in the cloud or on premises. It’s easy to use, supports every programming language, and is extensible and performant.
From a high-level point of view, you can see a function as the next step in decomposing monolith applications. Where microservices are the first step, functions are the next step. that can consist of multiple functions where a function is just that, a logical coded function.
Getting started with Fn is easy; as long as you can run a Docker container, you can run Fn. Oracle is currently working on Fn and building a cloud service for it which will hopefully be available mainstream soon to ensure that companies can take the next step in deploying scalable, isolated functions in the cloud.
Moving to cloud-native application development is an essential step for companies to be able to move forward in their digitalization strategy, become digital masters in their field, and beat the competition. When building cloud-native microservices-based architecture, Oracle offers three choices: Oracle IaaS, Oracle Container Engine, and Oracle Serverless. The Oracle Container Engine is the environment that takes all the infrastructure responsibilities out of the hands of the developers and the DevOps teams. Oracle IaaS, on the other hand, delivers a bare-metal environment that enables all the exotic infrastructure requirements you have. Oracle Fn is the new skin in the game for Oracle for driving serverless architectures.
This post was co-authored by Léon Smiers and Johan Louwers. Léon Smiers is an Oracle ACE and a thought leader on Oracle cloud within Capgemini. Johan Louwers is an Oracle ACE director and global chief architect for Oracle technology. Both can be contacted for more information about this, and other topics, via email, Leon.Smiers@capgemini.com and Johan.Louwers@capgemini.com