Navigating Real-world Challenges and Opportunities in Our Journey

The modern world demands highly efficient solutions, Oracle Cloud Infrastructure (OCI) promises to be the cost-effective answer to these challenges.

In this article, we will share our immersion into the world of OCI, starting with the initial idea of the research, progressing through a real-world use case, and providing an overview of the strengths and weaknesses of OCI in comparison to market competitors. We will conclude our narrative with insights and personal impressions, aiming to offer a comprehensive understanding of what OCI can bring to your business.

Here is a quick overview of the infrastructure:

Regions and Availability Domains: OCI is organised into regions, which are geographical locations where Oracle Cloud services are available. Each region consists of multiple Availability Domains (ADs), which are physically separated data centres within a region. The use of multiple ADs within a region provides high availability and fault tolerance. 

Virtual Cloud Network (VCN): The Virtual Cloud Network is a fundamental building block of OCI that allows users to create their own private network in the cloud. It is isolated from other networks, providing a secure environment for deploying applications. Within a VCN, subnets can be created to further segment resources.

Compute: OCI provides various computing options, including Virtual Machines (VMs) and Bare Metal instances. VMs offer flexibility and scalability for running applications, while Bare Metal instances provide dedicated physical servers for high-performance workloads. Additionally, Container Engine for Kubernetes enables the deployment and management of containerised applications. 

Storage: OCI offers a range of storage services, such as Object Storage for scalable and durable object storage, Block Volumes for high-performance block storage, and File Storage for scalable and secure file storage. These storage options cater to diverse application needs, providing flexibility and reliability. 

Databases: Oracle Cloud Infrastructure provides fully managed database services, including Oracle Autonomous Database, MySQL Database Service, and others. These services offer automated features such as patching, backup, and scaling, allowing developers to focus on building applications rather than managing databases. 

Networking Services: OCI offers various networking services, including Load Balancers for distributing incoming traffic, Virtual Routers for connecting on-premises networks to the cloud, and VPN Connect for secure communication between on-premises and cloud environments. These services enable organizations to build robust and scalable network architectures. 

Security: Security is a top priority in OCI, and it provides tools and features to help users secure their applications and data. Identity and Access Management (IAM) allows users to manage access to resources securely, while the Oracle Cloud Infrastructure Security Services provide additional layers of protection, including DDoS protection and Web Application Firewall. 

Monitoring and Management: OCI provides tools for monitoring and managing resources, such as Oracle Cloud Infrastructure Monitoring and Oracle Cloud Infrastructure Resource Manager. These tools enable users to monitor the performance of their resources, set up alerts, and manage infrastructure as code.

The workflow in OCI typically involves the following steps: 

  • Define Infrastructure: Users define their infrastructure requirements, including virtual machines, storage, and networking components, using the OCI Console, Command Line Interface (CLI), or Infrastructure as Code (IaC) tools. 
    Services: Oracle Cloud Infrastructure Console, Command Line Interface (CLI), Terraform, Resource Manager.
  • Provision Resources: Once the infrastructure is defined, users can provision resources such as virtual machines, storage volumes, and databases in the chosen region and availability domain. 
    Services: Compute, Block Volumes, Object Storage, Autonomous Database, Container Engine for Kubernetes. 
  • Configure Networking: Networking components, such as Virtual Cloud Networks, subnets, and security rules, are configured to establish a secure and isolated network environment for the deployed resources. 
    Services: Virtual Cloud Network (VCN), Subnets, Security Lists, Load Balancer, VPN Connect. 
  • Deploy Applications: Users deploy their applications on the provisioned resources, whether they are traditional monolithic applications or modern microservices-based applications using containers. 
    Services: Compute, Container Engine for Kubernetes, Functions, Oracle Cloud Marketplace. 
  • Monitor and Manage: Continuous monitoring and management of resources are essential for ensuring optimal performance and identifying and addressing any issues that may arise. Users can utilize monitoring tools and management services provided by OCI. 
    Services: Oracle Cloud Infrastructure Monitoring, Oracle Cloud Infrastructure Resource Manager, Logging, Notifications. 
  • Scale and Optimise: OCI allows users to scale their resources based on demand, whether it’s scaling vertically by increasing the size of instances or scaling horizontally by adding more instances. Optimization tools help users manage costs efficiently. 
    Services: Auto Scaling, Compute, Block Volumes, Cost Management and Billing.

The Idea Behind the Research

Our exploration of Oracle Cloud Infrastructure (OCI) began with the aim of assessing its potential in terms of management convenience, documentation quality, and economic attractiveness. We sought to answer the question: Are we ready to recommend OCI usage to our clients based on the outcomes of our investigation? 

To give our experiment a specific direction, we decided to develop a small application utilising at least a set of OCI services commonly found in industrial systems. Thus, we aimed to gain a more practical experience of using the platform.

Embarking on Implementation: A Practical Case Study

In our project, we used the following OCI services: Container Instance, API Gateway, Oracle Object Storage, Autonomous Database, Oracle Function, Oracle Notification Service and Oracle Queue.

Using the services mentioned, we decided to develop an invoice manager application which allows a user to upload and store invoices.

Here is the very basic flow. User publishes an invoice using public endpoint. To store the information about users and their invoices we use Autonomous Database with the following structure.

Here you can see 4 tables: users, invoices, files and audit. The purpose of the first two is straightforward, the 3rd table is used to store references on files related to invoices. Those references are references to the Oracle Object Storage where files linked to the invoice are stored.

4th table contains records about database restarts, it is populated utilizing the OCI functions service. A function is called whenever a database restart event comes, we take event time and event id and retain it. This table can be used to gather important information for further analysis or eliminate issues related to db.

In the current database instance, we have manually created several dummy users to be able to post an invoice, once the app is up and running. But it is possible to add a user using an endpoint. In this case, each new user is automatically subscribed to notifications using email in case something happens with his invoice.

Invoice can have 3 different statuses: 

Each time when invoice is published, “NEW” status is set.

After an invoice is created, we want to verify it, so we can be sure that it is valid. In theory in case of a high workload, this operation can take a while, and this is the moment when Oracle Queue comes into place. Thanks to this service we can postpone an invoice validation process by adding new invoices into the queue.  To read records from this queue we perform scheduled calls using OCI API, then we process it and update invoice status to “VERIFIED”.

Also, it is possible to update the invoice, in this case, we set the status to “UPDATED” and perform the validation task one more time.

After each status change, an email notification is sent to the user.

Our OCI Experience: pros & cons


A comprehensive suite of services: Oracle Cloud provides an extensive array of services encompassing infrastructure as a service (IaaS), platform as a service (PaaS), and software as a service (SaaS). This versatility empowers customers to tailor their selections based on specific requirements, ensuring a customized and scalable approach to meet diverse business needs.

Security and Compliance: A lot of attention is paid to security and access management. Oracle emphasizes security and compliance, providing features such as encryption, identity and access management, and compliance certifications to meet regulatory requirements. 
Some convenient services: Oracle has several convenient services that competitors do not have or are limited in. For example, container instance. A convenient tool to deploy your image in a short time for debugging or testing. 

 Simple pipelines: The setup and configuration of pipelines looks very simple and not complicated even for people who have never set them up (at least using GitHub actions). 
Resource Manager: Resource Manager is a service that helps users automate the deployment of infrastructure resources on Oracle Cloud. It provides a way to define, deploy, and manage infrastructure as code (IaC) using Terraform configurations.


Market Share: Oracle Cloud has a smaller mar share compared to industry giants like AWS, Azure and Google Cloud. This can sometimes limit ecosystem and community support, potentially limiting the availability of third-party integrations and community-driven support. 

Learning Curve: Some users may find OCI’s interface and service configurations less intuitive compared to other cloud providers, potentially resulting in a steeper learning curve.  
Limited Third-Party Integrations: While OCI has a comprehensive suite of services, it may not have as extensive third-party integrations compared to more mature cloud platforms.  

Proprietary Technologies: Oracle frequently advocates for the adoption of its proprietary database and middleware solutions, encouraging users to utilize its exclusive technologies. This strategic approach may result in a scenario of vendor lock-in, where organizations become heavily dependent on Oracle’s proprietary offerings, potentially limiting their flexibility and options for alternative solutions.

Cost Structure: Pricing models can be complex, and users may find it challenging to estimate and optimize costs. Understanding the pricing details is crucial to avoid unexpected expenses. Also, some services are cheaper from competitors than in Oracle Cloud. 
Customer Support: Although Oracle provides comprehensive professional services and support, these services are typically associated with a higher price tag. While the support is extensive, the premium cost may pose a challenge for businesses with budget constraints, making it essential to carefully consider the balance between service quality and associated expenses. In our case, we encountered some difficulties in creating an external repository connection, and support could not help us. 
Service Maturity: While OCI has improved over time, some users have noted that certain services may be less mature or have fewer features compared to competitors. For example: Oracle Cloud Object Storage may have been considered less feature-rich compared to AWS S3 and Azure Blob Storage, which have been established longer and offer a broader set of functionalities. AWS Lambda and Azure Functions were perceived to be more mature serverless computing platforms compared to Oracle Cloud Functions. The level of integrations, features, and ease of use might have differed. 
Difficulties in UI navigating: The UI navigation can be cumbersome and may present difficulties for users in finding and accessing the desired features or settings efficiently. Specifically, we faced an error, and grasping the exact nature of the issue proved to be challenging. This can result in a less-than-optimal user experience, potentially leading to increased time and effort spent on accomplishing tasks within the Oracle Cloud. 
Permission Management Challenges: Configuring permissions for various tasks often appeared more complex than necessary. While things worked once set up, the process of updating existing permissions or creating new ones for different tasks seemed can take an hour, so please consider it once before committing to OCI. 
Community and Ecosystem: The community and ecosystem surrounding Oracle Cloud may be smaller compared to other major cloud providers. This could result in fewer online resources, forums, and community-driven support options, making it essential for users to rely more on official documentation and support channels.


Concluding Insights: Our takeaways and personal impressions of OCI 

It seems that the classic infrastructure runs well, and common modules are easily accessible. Most of the services are also not overpriced compared to competitors.

Nevertheless, we encountered challenges in navigating the user interface and configuring permissions. The UI is “not intuitive” and “takes lots of getting used to”. 
From our viewpoint, a noteworthy challenge in Oracle Cloud stems from its relatively limited popularity and smaller community. This could pose difficulties for the development team when encountering issues not explicitly covered in the documentation, requiring additional effort to comprehend and address. 
If you’re considering using Oracle Cloud, we highly recommend immersing yourself in training courses dedicated to Oracle Cloud before diving into your tasks. Furthermore, delve into thorough research and don’t hesitate to reach out to Oracle’s customer support team to address any concerns that may arise. 
We believe AWS and Azure are more robust and better tailored for smaller businesses. Oracle proves effective if you’re already deeply integrated into their ecosystem, while AWS and Azure excel in catering to general-purpose computing needs. 
So, Amazon adopts a retail-oriented approach, emphasizing low margins and high-volume transactions. Their product focus is on simplicity, often featuring minimal tools with limited functionality, keeping costs low.  
In contrast, Oracle, rooted in enterprise software, excels in delivering intricate, multifunctional, and customizable premium solutions. Recognized for charging premium prices, Oracle prioritizes complexity over simplicity, evident in intricate licensing agreements and sophisticated software functionality. Oracle’s enterprise software mindset, characterized by high margins and low volume, contrasts with Amazon’s retail-oriented strategy.  
While Oracle provides a comprehensive suite of services spanning from Software as a Service (SaaS) to Infrastructure as a Service (IaaS), its cloud operational experience is still behind Amazon. This results in Oracle playing catch-up in various areas, creating occasional challenges for customers. In contrast, Amazon focuses predominantly on Infrastructure as a Service and Platform as a Service, offering a more limited range.