0%

This article will introduce how to use Oracle Cloud to build a highly available, cross-regional system. We know that high availability describes a system that is available most of the time and can provide us with services. High availability means the service is still available even during a hardware failure or system upgrade. Eliminate single points of failure through proper use of deploying instances across multiple availability domains
We’ll create load balancers in three different regions, each with two servers at least behind them that use the same application and expose the same ports.

Let’s take a look at our system design architecture design first.
architecture

In this architecture, We create three load-balancers distributed in the us-west, us-east, and Europe regions.
So we have three regions with identical resources. And the traffic will route to the specific load balancer with rules. And fallback to other load balancers.
We’ll show how to create this architecture step by step

Read more »

for example we will acquire ssl certificate for ezioruan.com

install

1
sudo apt update && sudo apt install certbot

get ssl certificate by dns change

1
sudo certbot -d ezioruan.com --manual --preferred-challenges dns certonly

it will ask you to create a txt record in your dns provider
image

after add the record press enter and you will get two files fullchain.pem and privkey.pem

image

import to loadbalcer

parse fullchain.pem in SSL Certificate and privkey.pem to Private Key

and you’ll able to use in loadbalcer’s Certificates manager

In modern software development, the line between writing code and managing infrastructure is blurring. The rise of cloud computing has led to the need for a more dynamic and automated way to provision and manage resources. This is where Infrastructure as Code (IaC) comes in, and Terraform is one of the most popular tools leading the charge.

Read more »

#What is Data Migration?
Data migration is the process of moving data from one system to another. While this might seem straightforward, it involves storage, database, or application change.
Any data migration will involve at least the transform and load steps in the context of the extract/transform/load (ETL) process. This means that extracted data needs to go through a series of functions in preparation, after which it can be loaded into a target location.

A strategic data migration plan should include consideration of these critical factors:

  • Knowing the data — Before migration, source data must undergo a complete audit. Unexpected issues can surface if this step is ignored.
  • Cleanup — Once you identify any issues with your source data, they must be resolved. This may require additional software tools and third-party resources because of the scale of the work.
  • Maintenance and protection — Data undergoes degradation after some time, making it unreliable. This means there must be controls in place to maintain data quality.
  • Governance — Tracking and reporting on data quality is crucial because it enables a better understanding of data integrity. The processes and tools used to produce this information should be highly usable and automate functions where possible.
Read more »

Configuring VLANs and DHCP for User Groups

In a network environment, it is sometimes necessary to segment different user groups to improve security and performance. VLANs (Virtual Local Area Networks) provide a way to do this by dividing a physical network into multiple logical networks. This allows different user groups to be isolated from each other and to have their own set of configurations, such as DHCP (Dynamic Host Configuration Protocol) settings.

In this tutorial, we will go through the steps of configuring VLANs and DHCP for different user groups.

Prerequisites

Before we begin, we assume that you have the following:

  • A Linux machine with a network interface named tap_home that is connected to a physical network
  • Root access to the Linux machine
  • Basic knowledge of networking concepts, such as IP addresses and subnets

network_topology-overview

Creating VLANs

The first step is to create VLANs for each user group. We will create two VLANs, one for each user group, with IDs 100 and 200.

1
2
ip link add link tap_home name tap_home.100 type vlan id 100
ip link add link tap_home name tap_home.200 type vlan id 200
Read more »

For years, REST has been the dominant architectural style for building APIs, using the familiar verbs of HTTP and the flexibility of JSON. However, as systems evolve into complex networks of microservices, the need for more performant and strongly-typed communication has grown. Enter gRPC, a modern RPC (Remote Procedure Call) framework developed by Google that is rapidly gaining traction in the world of backend development.

Read more »

Develop APISIX plugin via Golang

APISIX allows users to extend functions through plugins, Although the Apache APISIX kernel code is written in Lua by the plugin, Apache APISIX supports the development of plugins in multiple languages, such as Go and Java. This article will explain in detail how to use plugins to develop Apache APISIX.
We will write an HTTP base auth plugin in Golang

write the plugin

Prerequisites

  • Go (>= 1.15)
  • apisix-go-plugin-runner

Let’s look at the Plugin interface, To write a custom plugin, we need to implement the plugin’s interface

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type Plugin interface {
// Name returns the plguin name
Name() string

// ParseConf is the method to parse the given plugin configuration. When the
// configuration can't be parsed, it will be skipped.
ParseConf(in []byte) (conf interface{}, err error)

// Filter is the method to handle request.
// It is like the `http.ServeHTTP`, plus the ctx and the configuration created by
// ParseConf.
//
// When the `w` is written, the execution of the plugin chain will be stopped.
// We don't use onion model like Gin/Caddy because we don't serve the whole request lifecycle
// inside the runner. The plugin is only a filter running at one stage.
Filter(conf interface{}, w http.ResponseWriter, r pkgHTTP.Request)
}
Read more »

Python 3.10 introduced a host of new features, but perhaps the most talked-about is Structural Pattern Matching. This feature, introduced in PEP 634, adds a match statement that behaves like a switch statement found in other languages, but with much more power and flexibility. It allows you to match variables against a variety of patterns, making complex conditional logic more readable and less error-prone.

Read more »

oracle has tools to increase disk sise for Oracle Image, but not ubuntu, we need to do it manualy

The script internally calls growpart from cloud-guest-utils and resize2fs. So if you are not using LVM etc, to grow main ext4 partition of a boot volume in Ubuntu, simply run:

1
2
sudo growpart /dev/sda 1
sudo resize2fs -z ./sda1.e2undo /dev/sda1

Since Oracle puts the boot partition after main, to be safe you can also install efibootmgr and check

1
efibootmgr -v 

output. If yours also looks like

1
Boot0002* UEFI ORACLE BlockVolume       PciRoot(0x0)/Pci(0x12,0x7)/Pci(0x0,0x0)/SCSI(0,1)N.....YM....R,Y.

then it means it uses SCSI disk/partition number to locate boot partition and it should be safe to reboot now.

Both Node.js and Python have embraced the async/await syntax to simplify asynchronous programming. While the keywords are the same and the high-level concept is similar—making asynchronous code look synchronous—the underlying models and ecosystems have key differences. Understanding these distinctions is crucial for developers working in both environments.

Read more »