O Couchbase .NET SDK 2.2.4 já está disponível!
Hoje estamos lançando a versão 2.2.4 do Couchbase .NET SDK! Essa versão é a continuação da 2.2.2 e inclui a 2.2.3, que foi incorporada à 2.2.4. O recurso mais importante dessa versão é um novo modelo de IO opcional que permite que o SDK tenha maior rendimento usando menos recursos do sistema (soquetes TCP).
Além disso, há vários recursos e aprimoramentos críticos de bugs nesta versão e sugerimos que todos os usuários de versões anteriores do SDK atualizem para a 2.2.4!
Multiplexação de E/S (MUX)
Nas arquiteturas de microsserviço atuais, as camadas de serviço monolíticas maiores são divididas em muitas implantações menores e mais discretas usando contêineres. Como cada implantação requer uma instância de cliente, há um efeito multiplicador no número de conexões TCP abertas por cada aplicativo implantado usando o SDK. Em geral, o multiplicador é:
Clientes x Nós do cluster x Compartimentos x Conexões TCP = Total de conexões
Muito rapidamente, em uma implantação grande com muitos serviços, é fácil atingir o limite máximo do número de conexões TCP que um cluster pode manipular com eficiência. Portanto, a redução do número de conexões exerce menos pressão sobre o cluster, permitindo que um cluster mais saudável seja capaz de processar mais solicitações.
No passado, o SDK usava o pooling de conexões em que cada thread usava um único soquete TCP de cada vez para operações K/V do Memcached (Get, Insert, Remove, etc.). O limite do pool de conexões é limitado pelas definições de configuração MinSize e MaxSize; se o MaxSize for atingido, o SDK aguardará a disponibilidade de uma conexão ou retornará uma resposta OperationTimeout.
Em geral, o desempenho aqui é muito bom, pois as operações do Memcached são incrivelmente rápidas no servidor, sendo que o principal gargalo é a latência da rede. A latência é agravada pelo fato de que o SDK aguardará a conclusão de uma operação antes de disponibilizar a conexão para o próximo thread que estiver aguardando.
Nesta versão, estamos introduzindo um novo modelo de E/S opcional, chamado multiplexação de E/S (MUX), que permite que vários threads enviem e recebam simultaneamente na mesma conexão TCP. As vantagens são o aumento da taxa de transferência com menos pressão sobre os recursos do sistema operacional e, principalmente, a redução do número de conexões TCP entre o cliente e o servidor.
Como usá-lo:
Para usar o MUX, você precisará configurar seu cliente para usá-lo em seu App.Config ou Web.Config. Por exemplo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<section /> |
A parte importante é que, no elemento connectionPool, você está substituindo a conexão padrão pela nova MultiplexingIOConnection e, no elemento ioService, está trocando o serviço de E/S padrão pelo novo MultiplexingIOService. Depois de fazer isso, o cliente usará o novo serviço de E/S para todas as operações do Memcached (K/V).
Advertências
É preciso fazer algumas ressalvas:
- O SSL ainda não é compatível com o MUX (em breve)
- Como o MUX usa uma única conexão por nó para operações do Memcached (K/V), muitas das configurações do pool de conexões não se aplicam mais (por exemplo, MinSize e MaxSize).
- A MUX não tem efeito sobre as visualizações ou consultas N1QL
Notas de versão da v2.2.4
Bug
- [NCBC-1031] - Degradação de desempenho do Couchbase 2.2.1 em relação ao 2.1.4 + Bug de durabilidade
- [NCBC-1038] - Se não houver um índice primário e adhoc for falso, o cliente fará um loop até o tempo limite
- [NCBC-1041] - Exceção de falta de memória não tratada em um erro de criação de índice
- [NCBC-1046] - Fazer com que o MemcachedConfigContext use o NodesAdapter para comparações
- [NCBC-1047] - Os registros devem nos informar apenas o valor do tempo limite.
- [NCBC-1048] - O exemplo do Hello world do .NET não funciona
Melhoria
- [NCBC-1044] - Tornar as alterações do ServicePointManager não globais
- [NCBC-1045] - Adicionar suporte para implementações de serviços de E/S conectáveis
- [NCBC-1049] - Renomear IOStrategy para IOService e outras refatorações de nomes
- [NCBC-1050] - Tornar o buffer de conexão configurável para E/S em pipeline/multiplexada
Tarefa
- [NCBC-1039] - Forçar o QueryClient a usar a autenticação HTTP para consultas N1QL
- [NCBC-1042] - Adicionar suporte para max_parallelism à solicitação de consulta N1QL
Como obter a versão 2.2.4
O SDK está disponível para download diretamente, por meio do NuGet, ou clonando e extraindo o repositório do Github: