diff --git a/docker-compose.yml b/docker-compose.yml index 58184da..8686102 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 diff --git a/src/endpoints/payments.zig b/src/endpoints/payments.zig index 3f624ee..fa452af 100644 --- a/src/endpoints/payments.zig +++ b/src/endpoints/payments.zig @@ -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; diff --git a/src/load_balancer.zig b/src/load_balancer.zig index 47aa5c3..3a10fd0 100644 --- a/src/load_balancer.zig +++ b/src/load_balancer.zig @@ -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) { diff --git a/src/main.zig b/src/main.zig index 68dd9f9..0ebe9be 100644 --- a/src/main.zig +++ b/src/main.zig @@ -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(); diff --git a/src/payment_integrator.zig b/src/payment_integrator.zig index 2ab1f55..0fc63e0 100644 --- a/src/payment_integrator.zig +++ b/src/payment_integrator.zig @@ -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; }