## 4 Dynamic Checkpointing for CiC Algorithms Based on Fuzzy Non-Functional Dependencies
### Dynamically Checkpointing Autonomic Web Services  
On the one hand, the _Fault Tolerance_ layer relies on the communication-induced checkpointing (CiC) mechanism [1]. On the other hand, we propose QoS assessment and systems performance evaluation for generating checkpoints dynamically, at any given time, thus obliterating the notion that CiC mechanisms have high implementation cost. Web services performance can be known using simple if-then rules, rules brought up by fuzzy logic. It is easy to evaluate a system and for it to adapt by establishing a set of rules from relationships between inputs (monitored data) and outputs (systems actual behaviour). We exploit QoS criteria by measuring systems non-functional requirements and simulate under different workloads. Therefore, managing the QoS threshold implies the ability to checkpoint, different CiC algorithms, in a dynamic manner. Measuring QoS parameters associated with messages exchanged between different processes; we propose a QoS temporal association. We define a fuzzy-consistency system between messages, we know the actual systems performance; we compute the overall QoS by retrieving information among exchanged messages and compute their individual QoS parameters. We formulate the FCSE based on the _fuzzy-consistency system (FCS)_. Let the FCS relate monitored QoS parameters such as CPU, memory percentage usage and response time (RT) as follows:  
\"The quality of system behaviour at a certain time \(t\) relative to the QoS parameters.\"  
Figure 3: Autonomic Web Service architecture. We consider three linguistic variables:  
* _RT_ indicates the time it took a process to send a request up until it received its response back. * _CPU_ % indicates the CPU usage; it is used as behavioural metric to know the performance at a certain time. * and the _Memory_ % indicates the memory percentage usage; it is used as a behavioural metric to know the performance at a particular time. We use FIS to determine the state of the FCSE; next we give a brief definition:  
_(a) Fuzzification:_ To fuzzify (as crisp values) inputs and outputs we use a triangular symmetric fuzzifier, for instance, Mamdani FIS (refer to Definition 10). Each variable was defined as follows:  
* _RT: VG(e)_ associated to _very good_, _G(e)_ associated to _good_, _A(e)_ associated to _average_, _B(e)_ associated to _bad_, and _VB(e)_ associated to _very bad_. * for the _CPU: CPU_L(e)_ associated to _low_, _CPU_M_ associated to _medium_, _CPU_H_ associated to _high_, and _CPU_VH_ associated to _very high_. * and finally for the _Memory MEM_L(e)_ associated to _low_, _MEM_M(e)_ associated to _medium_, _MEM_H_ associated to _high_, and _MEM_VH_ associated to _very high_. Table 1 lists each linguistic variable and gives its corresponding fuzzy set. Where \(\sigma\) represents all the values for the response time, varying from the smallest value to the biggest value; based on _ITU G.1010_ standard values for Web services, preferred \(\in[0-2)\) seconds, acceptable \(\in(2-4)\) seconds and unacceptable \(\in(4\) to infinity). Where \(\epsilon\) represents all the values for CPU \(\in[0,100]\). Finally, \(\varphi\) represents all the values for the memory used at a specific time \(\in[0,100]\). _(b) Fuzzy inference (FI):_  
We determine the FCSE by using Mamdani inference rules; thus, we compute the performance of the system (based on QoS parameters) at any particular time. We defined 80 combinations for inference rules [17], therefore computational is not considered. We argue that our evaluation does not incur in high system overhead, as experimental results show. _(c) Defuzzification:_ The output (FCSE) of the Mamdani FIS is a fuzzy variable, we convert it to a scalar value easily interpreted by a human. We use the defuzzication for FIS's output using the weighted average method, please refer to Definition 11.