| The work carried out for this thesis develops performance-engineering techniques to be used in the early phases of distributed systems design and implementation. While these techniques are autonomous, they could also be used as a suite in a framework. The final result of framework would be a configuration or a set of configurations for distributed application that satisfies user expectations for various target environments and for a large range of possible workload conditions.; There are four areas we focus on: performance model building, object and process allocation, mapping complex performance requirements onto multi-criteria decision-making problems, and choosing object replication and process threading and replication levels. We consider closed multi-class systems. The framework takes as input performance requirements, hardware topologies for deployments of various scales, and design constraints. An aggregated performance metric called Satisfaction is derived from multi-class performance requirements. Based on a performance model that is built from tracing executable code, the framework builds a set of configurations for each topology. The configurations optimize the Satisfaction for different workloads. Techniques such as non-linear and linear programming are used to reduce the configuration search space. Then configurations are filtered through a multi-criteria decision-making process to select a configuration or a smaller set of configurations that support the topologies for a large range of workloads. Fuzzy set theory is applied throughout the decision-making process. Finally, appropriate threading or replication levels and activation policy are decided for each object. Again, to reduce the complexity of the computations, we make use of performance evaluation techniques and optimization techniques such as non-linear and linear programming. |