{"id":4641,"date":"2018-02-19T15:01:36","date_gmt":"2018-02-19T23:01:36","guid":{"rendered":"http:\/\/www.couchbase.com\/blog\/?p=4641"},"modified":"2025-06-13T20:46:29","modified_gmt":"2025-06-14T03:46:29","slug":"couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/","title":{"rendered":"Introdu\u00e7\u00e3o ao Couchbase HA\/DR: cliente Java com reconhecimento de v\u00e1rios clusters"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Nesta postagem, vou dar uma olhada em um aplicativo de amostra que usa o <a title=\"Servidor Couchbase\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\">Servidor Couchbase<\/a> Cliente Java MCA (Multi-Cluster Aware). Esse cliente anda de m\u00e3os dadas com a Replica\u00e7\u00e3o entre centros de dados do Couchbase (<a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/xdcr\/xdcr-intro.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/xdcr\/xdcr-intro.html\">XDCR<\/a>).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O XDCR oferece suporte \u00e0 replica\u00e7\u00e3o flex\u00edvel de dados entre diferentes clusters. O XDCR \u00e9 um recurso importante para implementa\u00e7\u00f5es em larga escala e em v\u00e1rios data centers. As refer\u00eancias abaixo incluem v\u00e1rias refer\u00eancias sobre o XDCR. O cliente MCA pode redirecionar automaticamente o tr\u00e1fego para esses clusters separados com base na configura\u00e7\u00e3o da biblioteca, aliviando o desenvolvedor do aplicativo do gerenciamento de grande parte da complexidade envolvida.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esses e outros recursos permitem que as implanta\u00e7\u00f5es do Couchbase ofere\u00e7am suporte a uma variedade de <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/combine-clusters-to-achieve-high-availability\/\">alta disponibilidade<\/a> e estrat\u00e9gias de recupera\u00e7\u00e3o de desastres. Para saber mais antes de se aprofundar nas especificidades do cliente, d\u00ea uma olhada nestes recursos:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Introdu\u00e7\u00e3o ao Couchbase HA\/DR <a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/ha-dr\/ha-dr-intro.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/ha-dr\/ha-dr-intro.html\">Documenta\u00e7\u00e3o de alta disponibilidade\/recupera\u00e7\u00e3o de desastres<\/a><br \/>\nCouchbase XDCR - <a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/xdcr\/xdcr-intro.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/xdcr\/xdcr-intro.html\">Documenta\u00e7\u00e3o do XDCR<\/a><br \/>\nWebinar sobre XDCR\/MCA (incluindo demonstra\u00e7\u00e3o t\u00e9cnica) - <a title=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;referrer=https%3A%2F%2Fwww.couchbase.com%2Fresources%2Fwebinars&amp;eventid=1569790&amp;sessionid=1&amp;key=86048A27BD53D35AFA6FFF8D43A09435&amp;regTag=&amp;sourcepage=register\" href=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;referrer=https%3A%2F%2Fwww.couchbase.com%2Fresources%2Fwebinars&amp;eventid=1569790&amp;sessionid=1&amp;key=86048A27BD53D35AFA6FFF8D43A09435&amp;regTag=&amp;sourcepage=register\" rel=\"noopener noreferrer\">Webinar sobre HA\/DR<\/a><br \/>\nTutorial do webinar - <a title=\"https:\/\/github.com\/couchbaselabs\/mca-java-sample\/blob\/master\/Tutorial.adoc\" href=\"https:\/\/github.com\/couchbaselabs\/mca-java-sample\/blob\/master\/Tutorial.adoc\">Configura\u00e7\u00e3o de clusters passo a passo, com o XDCR<\/a><br \/>\nUm olhar mais profundo sobre o XDCR - <a title=\"https:\/\/www.couchbase.com\/blog\/deep-dive-cross-data-center-replication-xdcr\/\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/deep-dive-cross-data-center-replication-xdcr\/\">Mergulho profundo na replica\u00e7\u00e3o entre data centers (XDCR)<\/a> por <a title=\"https:\/\/twitter.com\/deniswsrosa\" href=\"https:\/\/twitter.com\/deniswsrosa\">Denis Rosa<\/a><br \/>\nConfigurando o XDCR usando o Docker - <a title=\"https:\/\/www.couchbase.com\/blog\/replicate-nosql-data-between-datacenters-with-couchbase-xdcr\/\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/replicate-nosql-data-between-datacenters-with-couchbase-xdcr\/\">Replique dados NoSQL entre datacenters com o Couchbase XDCR<\/a> por <a title=\"https:\/\/twitter.com\/nraboy\" href=\"https:\/\/twitter.com\/nraboy\">Nick Raboy<\/a><br \/>\nV\u00eddeo curto sobre a configura\u00e7\u00e3o do XDCR usando o Docker - <a title=\"https:\/\/www.couchbase.com\/blog\/use-xdcr-replicate-nosql-data-couchbase-docker-containers\/\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/use-xdcr-replicate-nosql-data-couchbase-docker-containers\/\">Use o XDCR para replicar dados NoSQL entre cont\u00eaineres do Docker do Couchbase - Tutorial em v\u00eddeo<\/a> por <a title=\"https:\/\/twitter.com\/nraboy\" href=\"https:\/\/twitter.com\/nraboy\">Nick Raboy<\/a><\/p>\n<\/div>\n<h2 id=\"_mca_client_details_in_brief\">Detalhes do cliente MCA em resumo<\/h2>\n<div class=\"paragraph\">\n<p>O MCA Java SDK se baseia no padr\u00e3o <a title=\"https:\/\/docs.couchbase.com\/java-sdk\/current\/start-using-sdk.html\" href=\"https:\/\/docs.couchbase.com\/java-sdk\/current\/start-using-sdk.html\">SDK Java do Couchbase<\/a>. A API principal imita principalmente a do cliente padr\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">Atualmente, o cliente MCA adiciona v\u00e1rios outros grupos de recursos, incluindo:<\/div>\n<ol>\n<li>A capacidade de priorizar uma lista de clusters.<\/li>\n<li>Formas de fornecer regras sobre o que constitui uma falha.<\/li>\n<li>APIs para coordenar as inst\u00e2ncias do cliente.<\/li>\n<li>Uma interface de gerenciamento.<\/li>\n<\/ol>\n<p>Discutiremos os dois primeiros usando o exemplo de c\u00f3digo. O gerenciamento ocorre de forma program\u00e1tica ou por meio de uma interface JMX. Isso permite que os administradores alternem os clusters na lista de prioridades. Est\u00e1 fora do escopo desta postagem.<\/p>\n<h2 id=\"_the_sample_application\">O aplicativo de amostra<\/h2>\n<div class=\"paragraph\">\n<p>Para ilustrar o uso do cliente MCA, temos um aplicativo de amostra simples. O aplicativo executa um n\u00famero configur\u00e1vel de threads em grupos. Um grupo simplesmente l\u00ea do banco de dados, um grava novos registros aleat\u00f3rios, um l\u00ea documentos, modifica-os e grava-os de volta, e um executa um simples <a title=\"n1ql\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/n1ql\/\">N1QL<\/a> consulta. A ideia \u00e9 fornecer uma variedade de cargas para aplicar em um cluster. Em <a title=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;referrer=https%3A%2F%2Fwww.couchbase.com%2Fresources%2Fwebinars&amp;eventid=1569790&amp;sessionid=1&amp;key=86048A27BD53D35AFA6FFF8D43A09435&amp;regTag=&amp;sourcepage=register\" href=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;referrer=https%3A%2F%2Fwww.couchbase.com%2Fresources%2Fwebinars&amp;eventid=1569790&amp;sessionid=1&amp;key=86048A27BD53D35AFA6FFF8D43A09435&amp;regTag=&amp;sourcepage=register\" rel=\"noopener noreferrer\">este webinar<\/a>Na se\u00e7\u00e3o \"Failover\", usamos esse aplicativo para ilustrar um comportamento simples de failover entre clusters.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea pode encontrar o c\u00f3digo completo, juntamente com instru\u00e7\u00f5es de constru\u00e7\u00e3o e outros materiais <a title=\"https:\/\/github.com\/couchbaselabs\/mca-java-sample\" href=\"https:\/\/github.com\/couchbaselabs\/mca-java-sample\">no GitHub<\/a>. Aqui est\u00e1 um exemplo de invoca\u00e7\u00e3o em execu\u00e7\u00e3o em dois clusters de 3 n\u00f3s com 10 threads atualizando documentos.<\/p>\n<\/div>\n<pre class=\"lang:sh decode:true\">java -jar mca-1.0.jar -c 172.23.123.4,172.23.123.5,172.23.123.6:172.23.122.55,172.23.122.56,172.23.122.57 -b my_bucket -i user -p password -u 10 -l statistics<\/pre>\n<p>Agora, vamos examinar as partes principais do c\u00f3digo.<\/p>\n<h2 id=\"_code_walkthrough\">Passo a passo do c\u00f3digo<\/h2>\n<div class=\"paragraph\">\n<p>O c\u00f3digo do aplicativo, nesse caso, consiste em uma classe principal e algumas classes auxiliares simples. Quando temos a inst\u00e2ncia do cliente MCA, ela \u00e9 usada quase exatamente como o cliente normal. Ent\u00e3o, vou me concentrar apenas na configura\u00e7\u00e3o do cliente. O c\u00f3digo vem da classe\u00a0<a title=\"https:\/\/github.com\/couchbaselabs\/mca-java-sample\/blob\/master\/src\/main\/java\/com\/couchbase\/server\/mca\/ClusterBasics.java\" href=\"https:\/\/github.com\/couchbaselabs\/mca-java-sample\/blob\/master\/src\/main\/java\/com\/couchbase\/server\/mca\/ClusterBasics.java\">ClusterBasics<\/a> classe.<\/p>\n<\/div>\n<div class=\"sect3\">\n<h4 id=\"_cluster_nodes_and_groupings\">N\u00f3s e agrupamentos de clusters<\/h4>\n<div class=\"paragraph\">\n<p>Os clusters s\u00e3o especificados na linha de comando como grupos de n\u00f3s separados por dois pontos (<code>:<\/code>). Em cada grupo, os nomes dos n\u00f3s ou os endere\u00e7os IP s\u00e3o separados por v\u00edrgulas. Implicitamente, os clusters s\u00e3o especificados em ordem de prioridade. Esse bloco de c\u00f3digo divide esse formato simples em conjuntos e cria uma especifica\u00e7\u00e3o de cluster para cada cluster. (Uma especifica\u00e7\u00e3o de cluster pode incluir um ID para facilitar a refer\u00eancia. Isso n\u00e3o \u00e9 necess\u00e1rio aqui, mas vale a pena ressaltar).<\/p>\n<\/div>\n<pre class=\"lang:java decode:true\">String[] clusters = options.stringValueOf(\"clusters\").split(\":\");\r\n\r\nList&lt;ClusterSpec&gt; specs = new ArrayList&lt;&gt;(clusters.length);\r\n\r\nfor (String cluster: clusters) {\r\n  Set&lt;String&gt; nodes = Arrays.stream(cluster.split(\",\")).collect(Collectors.toSet());\r\n  specs.add(ClusterSpec.create(nodes));\r\n}<\/pre>\n<\/div>\n<h4 id=\"_couchbase_service_types\">Tipos de servi\u00e7o do Couchbase<\/h4>\n<div class=\"paragraph\">\n<p>Falaremos sobre coordena\u00e7\u00e3o e monitoramento de falhas em breve. Voc\u00ea pode ajustar ambos por tipo de servi\u00e7o. Neste exemplo, estamos usando a recupera\u00e7\u00e3o direta de chave\/valor (<code>ServiceType.BINARY<\/code>) e consultas N1QL (<code>ServiceType.QUERY<\/code>). Essas duas linhas seguintes preparam um conjunto de tipos de servi\u00e7o para uso posterior.<\/p>\n<\/div>\n<pre class=\"lang:java decode:true\">serviceTypes.add(ServiceType.BINARY);\r\nserviceTypes.add(ServiceType.QUERY);<\/pre>\n<h4 id=\"_inter_client_coordination\">Coordena\u00e7\u00e3o entre clientes<\/h4>\n<div class=\"paragraph\">\n<p>Em seguida, come\u00e7amos a ver a diferen\u00e7a real nos recursos desse cliente. <code>Coordenadores<\/code> gerenciam a orquestra\u00e7\u00e3o do comportamento entre as inst\u00e2ncias do cliente. Atualmente, apenas coordenadores isolados foram implementados, mas isso \u00e9 apropriado para este caso. Outros mais sofisticados est\u00e3o planejados para o futuro. Ainda assim, observando todas as op\u00e7\u00f5es, voc\u00ea pode ver que at\u00e9 mesmo um coordenador isolado permite um pouco de controle. Veja a seguir como criar um coordenador com algumas op\u00e7\u00f5es n\u00e3o padr\u00e3o.<\/p>\n<\/div>\n<pre class=\"lang:java decode:true\">Coordinator coordinator = Coordinators.isolated(new IsolatedCoordinator.Options() \r\n  .clusterSpecs(specs) \r\n  .activeEntries(specs.size()) \r\n  .failoverNumNodes(2) \r\n  .gracePeriod(TIMEOUT) \r\n  .topologyBehavior(TopologyBehavior.WRAP_AT_END) \r\n  .serviceTypes(serviceTypes) \r\n);<\/pre>\n<div>\n<p>Notas de c\u00f3digo (por n\u00famero de linha):<\/p>\n<ol>\n<li>Create an `IsolatedCoordinator` instance with the configured options<\/li>\n<li>Especifique os n\u00f3s para cada membro dessa topologia<\/li>\n<li>Definir o n\u00famero de clusters a serem considerados ativos<\/li>\n<li>Defina o n\u00famero de n\u00f3s individuais com falha antes que o cluster inteiro sofra uma falha completa<\/li>\n<li>Per\u00edodo de car\u00eancia ap\u00f3s a falha antes da troca de cluster<\/li>\n<li>Selecione o comportamento quando o final de uma topologia for alcan\u00e7ado. As alternativas incluem permanecer no cluster final ou inverter a lista. A melhor op\u00e7\u00e3o depender\u00e1 de seu cen\u00e1rio espec\u00edfico.<\/li>\n<li>Atribuir os servi\u00e7os governados<\/li>\n<\/ol>\n<h4 id=\"_failure_detection\">Detec\u00e7\u00e3o de falhas<\/h4>\n<div class=\"paragraph\">\n<p>O cliente pode monitorar uma grande quantidade de informa\u00e7\u00f5es durante a opera\u00e7\u00e3o. Os detectores de falhas usam essa riqueza de informa\u00e7\u00f5es que ocorrem nos bastidores. Eles a utilizam para sinalizar ao coordenador. O coordenador pode ent\u00e3o decidir como responder.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A <code>Detector de falha de monitoramento de tr\u00e1fego<\/code> observa as solicita\u00e7\u00f5es enviadas ao servidor. Voc\u00ea pode configurar os tipos de erros (exce\u00e7\u00f5es) a serem contados, o n\u00famero limite de exce\u00e7\u00f5es, o intervalo de tempo em que elas devem ocorrer e muito mais. Na maioria das vezes, uso os padr\u00f5es e apenas ajusto a contagem e o intervalo das opera\u00e7\u00f5es com falha.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O cliente tamb\u00e9m tem visibilidade do que est\u00e1 acontecendo com os n\u00f3s e com o cluster diretamente. Isso \u00e9 capturado usando um <code>NodeHealthFailureDetector<\/code>. \u00c9 melhor deixar algumas nuances para a documenta\u00e7\u00e3o. Eu apenas uso os padr\u00f5es aqui.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por fim, voc\u00ea pode criar combina\u00e7\u00f5es de condi\u00e7\u00f5es complexas usando <code>ConjunctionFailureDetector<\/code> e <code>Detector de falha de disjun\u00e7\u00e3o<\/code>. Pense nos detectores de conjun\u00e7\u00e3o como a realiza\u00e7\u00e3o de um \"e\" l\u00f3gico dos detectores constituintes. A disjun\u00e7\u00e3o faz um \"ou\". Quero ser acionado em qualquer falha, portanto, conecto meu monitoramento de tr\u00e1fego e de sa\u00fade em um <code>Detector de falha de disjun\u00e7\u00e3o<\/code> para obter o objeto detector final a ser entregue ao cliente.<\/p>\n<\/div>\n<pre class=\"lang:java decode:true\">TrafficMonitoringFailureDetector.Options trafficOptions = TrafficMonitoringFailureDetector.options() \r\n  .maxFailedOperations(5) \r\n  .failureInterval(60); \r\n\r\nFailureDetectorFactory&lt;TrafficMonitoringFailureDetector&gt; traffic = FailureDetectorFactories.trafficMonitoring(coordinator, trafficOptions); \r\n\r\nNodeHealthFailureDetector.Options healthOptions = NodeHealthFailureDetector.options();\r\n\r\nFailureDetectorFactory&lt;NodeHealthFailureDetector&gt; health = FailureDetectorFactories.nodeHealth(coordinator, healthOptions); \r\n\r\nDisjunctionFailureDetectorFactory detector = FailureDetectorFactories.disjunction(traffic, health);<\/pre>\n<p>Notas de c\u00f3digo (por n\u00famero de linha):<\/p>\n<ol>\n<li>Instanciar e configurar o <code>Detector de falha de monitoramento de tr\u00e1fego<\/code> op\u00e7\u00f5es<\/li>\n<li>Corrigir o n\u00famero de opera\u00e7\u00f5es com falha necess\u00e1rias para indicar um problema<\/li>\n<li>Defina o intervalo de tempo no qual as falhas ser\u00e3o armazenadas<\/li>\n<li value=\"5\">Criar um <code>Detector de falha de monitoramento de tr\u00e1fego<\/code> com acesso \u00e0 inst\u00e2ncia de f\u00e1brica <code>Coordenador<\/code> para acionar, e nossas op\u00e7\u00f5es<\/li>\n<li value=\"9\">Criar um <code>NodeHealthFailureDetector<\/code> com op\u00e7\u00f5es padr\u00e3o<\/li>\n<li value=\"11\">Defina a l\u00f3gica final usando um <code>Detector de falha de disjun\u00e7\u00e3o<\/code>novamente por meio de uma f\u00e1brica<\/li>\n<\/ol>\n<\/div>\n<h4 id=\"_client_instantiation\">Instancia\u00e7\u00e3o de cliente<\/h4>\n<div class=\"paragraph\">\n<p>Por fim, instanciamos um cliente e o usamos para obter uma inst\u00e2ncia de bucket. Para quem n\u00e3o est\u00e1 familiarizado com o Couchbase, os buckets s\u00e3o uma abstra\u00e7\u00e3o organizacional de alto n\u00edvel. Voc\u00ea pode pensar neles como algo entre uma tabela e um banco de dados completo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O identificador do bucket \u00e9 tudo de que precisamos para executar as cargas em nossos clusters. Um bucket de cliente com v\u00e1rios clusters permite que voc\u00ea especifique tempos limite para opera\u00e7\u00f5es individuais. Para simplificar, envolvi a interface em uma fachada, aplicando apenas um tempo limite fixo a cada opera\u00e7\u00e3o. Isso torna a interface id\u00eantica \u00e0 interface padr\u00e3o.<\/p>\n<\/div>\n<pre class=\"lang:java decode:true\">MultiClusterClient client = new MultiClusterClient(coordinator, detector);\r\n\r\nclient.authenticate(options.stringValueOf(\"id\"), options.stringValueOf(\"password\"));\r\nbucket = new BucketFacade(client.openBucket(bucketName, null), TIMEOUT, TimeUnit.MILLISECONDS);<\/pre>\n<h2 id=\"_wrapping_up\">Concluindo<\/h2>\n<div class=\"paragraph\">\n<p>Isso \u00e9 tudo sobre os novos conceitos necess\u00e1rios para come\u00e7ar a usar o cliente MCA. O restante do c\u00f3digo analisa as op\u00e7\u00f5es, configura os threads solicitados e simplesmente os executa em loops. H\u00e1 algumas estat\u00edsticas inclu\u00eddas. Eu fa\u00e7o chamadas para obter os dados aleat\u00f3rios para escrever e atualizar documentos, portanto, esse c\u00f3digo n\u00e3o \u00e9 otimizado para carga de condu\u00e7\u00e3o. No entanto, ele pode fornecer algumas informa\u00e7\u00f5es sobre o desempenho oferecido pelo Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Novamente, para ver tudo isso em a\u00e7\u00e3o, al\u00e9m de como os clusters se comportam, confira a demonstra\u00e7\u00e3o durante a segunda metade do\u00a0<a title=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;referrer=https%3A%2F%2Fwww.couchbase.com%2Fresources%2Fwebinars&amp;eventid=1569790&amp;sessionid=1&amp;key=86048A27BD53D35AFA6FFF8D43A09435&amp;regTag=&amp;sourcepage=register\" href=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;referrer=https%3A%2F%2Fwww.couchbase.com%2Fresources%2Fwebinars&amp;eventid=1569790&amp;sessionid=1&amp;key=86048A27BD53D35AFA6FFF8D43A09435&amp;regTag=&amp;sourcepage=register\" rel=\"noopener noreferrer\">este webinar<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A vers\u00e3o 1.0 do cliente MCA foi lan\u00e7ada recentemente. No momento, \u00e9 um recurso exclusivo da Enterprise Edition, no momento em que este texto foi escrito. Para saber mais e obter acesso ao cliente, fale com um representante de vendas do Couchbase (<a href=\"mailto:sales@couchbase.com\">sales@couchbase.com<\/a>). Voc\u00ea tamb\u00e9m pode entrar em contato comigo para obter mais informa\u00e7\u00f5es, conforme descrito abaixo.<\/p>\n<\/div>\n<h3 id=\"_postscript\">P\u00f3s-escrito<\/h3>\n<div class=\"paragraph\">O Couchbase \u00e9 de c\u00f3digo aberto e pode ser testado gratuitamente.<\/div>\n<div class=\"paragraph\"><strong>Comece a usar<\/strong> com <a title=\"https:\/\/www.couchbase.com\/get-started\" href=\"https:\/\/developer.couchbase.com\/tutorials\">c\u00f3digo de amostra, consultas de exemplo, tutoriais e muito mais<\/a>.<\/div>\n<div class=\"paragraph\">Encontre mais recursos em nosso <a title=\"https:\/\/developer.couchbase.com\/community?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" href=\"https:\/\/developer.couchbase.com\/community?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">portal do desenvolvedor.<\/a><\/div>\n<div class=\"paragraph\">Siga-nos no Twitter <a title=\"https:\/\/twitter.com\/CouchbaseDev\" href=\"https:\/\/twitter.com\/CouchbaseDev\">@CouchbaseDev<\/a>.<\/div>\n<div class=\"paragraph\">Voc\u00ea pode postar perguntas em nosso <a title=\"https:\/\/www.couchbase.com\/forums\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">f\u00f3runs<\/a>.<\/div>\n<div class=\"paragraph\">E participamos ativamente de <a title=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\" href=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\">Estouro de pilha<\/a>.<\/div>\n<div class=\"paragraph\">Entre em contato comigo pelo Twitter com perguntas, coment\u00e1rios, t\u00f3picos que voc\u00ea gostaria de ver etc. <a title=\"https:\/\/twitter.com\/HodGreeley\" href=\"https:\/\/twitter.com\/HodGreeley\">@HodGreeley<\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>In this post, I\u2019m going to take a look at a sample application that uses the Couchbase Server Multi-Cluster Aware (MCA) Java client. This client goes hand-in-hand with Couchbase\u2019s Cross-Data Center Replication (XDCR) capabilities. XDCR supports flexible replication of data [&hellip;]<\/p>","protected":false},"author":73,"featured_media":4519,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816,9415,1818],"tags":[2127,2126,1725],"ppma_author":[9042],"class_list":["post-4641","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","category-xdcr","category-java","tag-disaster-recovery","tag-high-availability","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.7 (Yoast SEO v26.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client\" \/>\n<meta property=\"og:description\" content=\"In this post, I\u2019m going to take a look at a sample application that uses the Couchbase Server Multi-Cluster Aware (MCA) Java client. This client goes hand-in-hand with Couchbase\u2019s Cross-Data Center Replication (XDCR) capabilities. XDCR supports flexible replication of data [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-19T23:01:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:46:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1673\" \/>\n\t<meta property=\"og:image:height\" content=\"1056\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Hod Greeley, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@HodGreeley\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hod Greeley, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/\"},\"author\":{\"name\":\"Hod Greeley, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4\"},\"headline\":\"Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client\",\"datePublished\":\"2018-02-19T23:01:36+00:00\",\"dateModified\":\"2025-06-14T03:46:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/\"},\"wordCount\":1326,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png\",\"keywords\":[\"Disaster Recovery\",\"High Availability\",\"NoSQL Database\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\",\"Cross Data Center Replication (XDCR)\",\"Java\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/\",\"name\":\"Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png\",\"datePublished\":\"2018-02-19T23:01:36+00:00\",\"dateModified\":\"2025-06-14T03:46:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png\",\"width\":1673,\"height\":1056},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4\",\"name\":\"Hod Greeley, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/21eb69cb5d4a401fb23b149e4f4e9e87\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g\",\"caption\":\"Hod Greeley, Developer Advocate, Couchbase\"},\"description\":\"Hod Greeley is a Developer Advocate for Couchbase, living in Silicon Valley. He has over two decades of experience as a software engineer and engineering manager. He has worked in a variety of software fields, including computational physics and chemistry, computer and network security, finance, and mobile. Prior to joining Couchbase in 2016, Hod led developer relations for mobile at Samsung. Hod holds a Ph.D. in chemical physics from Columbia University.\",\"sameAs\":[\"https:\/\/hod.greeley.org\/blog\",\"https:\/\/x.com\/HodGreeley\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/hod-greeley\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introdu\u00e7\u00e3o ao Couchbase HA\/DR: cliente Java com reconhecimento de v\u00e1rios clusters","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/","og_locale":"pt_BR","og_type":"article","og_title":"Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client","og_description":"In this post, I\u2019m going to take a look at a sample application that uses the Couchbase Server Multi-Cluster Aware (MCA) Java client. This client goes hand-in-hand with Couchbase\u2019s Cross-Data Center Replication (XDCR) capabilities. XDCR supports flexible replication of data [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-02-19T23:01:36+00:00","article_modified_time":"2025-06-14T03:46:29+00:00","og_image":[{"width":1673,"height":1056,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png","type":"image\/png"}],"author":"Hod Greeley, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@HodGreeley","twitter_misc":{"Written by":"Hod Greeley, Developer Advocate, Couchbase","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/"},"author":{"name":"Hod Greeley, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4"},"headline":"Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client","datePublished":"2018-02-19T23:01:36+00:00","dateModified":"2025-06-14T03:46:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/"},"wordCount":1326,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png","keywords":["Disaster Recovery","High Availability","NoSQL Database"],"articleSection":["Best Practices and Tutorials","Couchbase Server","Cross Data Center Replication (XDCR)","Java"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/","name":"Introdu\u00e7\u00e3o ao Couchbase HA\/DR: cliente Java com reconhecimento de v\u00e1rios clusters","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png","datePublished":"2018-02-19T23:01:36+00:00","dateModified":"2025-06-14T03:46:29+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/HADR-2.png","width":1673,"height":1056},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-high-availability-disaster-recovery-java-multi-cluster-aware-client\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Intro to Couchbase HA\/DR: Java Multi-Cluster Aware Client"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4","name":"Hod Greeley, Advogado do desenvolvedor, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/21eb69cb5d4a401fb23b149e4f4e9e87","url":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","caption":"Hod Greeley, Developer Advocate, Couchbase"},"description":"Hod Greeley \u00e9 um defensor dos desenvolvedores da Couchbase e mora no Vale do Sil\u00edcio. Ele tem mais de duas d\u00e9cadas de experi\u00eancia como engenheiro de software e gerente de engenharia. Trabalhou em diversas \u00e1reas de software, incluindo f\u00edsica e qu\u00edmica computacional, seguran\u00e7a de computadores e redes, finan\u00e7as e dispositivos m\u00f3veis. Antes de ingressar na Couchbase em 2016, Hod liderou as rela\u00e7\u00f5es com desenvolvedores para dispositivos m\u00f3veis na Samsung. Hod \u00e9 Ph.D. em f\u00edsica qu\u00edmica pela Universidade de Columbia.","sameAs":["https:\/\/hod.greeley.org\/blog","https:\/\/x.com\/HodGreeley"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/hod-greeley\/"}]}},"authors":[{"term_id":9042,"user_id":73,"is_guest":0,"slug":"hod-greeley","display_name":"Hod Greeley, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","author_category":"","last_name":"Greeley","first_name":"Hod","job_title":"","user_url":"https:\/\/hod.greeley.org\/blog","description":"Hod Greeley \u00e9 um defensor dos desenvolvedores da Couchbase e mora no Vale do Sil\u00edcio. Ele tem mais de duas d\u00e9cadas de experi\u00eancia como engenheiro de software e gerente de engenharia. Trabalhou em diversas \u00e1reas de software, incluindo f\u00edsica e qu\u00edmica computacional, seguran\u00e7a de computadores e redes, finan\u00e7as e dispositivos m\u00f3veis. Antes de ingressar na Couchbase em 2016, Hod liderou as rela\u00e7\u00f5es com desenvolvedores para dispositivos m\u00f3veis na Samsung. Hod \u00e9 Ph.D. em f\u00edsica qu\u00edmica pela Universidade de Columbia."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/73"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=4641"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4641\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/4519"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=4641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=4641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=4641"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=4641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}