2017-09-14 1 views
0

Nous avons une application C# Azure Function (plan de consommation) qui évolue dynamiquement, c'est-à-dire que de nouvelles instances sont ajoutées en fonction de la charge, nous avons maintenant un objet à utiliser dans toutes les instances de cette fonction Azure, comme l'objet est complexe (a des délégués) Je ne peux pas sérialiser pour mettre sur un cache externe afin que toutes les instances puissent y accéder à partir de là, s'il vous plaît suggérer la meilleure façon de gérer ce scénario.Comment partager l'état de l'objet dans toutes les instances de fonction Azure

+0

on ne sait pas ce que vous demandez. Avant d'être déclassé pour fermer, fournissez plus de détails. – Asdfg

Répondre

2

Les instances Azure Function s'exécutent sur des serveurs différents, elles ne partagent pas la même mémoire, elles n'ont donc aucun moyen d'accéder à un seul objet .NET sans appels distants (et donc sérialisation).

1

Il y a quelque chose de fondamentalement contradictoire dans votre question: vous ne pouvez pas avoir a) une fonction qui s'adapte à de nombreuses machines; b) toutes les instances partageant des objets en mémoire comme s'ils étaient en cours d'exécution sur une seule machine. Cela va aussi dans l'autre sens: sans serveur signifie que si personne n'utilise votre fonction, toute l'infrastructure peut être arrêtée (vous économisant ainsi de l'argent) - mais cela signifie implicitement que vous perdriez votre état en mémoire et devez être en mesure de sérialisez-le.

Minimisez l'état partagé, rendez-le sérialisable (il existe des modèles pour traiter des éléments tels que délégués [1]) et utilisez un stockage externe (Azure Storage ou un cache similaire à Redis).

[1] Pour les délégués, une astuce consiste à gérer un dictionnaire de descripteurs pour les délégués, puis à sérialiser le handle. De même, pour le polymorphisme, vous pourriez sérialiser le nom du type.

+0

Une chose que je crois se produit en interne est que toutes les instances de fonction sont gérées par un processus externe une sorte d'orchestrateur, qui a accès à toutes les instances est-ce que ce processus externe supporte le partage d'état inter instance ... – akhil

+0

@Akhil - il y a plusieurs processus externes impliqués ici pour surveiller les déclencheurs, faire apparaître la machine, etc. et finalement conduire à l'invocation de la fonction. Mais c'est largement hors de propos. Il n'y a toujours pas de partage d'état intégré. –