Recentemente, lançamos outra versão secundária do Couchbase Go SDK: 1.4.0. Essa é uma nova versão secundária e, principalmente, inclui suporte para Observabilidade do tempo de resposta e Compressão transparente.
O que há nesta versão?
Adicionamos suporte para compressão transparente, autenticação de certificado de cliente e configurações de várias redes. Também adicionamos o Response Time Observability, que permite ver onde o tempo é gasto nas solicitações e identifica as respostas órfãs, conforme abordado em blogs anteriores.
Compressão transparente
O SDK agora compactará e descompactará automaticamente os documentos enviados ao servidor, se estiverem ativados no servidor. Isso pode levar a uma economia substancial na largura de banda e no tempo de transmissão. Por padrão, esse recurso é ativado tanto para a compactação quanto para a descompactação e é configurado por meio de opções de string de conexão:
- compressão - booleano, para ativar ou desativar a compactação no lado do cliente; o padrão é true.
- compression_min_size - int, o tamanho mínimo do documento (em bytes) para que um documento seja considerado para compactação; o padrão é 32 bytes.
- compression_min_ratio - float, tamanho compactado / tamanho original. A proporção mínima para que um documento compactado seja enviado compactado - o padrão é 0,83.
Você pode ler mais sobre compressão na seção documentação com mais detalhes técnicos na seção sdk-rfc.
Autenticação do certificado do cliente
A autenticação do certificado do cliente é um recurso para assinantes da Enterprise Edition que permite o uso de certificados X.509 para autenticar o cliente com o Couchbase Server. Isso significa que as conexões com o servidor são mais seguras e que o cliente pode ter certeza de que está se conectando apenas a servidores confiáveis. Para usar esse recurso, um certificado válido deve ser configurado no servidor e a identidade do usuário para o certificado do lado do cliente deve ter as funções corretamente atribuídas. A função caminho do certificado e caminho das teclas deve ser fornecido na string de conexão e o novo Certificador de autenticação{} usado para autenticação de cluster.
|
1 2 3 4 5 6 7 8 9 |
agrupamento, erro := gocb.Conectar("couchbases://10.0.0.1?certpath=/path/to/chain.pem&keypath=/path/to/client.key") se erro != nulo { pânico(erro) } agrupamento.Autenticar(gocb.Certificador de autenticação{}) balde, erro := agrupamento.OpenBucket("amostra de viagem", "") se erro != nulo { pânico(erro) } |
Você pode ler mais sobre a autenticação de certificado de cliente em https://developer.couchbase.com/documentation/server/5.5/sdk/go/sdk-authentication-overview.html
Tempo de resposta Observabilidade
Esses são dois recursos novos, separados, mas também relacionados, projetados para entender melhor os tempos de resposta e possivelmente diagnosticar a origem das respostas lentas.
A observabilidade do tempo de resposta fornece informações que podem ser usadas para identificar operações de execução excepcionalmente longas, ajudando a descobrir onde os problemas estão ocorrendo - o Couchbase Server, um nó específico, a rede etc. Por padrão, é usada uma implementação do ThresholdLogTracer, mas ela pode ser trocada por sua própria implementação que siga o padrão de evolução do OpenTracing. Para evitar o preenchimento dos registros, o padrão de registro é uma base 10×10. Ou seja, os 10 time outs mais lentos dos últimos 10 segundos.
A saída registrada tem a seguinte aparência:
|
1 |
{"serviço":"kv","count" (contagem):10,"top":[{"operation_name":"Obter","total_us":7451,"server_us":18,"decode_us":20,"last_operation_id":"0xd0a","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":5302,"server_us":22,"decode_us":17,"last_operation_id":"0x1059","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":5302,"server_us":43,"decode_us":18,"last_operation_id":"0xd63","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":4074,"server_us":117,"decode_us":17,"last_operation_id":"0xab3","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":4029,"server_us":14,"decode_us":11,"last_operation_id":"0xdfa","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":3253,"server_us":27,"decode_us":14,"last_operation_id":"0x489","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":3235,"server_us":11,"decode_us":13,"last_operation_id":"0x33b","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":3136,"server_us":14,"decode_us":13,"last_operation_id":"0xf1b","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":3132,"server_us":5,"decode_us":14,"last_operation_id":"0xea0","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"},{"operation_name":"Obter","total_us":3045,"server_us":14,"decode_us":45,"last_operation_id":"0x5","last_local_id":"1d92576caf69677e/d4dbeb0069de1162"}]} |
O que vemos é o tipo de serviço para o qual o registro se destina e quantas amostras foram coletadas. Vamos dar uma olhada em uma amostra com mais detalhes:
|
1 2 3 4 5 6 7 8 |
{ "operation_name":"Obter", "total_us":7451, "server_us":18, "decode_us":20, "last_operation_id":"0xd0a", "last_local_id":"1d92576caf69677e/d4dbeb0069de1162" } |
O que podemos ver aqui é que a operação foi um Get que levou um total de 7,4 milissegundos, dos quais 18 microssegundos foram gastos no servidor e 20 microssegundos foram gastos na decodificação da resposta. O last_operation_id e o last_local_id podem ser usados para identificar exclusivamente a solicitação e fazer a correspondência com os logs do servidor e/ou com o registro de respostas órfãs.
Você pode ler mais sobre o ThresholdLogTracer e o rastreamento em https://developer.couchbase.com/documentation/server/5.5/sdk/go/threshold-logging.html e https://developer.couchbase.com/documentation/server/5.5/sdk/go/tracing-from-the-sdk.html.
Uma resposta órfã é uma resposta recebida do servidor para uma solicitação que já atingiu o tempo limite no cliente. Quando isso ocorre, o cliente ainda lida com essa resposta e o registro de resposta órfã registra a mais lenta delas, juntamente com a duração no servidor. Isso é realizado, por padrão, na mesma base de 10×10 como acima, mas só tem suporte para operações KV.
A saída registrada tem a seguinte aparência:
|
1 |
{"serviço":"kv","count" (contagem):10,"top":[{"c":"79bec7c299101f94/5f243f078b177992","i":"0x15f","r":"10.111.180.101:11210","d":10036,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x92","r":"10.111.180.101:11210","d":6239,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x85","r":"10.111.180.101:11210","d":376,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x82","r":"10.111.180.101:11210","d":135,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x67","r":"10.111.180.101:11210","d":135,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x160","r":"10.111.180.101:11210","d":126,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x44","r":"10.111.180.101:11210","d":126,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x40","r":"10.111.180.101:11210","d":126,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x5c","r":"10.111.180.101:11210","d":108,"s":"kv:CMD_GET"},{"c":"79bec7c299101f94/5f243f078b177992","i":"0x66","r":"10.111.180.101:11210","d":91,"s":"kv:CMD_GET"}]} |
Como acima, podemos ver o serviço para o qual o registro se destina e o tamanho da nossa amostra. Uma amostra em mais detalhes:
|
1 2 3 4 5 6 7 |
{ "c":"79bec7c299101f94/5f243f078b177992", "I":"0x15f", "r":"10.111.180.101:11210", "d":10036, "s":"kv:CMD_GET" } |
Podemos ver o endereço do servidor remoto (r), o tipo de operação (s), a duração do servidor (d) expressa em microssegundos e os identificadores exclusivos da solicitação (c e i). Podemos ver que o tempo limite mais longo tem uma duração de servidor de 10 milissegundos, portanto, nosso problema provavelmente não está no lado do servidor. Observe que a duração do servidor é o tempo que a solicitação passou no lado do servidor e não a duração total da solicitação.
A configuração do registro de respostas órfãs é feita por meio da string de conexão cluster.Connect. Há três campos de configuração:
- registro de respostas órfãs - valor booleano que define se o registro de respostas órfãs deve ou não ser ativado; o padrão é true.
- orphaned_response_logging_interval - um valor int expresso em milissegundos, define a duração de cada janela de registro; o padrão é 10 segundos.
- orphaned_response_logging_sample_size - um valor int, define quantas solicitações devem ser registradas por janela de registro; o padrão é 10 (sempre serão as x solicitações mais lentas da janela).
- durações_do_servidor - valor booleano que define se as durações de solicitação do lado do servidor devem ou não ser ativadas; o padrão é true e está disponível a partir do Couchbase Server 5.5.
Observe que, para que esses dois recursos funcionem, você deve estar usando Registro em log do gocb.
Suporte à configuração de várias redes
A configuração de várias redes permite que o SDK se conecte a clusters que expõem um conjunto diferente de nomes de host e portas em relação ao que eles usam internamente na rede (por exemplo, quando o cluster está em um contêiner diferente do aplicativo que usa o SDK). Atualmente, o suporte é considerado volátil e está sujeito a alterações a qualquer momento. O uso desse recurso é tratado por meio de uma nova propriedade chamada rede O valor da propriedade é passado na string de conexão usada em cluster.Connect. No momento, há três opções que podem ser usadas com essa propriedade: auto (esse também é o valor usado quando a opção está ausente na string de conexão ou vazia), default e external.
- padrão - fará com que o SDK use o nome do host/portas padrão fornecidos para cada nó.
- externo - fará com que o SDK use o nome do host/portas externas fornecidas para cada nó.
- automático ou propriedade ausente - fará com que o SDK tente descobrir a configuração correta a ser usada para o nó.
Correções de bugs
A lista de atualizações e correções incluídas nessa versão pode ser encontrada na seção Notas de versão.
Obtendo
Obtenha a versão mais recente usando ir obter gopkg.em/couchbase/gocb.v1 .
Clonar o repositório aqui.