## 4 Results  
Figures 9-14 show the average CPU consumption curves in millicores \(m^{\mathrm{cpu}}k(t)\), the average packet rate \(\bar{\varphi}^{\mathrm{rp}}k,i(t)\) per replica in rpm, and the average number of replicas \(\bar{m}^{\mathrm{rp}}k,i(t)\) over time for the experiments with \(k=5\) (\(\beta_{5}=9\)) and \(k=25\) (\(\beta_{25}=49\)). In this case, the  
average of the three repetitions was taken for each \(k\)-th test, in which the calculation of \(m^{\text{CPU}}k(t)\), \(\bar{v}^{\text{TP}}k(t)\), and \(\bar{m}_{k,i}^{\text{P}}(t)\) can be expressed as  
\[\bar{m}_{k}^{\text{CPU}}(t)=\frac{1}{3}\sum_{i=1}^{3}m_{k,i}^{\text{cpu}}(t), \tag{5}\]  
\[\bar{m}_{k}^{\text{P}}(t)=\frac{1}{3}\sum_{i=1}^{3}m_{k,i}^{\text{P}}(t), \tag{6}\]  
and  
\[\bar{v}_{k}^{\text{TP}}(t)=\frac{1}{3}\sum_{i=1}^{3}v_{k,i}^{\text{TP}}(t) \tag{7}\]  
where  
\[v_{k,i}^{\text{rp}}(t)=\frac{m_{k,i}^{\text{rp}}(t)}{m_{k,i}^{\text{P}}(t)}, \tag{8}\]  
in which \(v_{k,i}^{\text{rp}}(t)\) is the rate of packets received in rpm per replica. The values \(\beta_{5}=9\) and \(\beta_{2}5=49\) were chosen in order to illustrate the system's performance under low and high load conditions, respectively.  
A millicore is a unit of measurement used to quantify the processing capacity of a CPU in computing systems, especially in cloud computing environments and Kubernetes. An entire CPU core is divided into a thousand equal parts, with each millicore representing one one-thousandth of a CPU core; for example, 1000 millicores is equal one entire CPU core. This granularity allows for precise allocation of CPU resources to containers or pods to ensure that each application receives the amount of processing power it needs, thereby optimizing the utilization of available hardware resources.  
Figure 10: Average rate of packets received in rpm curves for \(k=5\) (\(\beta_{5}=9\)).  
Figure 9: Average CPU consumption curves in millicores for \(k=5\) (\(\beta_{5}=9\)).  
Figure 11: Average number of replica curves for \(k=5\) (\(\beta_{5}=9\)).  
Figure 12: Average CPU consumption curves in millicores for \(k=25\) (\(\beta_{25}=49\)).  
Figure 13: Average rate of packets received in rpm curves for \(k=25\) (\(\beta_{25}=49\)).  
\(k\)-th test for all \(\beta\) values. For each \(k\)-th test, the values \(\bar{y}^{\text{cpu}}k\), \(\bar{y}^{\text{rp}}k\), and \(\bar{y}_{k}^{\text{p}}\) were generated, and can be expressed as follows:  
\[\bar{y}_{k}^{\text{cpu}}=\frac{1}{180}\sum_{t=1}^{180}\bar{m}_{k}^{\text{cpu}}( t), \tag{9}\]  
\[\bar{y}_{k}^{\text{rp}}=\frac{1}{180}\sum_{t=1}^{180}\bar{v}_{k}^{\text{rp}}( t), \tag{10}\]  
and  
\[\bar{y}_{k}^{\text{p}}=\frac{1}{180}\sum_{t=1}^{180}\bar{m}_{k}^{\text{p}}(t). \tag{11}\]  
Finally, Figure 18 presents the data distribution of the average rate of violation for a predetermined latency SLA \(\hat{\gamma}k\), characterized here as SLAmax [10]. The latency SLA violation rate \(\gamma_{k,i}\) for each \(i\)-th repetition associated with the \(k\)-th test was calculated based on the latency measures of the HTTP requests made by JMeter, i.e.,  
\[\gamma_{k,i}=\frac{1}{M}\sum_{j=1}^{M_{k,i}}\delta_{k,i,j}, \tag{12}\]  
where \(M_{k,i}\) is the number of requests made by JMeter in the \(i\)-th repetition of the \(k\)-th test and \(\delta_{k,i,j}\) can be expressed as  
\[\delta_{k,i,j}=\begin{cases}0&\text{se }r_{k,i,j}<\text{SLA}_{\text{max}},\\ 1&\text{se }r_{k,i,j}\geq\text{SLA}_{\text{max}},\end{cases} \tag{13}\]  
where \(r_{k,i,j}\) is the latency of the \(j\)-th request of the \(i\)-th repetition associated with the \(k\)-th test. Based on the values of \(\gamma_{k,i}\), the average associated with the SLA violation rate for each \(k\)-th test was calculated as follows:  
\[\hat{\gamma}_{k}=\frac{1}{3}\sum_{i=1}^{3}\gamma_{k,i}. \tag{14}\]  
Figure 18 presents the results for SLAmax \(=250\) ms.  
Figure 15: Distribution of values associated with average CPU consumption during 180 s for all \(\beta\) values tested.