Question

Je sais qu'Optaplanner s'adapte très bien à la taille du problème.Mais comment peut-il évoluer en fonction du nombre de demandes problématiques ?Actuellement, nous avons exposé optaplanner en tant que service REST.Il peut recevoir des centaines de demandes de planification par jour.La recherche est arrêtée après 10 secondes.Cela signifie qu'à certains pics, il y a plusieurs demandes de planification dans la file d'attente.Que pourrions-nous faire pour paralléliser les requêtes sur plusieurs machines ?

Était-ce utile?

La solution

Toute la prise en charge de bas niveau pour une configuration multi-tenant (sur un cluster) est disponible :

  • Le SolverFactory est thread-safe, 1 par nœud
  • 1 Solver par thread et par nœud.Parce qu'un seul Solver monopolise un seul Thread (il ne fait aucune E/S, contrairement aux requêtes Web, etc.), je déconseille d'exécuter plus de solveurs qu'il n'y a de threads.
  • Solver.terminateEarly() est thread-safe et peut être appelé sur tous Solvers si le nœud est en train de sortir.

Cependant, il n'existe pas de support de haut niveau pour une configuration multi-tenant. encore.Vous devrez donc le construire vous-même :

  • Les requêtes en file d'attente doivent être traitées, au cas où il y aurait plus de requêtes que de threads disponibles.Un JDK ExecutorService avec la taille du nombre de cœurs de processeur devrait suffire pour cela.Soumettez simplement les demandes comme Future's.Construisez le solveur dans le futur.Construisez SolverFactory au bootstrap.
  • Jouez éventuellement en accordant plus/moins de temps en fonction de la saturation de l'utilisateur. terminateEarly() peut aider à cet égard.
  • Équilibrage de charge sur les nœuds du cluster.Chaque cluster a 1 ExecutorService.
  • Voler du travail ?
  • La haute disponibilité
  • Basculement
  • ...

Nous allons construire un support de haut niveau à l'avenir.S'il te plaît ajoutez vos exigences dans ce numéro jira.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top