¡Couchbase .NET SDK 2.2.4 ya disponible!
Hoy lanzamos la versión 2.2.4 del SDK .NET de Couchbase. Esta versión es la continuación de la 2.2.2 e incluye la 2.2.3, que se fusionó con la 2.2.4. La característica más importante de esta versión es un nuevo modelo IO opcional que permite al SDK realizar un mayor rendimiento utilizando menos recursos del sistema (sockets TCP).
Además, en esta versión se han introducido varios errores y mejoras críticos, por lo que se recomienda a los usuarios de versiones anteriores del SDK que actualicen a la versión 2.2.4.
Multiplexación IO (MUX)
En las arquitecturas de microservicios actuales, los niveles de servicio monolíticos más grandes se dividen en muchos despliegues más pequeños y discretos mediante contenedores. Dado que cada despliegue requiere una instancia de cliente, existe un efecto multiplicador en el número de conexiones TCP abiertas por cada aplicación desplegada utilizando el SDK. En general, el multiplicador es:
Clientes x Nodos Cluster x Cubos x Conexiones TCP = Conexiones Totales
Muy rápidamente, en un gran despliegue con muchos servicios, es fácil alcanzar el techo en el número de conexiones TCP que un Cluster puede manejar eficientemente. Por lo tanto, la reducción del número de conexiones pone menos presión sobre el clúster permitiendo un clúster más saludable capaz de procesar más peticiones.
En el pasado, el SDK ha utilizado la agrupación de conexiones donde cada hilo utiliza un único socket TCP a la vez para las operaciones K/V de Memcached (Get, Insert, Remove, etc.). El límite del pool de conexiones está limitado por los parámetros de configuración MinSize y MaxSize; si se ha alcanzado MaxSize, el SDK esperará a que haya una conexión disponible o devolverá una respuesta OperationTimeout.
En general, el rendimiento aquí es bastante bueno ya que las operaciones de Memcached son increíblemente rápidas en el servidor, siendo el principal cuello de botella la latencia de la red. La latencia se ve agravada por el hecho de que SDK esperará a que se complete una operación antes de poner la conexión a disposición del siguiente hilo que esté esperando.
En esta versión introducimos un nuevo modelo de E/S opcional, denominado multiplexación de E/S (MUX), que permite que varios subprocesos envíen y reciban simultáneamente en la misma conexión TCP. Las ventajas son un mayor rendimiento con menos carga para los recursos del sistema operativo y, lo que es más importante, una reducción del número de conexiones TCP entre el cliente y el servidor.
Cómo utilizarlo:
Para utilizar MUX, necesitará configurar su cliente para utilizarlo en su App.Config o Web.Config. Por ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<sección /> |
La parte importante es que dentro de tu elemento connectionPool, estás sobreescribiendo la conexión por defecto con el nuevo MultiplexingIOConnection y en el elemento ioService, estás intercambiando el servicio IO por defecto con el nuevo MultiplexingIOService. Una vez hecho esto, el cliente utilizará el nuevo servicio IO para todas las operaciones Memcached (K/V).
Advertencias
Conviene hacer un par de advertencias:
- Aún no se admite SSL para MUX (próximamente)
- Dado que MUX utiliza una única conexión por nodo para las operaciones Memcached (K/V), muchos de los ajustes del pool de conexiones ya no se aplican (por ejemplo MinSize y MaxSize).
- MUX no afecta a las vistas ni a las consultas N1QL.
Notas de la versión 2.2.4
Error
- [NCBC-1031] - Degradación del Rendimiento de Couchbase 2.2.1 vs 2.1.4 + Bug de Durabilidad
- [NCBC-1038] - Si no existe un índice primario y adhoc es falso, el cliente realizará un bucle hasta que se agote el tiempo de espera.
- [NCBC-1041] - Excepción de falta de memoria no gestionada en el error de creación de índice
- [NCBC-1046] - Hacer que MemcachedConfigContext use NodesAdapter para comparaciones
- [NCBC-1047] - Los registros sólo deberían indicarnos el valor del tiempo de espera.
- [NCBC-1048] - .NET Hola mundo ejemplo no funciona
Mejora
- [NCBC-1044] - Hacer que los cambios de ServicePointManager no sean globales
- [NCBC-1045] - Añadir soporte para implementaciones de servicios IO conectables
- [NCBC-1049] - Renombrar IOStrategy a IOService y otras refactorizaciones de nombres
- [NCBC-1050] - Hacer que el búfer de conexión sea configurable para E/S en cadena/multiplexada.
Tarea
- [NCBC-1039] - Forzar QueryClient a usar HTTP Auth para consultas N1QL
- [NCBC-1042] - Añadir soporte para max_parallelism a la petición de consulta N1QL
Cómo conseguir la v2.2.4
El SDK puede descargarse directamente, a través de NuGet, o clonando y extrayendo el repositorio de Github: