/**
* Copyright (C) 2015 Orange
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.francetelecom.clara.cloud.paas.constraint;
/**
* This class contains per tenant projection customization rules.
* They allow to override default constraints for a specific tenant.
*
* max core=8
* Max SpeecintRate2006=80
* max RAM = 64GB
* Max IO=1 GBPS
* HA
* DPM ?
* NAS storage = SMALL (50GB), MEDIUM (50-300 MB), LARGE (300-1000 MB), XLARGE (> 1000 MB)
*
* "Il n�y a pas de limitation explicite du nombre de VM maximum par serveur physique. L�exploitant r�alise cette consolidation de mani�re � pouvoir respecter les engagements de qualit� de service contractuel qu�il doit assurer.
* Pour le MOE, il est recommand� de limiter la taille des VM � 2 vCPUs et de privil�gier la scalabilit� horizontale de l�application."
*
* http://private-url.elpaaso.org/sites/DT-DDSI/atl/Public/tuning_os_S1F2.doc
* 4.2.1 Nombre de CPU Virtuels
Avec VMWare, le nombre de CPU virtuels (VCPU) attribu� au serveur virtuel peut �tre: 1, 2 ou 4
Pour une application avec une charge faible (moins de 100 utilisateurs simultan�s, moins de 500 hits / s), privil�gier une VM mono CPU. (puissance de 20KTpmc pour un Ecoserveur LS41)
Au-del� de cette charge, passer sur des VM avec 2 VCPU pour une puissance de 40KTpmc.
Les serveurs virtuels avec 4 VCPU ne sont pas recommand�s. Pour un besoin sup�rieur � 40Ktpmc, il faut privil�gier la scalabilit� horizontale (ferme de serveurs).
*/
public class TenantCustomizationRule {
//
//
// On doit ajuster la m�moire au plus juste par un dimensionnement fin en fonction des besoins qui sont :
// Kernel Linux, hors buffer & cache syst�me : 32M
// PLI Standards d�exploitation : Selon PLI install�s. Compter 128M
// Apache : compter 500K multipli� par le nombre maximum de processus Apache (Cf. Param�tre MaxClients dans la section sur le tuning Apache), si les pr�conisations de tuning Apache de ce document ont bien �t� appliqu�es. Pour MaxClients = 256, compter donc 128M
// Environ 1,3 fois la taille de la JAVA heap (cf. param�tre MAX_HEAP_SIZE dans la section sur le tuning de la JVM). Si il existe plusieurs JVM sur le m�me serveur, faire la somme des MAX_HEAP_SIZE*1,3.
// Marge de fonctionnement pour pouvoir ex�cuter les commandes d�administration, avoir assez de RAM pour les buffers syst�mes: ajouter 20%.
//
private int linuxKernelMemoryMb = 32;
private int standardOpsPackagesMemoryMb =128;
private int apacheMemoryKbPerClient = 500;
private int percentVmMarging = 20;
private double jvmMaxHeapOsRatio = 1.3d;
private int mysqlDefaultMemoryMb = 512;
// Global architectural limitations
// -------------------------------------------------
public int minMemoryMbPerVm = 512;
public int maxMemoryMbPerVm = 2048;
public int minMemoryMbPerWas = 128;
public int maxMemoryMbPerWas = 1536;
private int maxWasPerVm = 4;
public int maxDataBaseConnectionNumber = 100;
public int maxSessionPerWas = 4000;
public int brokerMemoryMb = 128;
public int getMinMemoryMbPerVm() {
return minMemoryMbPerVm;
}
public void setMinMemoryMbPerVm(int minMemoryMbPerVm) {
this.minMemoryMbPerVm = minMemoryMbPerVm;
}
public int getMaxMemoryMbPerVm() {
return maxMemoryMbPerVm;
}
public void setMaxMemoryMbPerVm(int maxMemoryMbPerVm) {
this.maxMemoryMbPerVm = maxMemoryMbPerVm;
}
public int getMinMemoryMbPerWas() {
return minMemoryMbPerWas;
}
public void setMinMemoryMbPerWas(int minMemoryMbPerWas) {
this.minMemoryMbPerWas = minMemoryMbPerWas;
}
public int getMaxMemoryMbPerWas() {
return maxMemoryMbPerWas;
}
public void setMaxMemoryMbPerWas(int maxMemoryMbPerWas) {
this.maxMemoryMbPerWas = maxMemoryMbPerWas;
}
public int getMaxWasPerVm() {
return maxWasPerVm;
}
public void setMaxWasPerVm(int maxWasPerVm) {
this.maxWasPerVm = maxWasPerVm;
}
public int getMaxDataBaseConnectionNumber() {
return maxDataBaseConnectionNumber;
}
public void setMaxDataBaseConnectionNumber(int maxDataBaseConnectionNumber) {
this.maxDataBaseConnectionNumber = maxDataBaseConnectionNumber;
}
public int getMaxSessionPerWas() {
return maxSessionPerWas;
}
public void setMaxSessionPerWas(int maxSessionPerWas) {
this.maxSessionPerWas = maxSessionPerWas;
}
/** Size to allocated the linux kernel */
public int getLinuxKernelMemoryMb() {
return linuxKernelMemoryMb;
}
public void setLinuxKernelMemoryMb(int linuxKernelMemoryMb) {
this.linuxKernelMemoryMb = linuxKernelMemoryMb;
}
public int getStandardOpsPackagesMemoryMb() {
return standardOpsPackagesMemoryMb;
}
public void setStandardOpsPackagesMemoryMb(int standardOpsPackagesMemoryMb) {
this.standardOpsPackagesMemoryMb = standardOpsPackagesMemoryMb;
}
public int getApacheMemoryKbPerClient() {
return apacheMemoryKbPerClient;
}
public void setApacheMemoryKbPerClient(int apacheMemoryKbPerClient) {
this.apacheMemoryKbPerClient = apacheMemoryKbPerClient;
}
/** Percentage of marging for OS-level buffers */
public int getPercentVmMarging() {
return percentVmMarging;
}
public void setPercentVmMarging(int percentVmMarging) {
this.percentVmMarging = percentVmMarging;
}
/** ratio add to convert JVM max heap into OS memory consumption. */
public double getJvmMaxHeapOsRatio() {
return jvmMaxHeapOsRatio;
}
public void setJvmMaxHeapOsRatio(double jvmMaxHeapOsRatio) {
this.jvmMaxHeapOsRatio = jvmMaxHeapOsRatio;
}
/** Default mysql daemon memory size, until finding related tuning guide */
public int getMysqlDefaultMemoryMb() {
return mysqlDefaultMemoryMb;
}
public void setMysqlDefaultMemoryMb(int mysqlDefaultMemoryMb) {
this.mysqlDefaultMemoryMb = mysqlDefaultMemoryMb;
}
/**
* @return the brokerMemoryMb
*/
public int getBrokerMemoryMb() {
return brokerMemoryMb;
}
/**
* @param brokerMemoryMb
* the brokerMemoryMb to set
*/
public void setBrokerMemoryMb(int brokerMemoryMb) {
this.brokerMemoryMb = brokerMemoryMb;
}
}