.NET

Funciones Azure e inicialización perezosa con Couchbase Server

Azure Functions es todavía nuevo para mí, y estoy aprendiendo sobre la marcha. Ya escribí en el blog sobre mi incursión en Azure Functions con Couchbase hace más de un mes. Justo después de publicar eso, recibí algunos comentarios útiles sobre la forma en que estaba instanciando un clúster Couchbase (y cubo).

Había asumido (erróneamente) que no había forma de guardar el estado entre llamadas a Azure Function. Esta es la razón por la que he creado un GetCluster() que se llamaba cada vez que se ejecutaba la función. Pero, inicializar un Couchbase Grupo es una operación cara. Cuanto menos a menudo se instancie, mejor.

Puede seguir la actualización código fuente de esta entrada de blog en Github.

Estado estático

Me costó encontrar documentación sobre si podía utilizar un estático para reutilizarlo entre llamadas a funciones. Supongo que debería haber experimentado, como compañero MVP de Microsoft Mark Heath lo hizo. En cambio, yo planteó la pregunta a StackOverflow.

En resumen: sí. A GrupoEl valor de la función, instanciado y guardado en un miembro estático, puede reutilizarse entre llamadas a funciones. De acuerdo con el post de Mark más arriba, no hay garantía de cuánto tiempo este valor va a sobrevivir. Pero eso es una compensación esperada que haces cuando vas "sin servidor".

Inicialización perezosa en Azure Functions

Utilizar simplemente un miembro estático funcionaría, pero no es seguro para los hilos. Hay varias formas de solucionar este problema, pero una de las más sencillas y que está integrada en el framework .NET es utilizar Inicialización perezosa con Lazy.

Lazy Initialization in Azure Functions

En primer lugar, quité el GetBucket y GetCluster métodos. A continuación, he creado un Perezoso propiedad para sustituirlos.

Acabo de hacer una sola propiedad para un cubo, ya que es todo lo que necesito para este ejemplo. Pero si usted necesita utilizar el clúster, usted puede hacer fácilmente que su propio Perezoso propiedad. (Una vez que se dispone de un clúster, obtener un cubo es una operación relativamente barata).

Utilizar una propiedad Lazy

Al crear una instancia de Lazy se le proporciona una lambda de inicialización. Esa lambda no se ejecutará hasta que el objeto Valor se llama a la propiedad por primera vez.

Por ejemplo, observe el Valor entre Cubo y GetAsync en la versión actualizada de mis Azure Functions:

Si es la primera vez Valor el cluster será inicializado. En caso contrario, se utilizará el cluster ya inicializado (pruebe a experimentar con un Guía en lugar de Cubo).

Resumen

El estado puede guardarse entre llamadas a Azure Function utilizando un miembro estático. Asegúrate de que es seguro para hilos (usando Lazy o algo parecido). No hagas suposiciones sobre cuánto tiempo durará ese objeto.

¿Algo más que me haya perdido? ¿Estás usando Azure Functions con Couchbase? Me encantaría saber de ti. Por favor, deja un comentario abajo o envíame un ping a Twitter @mgroves.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.