max connection lb

This commit is contained in:
Marcos Uchoa 2025-08-17 22:52:14 -03:00
parent 9e173f5468
commit 2f22506d72
5 changed files with 23 additions and 15 deletions

View file

@ -19,7 +19,7 @@ services:
deploy:
resources:
limits:
cpus: "1.5"
cpus: "0.50"
memory: "130MB"
zig1: &zig
container_name: zig-pay-1
@ -28,10 +28,10 @@ services:
- SERVER_ENV=PROD
- DEFAULT_HOST=payment-processor-default
- DEFAULT_PORT=8080
- DEFAULT_POOL=700
- DEFAULT_POOL=400
- FALLBACK_HOST=payment-processor-fallback
- FALLBACK_PORT=8080
- FALLBACK_POOL=400
- FALLBACK_POOL=200
- PORT=8080
- PAYMENT_SUMMARY_EXCHANGE_HOST=zig2
- PAYMENT_SUMMARY_EXCHANGE_PORT=6969
@ -40,7 +40,7 @@ services:
deploy:
resources:
limits:
cpus: "0.45"
cpus: "0.50"
memory: "110MB"
zig2:
<<: *zig
@ -49,10 +49,10 @@ services:
- SERVER_ENV=PROD
- DEFAULT_HOST=payment-processor-default
- DEFAULT_PORT=8080
- DEFAULT_POOL=700
- DEFAULT_POOL=400
- FALLBACK_HOST=payment-processor-fallback
- FALLBACK_PORT=8080
- FALLBACK_POOL=400
- FALLBACK_POOL=200
- PORT=8080
- PAYMENT_SUMMARY_EXCHANGE_HOST=zig1
- PAYMENT_SUMMARY_EXCHANGE_PORT=6969

View file

@ -95,6 +95,7 @@ const template_json_summary: []const u8 =
;
fn getSummary(req: *Request, res: *Response) void {
std.Thread.sleep(1_000_000 * 50);
var from: ?DateTime = null;
var to: ?DateTime = null;

View file

@ -12,7 +12,7 @@ const Address = net.Address;
const Stream = net.Stream;
const BUFFER_SIZE = 1024;
const MAX_CONNECTION_UPSTREAM = 2050;
const MAX_CONNECTION_UPSTREAM = 1520;
//var metrics_mutex = std.Thread.Mutex{};
//var metrics_num_requests: u64 = 0;
@ -68,18 +68,22 @@ pub const UpstreamServer = struct {
std.debug.assert(final_addr != null);
var connections: [MAX_CONNECTION_UPSTREAM]UpstreamConnection = undefined;
for (&connections) |*conn| {
conn.* = UpstreamConnection.init(final_addr.?);
}
return UpstreamServer{
.address = final_addr.?,
.pool = connections,
.pool = undefined,
};
}
pub fn warmup(self: *UpstreamServer) void {
_ = std.Thread.spawn(.{ .stack_size = 1024 * 24 }, _warmup, .{self}) catch unreachable;
}
fn _warmup(self: *UpstreamServer) void {
for (0..self.pool.len) |i| {
self.pool[i] = UpstreamConnection.init(self.address);
}
}
pub fn getAvailableConnection(self: *UpstreamServer) ?*UpstreamConnection {
for (&self.pool) |*conn| {
if (conn.state == .available) {

View file

@ -88,7 +88,10 @@ fn startLoadBalancer() !void {
const server2 = lb.UpstreamServer.init(ctx.config.fallback_host, ctx.config.fallback_port);
var servers = [_]lb.UpstreamServer{ server1, server2 };
servers[0].warmup();
servers[1].warmup();
std.Thread.sleep(1_000_000 * 1000 * 2);
var mylb = try lb.LoadBalancer.init(ip_map, ctx.config.port, &servers);
try mylb.start();

View file

@ -88,7 +88,7 @@ pub const PaymentIntegrator = struct {
pi.payment.integration_status = .not_integrated;
pi.is_integrated = true; // liar
} else {
pi.payment.requested_at = DateTime.now();
//pi.payment.requested_at = DateTime.now();
pi.ticket = self.service_pool.dive(pi.getMessage(), MAX_RETRY - pi.retries) catch null;
pi.retries -= 1;
}