Aim
To do a load
balancing setup using Ocelot gateway.
Details
This will be a
basic setup for load balancing with ocelot. I will be using the RoundRobin type
for this sample. The sample contains 3 projects
1.
Ocelot
gateway
2.
Microservice
1
3.
Microservice
2 (In real-time we will have same Microservice 1 in a different port or URL)
High level steps
1.
Create
2 Microservice replicate same api
2.
Create
a Gateway api and configure routes and load balancing
Detailed Steps
1. Creating Microservice
Add
a new core web application with web api template
Add a controller
and create a getMethod
[HttpGet]
public string
Get()
{
return "Server1";
}
Repeat the same
steps to create Microservice 2 with return value as “Server2”
2. Create and configure
Ocelot
Add a new core web
application with web api template
Install ocelot
from NuGet package manager, version to be used – 16.01
Add a json file to
the project and name it as ocelot.json and configure the downstream and
upstream routes in the json file. For downstream hosts we will specify both the
Microservice 1 & 2 like below.
Next we need to
set up the Load balancer options in the json file. See the above for reference
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
Types supported
for Load Balancing by Ocelot
- ·
LeastConnection
- tracks which services are dealing with requests and sends new requests to
service with least existing requests. The algorythm state is not distributed
across a cluster of Ocelot’s.
- ·
RoundRobin
- loops through available services and sends requests. The algorythm state is
not distributed across a cluster of Ocelot’s.
- ·
NoLoadBalancer
- takes the first available service from config or service discovery.
- ·
CookieStickySessions
- uses a cookie to stick all requests to a specific server.
And also custom
load balancing is also supported
Now configuring
the startup & program.cs for Ocelot
In program.cs edit
the CreateHostBuilder method to below
In startup.cs edit
the ConfigureServices & Configure methods like below
Change the Configure
to async method and this to last
await app.UseOcelot();
Now to run the application
1. Set
all web project as start up
2. Run the application and Access
the URL from a browser - https://localhost:44378/gateway/WeatherForecast
You
will get the response from 1st Microservice
Make the
second request from another tab with same url, now the request will be routed
to second server( 2nd microservice)
Note: Sample code
is available to download, Its created in .net core 3.1