jeudi 26 novembre 2009

Création load balancer

Version brute à commenter

load balancer

Installation des outils pour la gestion d'un load balancer
yum install ipvsadm
modprobe iptable_mangle
modprobe iptable_filter

On ignore les requetes arp de localhost

cat
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
>> /etc/sysctl.conf

sysctl -p

cat -A -f 1 -s wrr -p 1800
-a -f 1 -r 192.168.248.100:0 -g -w 1
-a -f 1 -r 192.168.248.249:0 -g -w 1
>> /etc/sysconfig/ipvsadm

/etc/init.d/ipvsadm reload

iptables -t mangle -I PREROUTING 1 -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -d 192.168.248.13 -p tcp --dport 38080 -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -d 192.168.248.13 -p tcp --dport 38080 -j MARK --set-mark 0x1
/etc/init.d/iptables save
/etc/init.d/iptables restart

serveurs destinations

cat net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
>> /etc/sysctl.conf

sysctl -p

ifconfig lo:0 192.168.248.13 netmask 255.255.255.255

administration
list :
ipvsadm -L -n
desactivate :
ipvsadm -d -r 192.168.248.100:0 -f 1
restore :
ipvsadm -a -r 192.168.248.100:0 -f 1 -g -w 1

mardi 26 mai 2009

Java : Gestion des listes; généricité et problème d'héritage

Voici la description d'un problème simple concernant les génériques en Java.
Dans une classe commande qui permet de gérer la commande d'un client dans un site marchand, nous devons y stocker la liste des lignes de commandes (OrderLines).
Devant gérer plusieurs types de lignes de commandes en fonction des produits commandés : Téléphone (géré par la classe ObjectOrderLine), abonnement (géré par la classe SubscriptionOrderLine)

Notre classe commande ressemblera donc à cela
class Order {

private long id;

private User user;

private List orderLines;

...
}

Le client commande une liste d'objet & accessoires
List orderedObjects = new ArrayList ();

Il ne sera pas possible de faire
order.getOrderLines.addAll(orderedObjects);

En effet, le compilateur s'attend à avoir une liste d'objet du type OrderLine et non pas une de ses sous classes.

Dans ce cas, il suffit d'utiliser les wildcards pour s'en sortir aisement.
class Order {
private List orderLines;

}