Il y a quelques mois, j ai été confronté à ce genre de problématique. Sauf que ce n'était pas des sandwichs que je fournissais mais de jolis retour de méthode.
De là est né une petite librairie que vous n' avez jamais entendu parlé : priority queue proxy.
Le priority proxy c'est l' idée de rendre transparent la gestion de la priorisation des appels de services que ce soit au niveau consumer ou producer. Et comme son nom l' indique on fait tout ça avec un beau proxy java et des thread queues.
Tout ca marche merveilleusement bien avec un bon vieux spring mais pas que.
Petit exemple avec spring:
On crée l'éxecuteur, c'est lui qui s'occupe de dire qui s'execute ou
<bean id="priorityQueueProxyExecutor" class"....priorityExecutor.Executor">
<constructor-args value="10">
</bean>
L'argument du constructeur est la taille du tread pool partagé par tous les clients. C'est sur ce thread pool que sont gérées les priorités.
On créer les services :
<bean id="lowPriorityService" factory-bean="je vous l'explique plus tard">
<constructor-arg value="l'interface du service"/>
<constructor-arg><bean class="monImplementationDeService"></constructor-arg>
<constructor-arg>5</constructor-arg>
<constructor-arg>0</constructor-arg>
<constructor-arg>priorityQueueProxyExecutor</constructor-arg>
</bean>
<bean id="highPriorityService" ...
<constructor-arg value="l'interface du service"/>
<constructor-arg>...</constructor-arg>
<constructor-arg>10</constructor-arg>
<constructor-arg>5</constructor-arg>
<constructor-arg>priorityQueueProxyExecutor</constructor-arg>
</bean>
Explication, On a maintenant deux services différents qui représentent en réalité la même chose mais avec des priorité différentes :
Le premier service a une priorité de 5 et n'a pas de thread réservé pour lui tout seul.
Le deuxième service a une priorité de 10 et possede 5 slot privé qu'il est seul a utilisé. (Des caisses réservé pour les présidents dans le cas du McDo)
Tout ça est tres joli et ou je le telecharge me direz vous ? Bah soit vous venez travaillez avec moi dans ma boite, soit vous ne pouvez-pas.
Mais n' envisagez pas pour autant le suicide car je vous propose de faire la version 2 en LGPL avec des fonctionnalités à vous faire pousser des rouflaquettes:
- Gestion de pool de thread privé plus fine.
- Meilleure gestion de la concurence (utilisation eventuel des packages java.util.concurent).
- Tread affinity pour une configuration intelligente des threads.
- Gestion des priorités même sur une ferme de provider de service (un cloud pour faire jeune)
- Gestion des priorités changeantes (Finalement les types dans le bus etaient certes des chefs d' état mais surtout d'anciens dictateurs balayés par les révolutions arabes)
- Configuration des priorités au runtime...
- D'autres idées m' étaient venues mais je mettrais à jour plus tard car ça ne vient plus
Alors tenté par une
aventure open source ?
Aucun commentaire :
Enregistrer un commentaire