Produtos secos | Integração rápida na versão nativa da nuvem, Ctrip Dubbo for Go de código aberto

Este artigo vem de uma entrevista com Xinming He da Open Source China, publicada pela primeira vez na Open Source China

Go não é atualmente a tendência do Ctrip, mas reuniu um grupo de fãs leais. Contando com a comunidade interna de Golang do Ctrip, ele continuou a crescer e se desenvolver. Já tinha uma prática de projeto em grande escala e seu impulso de desenvolvimento é muito rápido.

Recentemente, com base nos primeiros projetos da comunidade de código aberto dubbo-go, a Ctrip refatorou e desenvolveu a versão dubbo-go v1.0.0, que é mais fácil de estender e mais completa, e de código aberto, re-contribuindo para a comunidade.

Se precisar de mais materiais para entrevistas de grandes empresas, você também pode clicar para entrar diretamente e obtê-los gratuitamente! Senha: CSDN

fundo

Em 21 de maio, após mais de um ano de incubação, o Apache Dubbo se formou na Apache Software Foundation e se tornou um projeto Apache de nível superior.
Insira a descrição da imagem aqui
Dubbo é uma estrutura RPC de alto desempenho de código-fonte aberto por Ali em 2011 e tem uma influência considerável no ecossistema Java. No início, passei por um período sombrio de "parada de manutenção" que foi criticado pelo mundo exterior.Mais tarde, em 2017, o filho pródigo de Dubbo voltou e anunciou oficialmente que voltaria a focar na manutenção.

O Dubbo relançado visa reativar a comunidade, reconquistar a confiança dos desenvolvedores e gradualmente transformar o Dubbo em um projeto internacional e moderno. Passou um ano e meio desde o anúncio do reinício.

Nesse processo, Dubbo lançou várias versões e gradualmente se transformou de uma estrutura RPC em um ecossistema de microsserviço. No início de 2018, Dubbo entrou na incubadora da Apache Software Foundation e começou a desenvolver a comunidade com base na abordagem Apache.

Um ano depois, a Dubbo lançou o primeiro marco da versão 2.7.0 desde o reinício da manutenção na incubadora Apache, adicionando recursos como o suporte assíncrono que a comunidade está solicitando e a separação dos centros de registro e configuração.

Durante este período, também foi colocado em ordem o desenvolvimento do Dubbo 3.0.Em meados de abril deste ano, o anúncio oficial do progresso do Dubbo 3.0.As novidades desta versão incluem suporte para a assincronização da cadeia de Filtros, ágil programação e direção da nuvem nativa / Mesh de serviço A exploração e integração com Ali dentro e fora.

Então Dubbo se formou. Quais são as novidades sobre o Dubbo após a formatura?

A ecologia ainda está em desenvolvimento. A comunidade Dubbo lançou o Dubbo Roadmap 2019 há alguns dias e planeja lançar a versão oficial do Dubbo 3.0 em fevereiro de 2020. Os alunos interessados ​​podem conferir em detalhes.
Insira a descrição da imagem aqui

Recentemente, foi anunciado oficialmente que a linguagem Go havia se juntado ao ecossistema Dubbo, e o projeto dubbo-go foi lançado.
Insira a descrição da imagem aqui
Antes disso, a escalabilidade entre linguagens de Dubbo foi implementada. As linguagens suportadas incluem PHP, Node.js e Python. Ao mesmo tempo, ele também implementa suporte a chamadas REST com base no Java REST API-JAX-RS 2.0 padrão . Os detalhes são os seguintes:

  • PHP: php-for-apache-dubbo, da Lexin, fornecendo cliente e servidor
  • Node.js: dubbo2.js, por kilometer.com, fornecendo cliente
  • Node.js: egg-dubbo-rpc, pela equipe egg da Ant Financial, fornecendo cliente e servidor
  • Python: py-client-for-apache-dubbo, de kilometer.com, fornecendo cliente

Agora que o dubbo-go foi adicionado, os desenvolvedores Go podem finalmente provar o sabor do Dubbo.

É relatado que o projeto dubbo-go concluirá a migração para a Apache Software Foundation esta semana, como um subprojeto do projeto Apache Dubbo de nível superior. Nessa altura, o novo endereço do projeto dubbo-go também será : https://github.com/apache / dubbo-go.

Se precisar de mais materiais para entrevistas de grandes empresas, você também pode clicar para entrar diretamente e obtê-los gratuitamente! Senha: CSDN

Registro de entrevista de código aberto na China

Com relação ao histórico de P&D e detalhes técnicos específicos do projeto dobbo-go, a Open Source China entrevistou o co-patrocinador do projeto, He Xinming, Departamento de P&D da Ctrip Basic Central Taiwan.

Pergunta: O que é dubbo-go, qual é o seu posicionamento e por que este projeto?

Resposta: dubbo-go é uma implementação completa da linguagem Go do Dubbo.

Sabemos que o próprio Dubbo é baseado em Java, e muitas empresas também se concentram no desenvolvimento Java e usam o Dubbo como RPC ou estrutura de desenvolvimento de microsserviço.

Recentemente, a ecologia da linguagem Go se desenvolveu rapidamente. Devido às vantagens da linguagem, alguns de nossos departamentos começaram a tentar usar Go para desenvolver alguns novos projetos. Haverá problemas que precisam ser resolvidos:

  • Como realizar a intercomunicação entre o projeto Go e o projeto Java & Dubbo?
  • O próprio projeto Go também tem demandas para estruturas de desenvolvimento de microsserviços e RPC. Como resolvê-las?

Com base nesses dois problemas, a equipe do Ctrip refatorou e desenvolveu uma versão do dubbo-go v1.0.0 que é mais fácil de estender e mais completa com base nos primeiros projetos do dubbo-go e contribuiu com a comunidade.

Seu objetivo principal é resolver o problema de intercomunicação entre o projeto Go e o projeto Java & Dubbo, e também fornece uma opção de RPC e estruturas de desenvolvimento de microsserviço para o projeto Go.

dubbo-go fornece lado cliente e servidor. Atualmente, a comunidade dubbo-go é uma das comunidades mais ativas no ecossistema Dubbo. O posicionamento subsequente precisa atender aos requisitos oficiais do Dubbo e às necessidades dos usuários da comunidade.

Pergunta: sabemos que Dubbo tem conquistas muito altas no ecossistema Java, e o próprio ecossistema Go atual também tem algumas estruturas de microsserviço bem conhecidas. O dubbo-go tem a capacidade de competir com outras estruturas no ecossistema Go?

Resposta: Nossa maior capacidade é servir como a versão em linguagem Go do Dubbo, o que abre a lacuna entre as duas línguas, torna o Dubbo mais próximo do nativo da nuvem, fornece aos desenvolvedores a maior flexibilidade e reduz significativamente o número de empresas existentes serviços indo para a nuvem. Na era nativa da nuvem, as empresas têm mais uma escolha.

Pergunta: Os recursos do Go são refletidos no dubbo-go? (Por exemplo, como a alta simultaneidade de Go se transformou de Dubbo baseado em Java para dubbo-go?)

Resposta: Meu entendimento da linguagem Go é que, em primeiro lugar, o custo de aprendizado é relativamente pequeno. Comparado ao custo de aprendizado de Java, a linguagem Go é mais fácil de aprender e usar.

Em segundo lugar, no nível da linguagem, Go tem as vantagens de co-rotinas simples, eficientes e leves em seu modelo de programação CSP em processamento de alta simultaneidade. Em comparação com os programas Java baseados em JVM, os programas Go baseados em tempo de execução têm a capacidade de iniciar instantaneamente. Atrair muitos desenvolvedores, não vou elaborar sobre isso aqui.

Por fim, é a vantagem de ser uma linguagem nativa da nuvem. Com o surgimento de projetos excelentes, como Docker, k8s e Istio, o nativo da nuvem subjacente é basicamente unificado pela linguagem Go. Acredito que os dias para as empresas se desenvolverem no o modo nativo da nuvem não está longe. Acho que a ecologia da linguagem Go deve ficar cada vez melhor e mais e mais pessoas a usarão.

Apresentando o Dubbo baseado em Java no Go, como mencionado anteriormente, a vantagem trazida pelo dubbo-go é que ele pode se integrar rapidamente ao campo nativo da nuvem. Para falar sobre as características da linguagem Go, você pode consultar o projeto do modelo de E / S de rede assíncrona no dubbo-go. Esta parte reflete as vantagens da co-rotina leve da linguagem Go.

Aqui estão também as deficiências da linguagem Go:

  • Comparada com Java, Go ainda é uma linguagem muito jovem e não há uma biblioteca de modelos disponível, então a comunidade pagou um alto custo de desenvolvimento para escrever e manter a biblioteca de protocolo Hessian 2;
  • Comparado com o método de tratamento de erros try / catch do Java, a capacidade de tratamento de erros do Go é mais fraca;
  • A ecologia geral ainda não é tão boa quanto Java, por exemplo, não há uma biblioteca de E / S de rede poderosa como a Netty.
    Por que você mencionou isso, porque o próprio Dubbo usa as bibliotecas Java oficiais do protocolo Netty e Hessian 2, e o dubbo-go não as tinha quando foi iniciado, o que tornou o dubbo-go muito difícil, mas a comunidade acabou Superando eles e, adicionalmente, contribuíram para os projetos de código aberto Getty e Hessian2.

Agradecimentos especiais a Yu Yu, o primeiro organizador da comunidade dubbo-go. A versão inicial do projeto foi desenvolvida em 2016 com o apoio de seu líder Hu Changcheng e seu colega Liu Weisan. Suas contribuições para os projetos Hessian2 e Getty também são a versão mais recente do dubbo-go. Estabeleça uma base sólida.

Pergunta: Não muito tempo atrás, o Dubbo anunciou que enfatizaria o Service Mesh no 3.0 após seu anúncio. Isso é independente de idioma. É necessário que o dubbo-go se junte ao ecossistema neste momento?

Resposta: A malha de serviços é de fato uma direção geral para o desenvolvimento futuro de microsserviços, mas, neste estágio, as grandes empresas nacionais não viram casos de muito sucesso. Muitas pequenas e médias empresas ainda não concluíram seus próprios microsserviços ou mesmo começaram.

Atualmente, a comunidade dubbo-go dá prioridade à resolução dos problemas encontrados na implementação deste tipo de tecnologia de microsserviço empresarial, com foco na complementação das funções relacionadas, otimizando o desempenho geral e resolvendo bugs. Quanto ao futuro, acredito que com a exploração do Dubbo Mesh na área de Service Mesh, o dubbo-go certamente irá acompanhar e desempenhar um papel importante.

P: Qual é a relação de atualização entre dubbo-go e Dubbo? É um recurso de atualização síncrona ou alguma inovação própria?

Resposta: A última versão que estamos lançando é a v1.0.0. Especificaremos a versão Dubbo compatível sempre que lançarmos uma nova versão. Portanto, o dubbo-go precisa ser compatível com as funções correspondentes ao número da versão do Dubbo e alguns recursos do Dubbo serão atualizados de forma síncrona.

P: Quais são os recursos interessantes da versão recém-lançada?

Resposta: A versão atualmente lançada v1.0.0 suporta as seguintes funções:

  • Função: Consumidor (√), Provedor (√)
  • Protocolo de transmissão: HTTP (√), TCP (√)
  • Protocolo de serialização: JsonRPC v2 (√), Hessian v2 (√)
  • Centro de registro: ZooKeeper (√)
  • Estratégia de cluster: Failover (√)
  • Balanceamento de carga: Aleatório (√)
  • Filtro: Verificação de integridade do eco (√)
  • mecanismo de extensão

A versão dubbo-go v1.0.0 é mantida principalmente por mim e meu colega Fang Yincheng no Ctrip. Os membros da comunidade Zhou Ziqing e Gao Singer participaram da contribuição. Esta versão segue o design de desacoplamento em camadas de código do Dubbo. As funções principais do Dubbo 2.6.x serão gradualmente implementadas no dubbo-go, incluindo o mecanismo de expansão de código baseado em SPI do Dubbo. O Dubbo-go também tem um mecanismo de extensão correspondente a ele.

No futuro, iremos introduzir gradualmente mais implementações de módulos escalonáveis ​​atuais, como adicionar mais balanceamento de carga, implementação de estratégia de cluster de estratégia de cluster (atualmente, essas tarefas são ativamente reivindicadas por parceiros da comunidade e esperamos que mais entusiastas da linguagem Go possam se juntar à comunidade para contribuir); Outro exemplo é o k8s, que é muito popular no campo nativo da nuvem. Também sincronizaremos o roteiro do Dubbo e acompanharemos o k8s como suporte do centro de registro. Atualmente, o membro da comunidade Zhang Haibin é responsável pelo acompanhamento .

Claro, a maioria dos desenvolvedores também pode implementar novas implementações dessas interfaces de módulo e expandi-las por meio de extensões para atender às suas necessidades especiais sem modificar o código-fonte. Ao mesmo tempo, damos as boas-vindas aos desenvolvedores para contribuir com extensões úteis para a comunidade.

Esta versão resolve um grande problema: uma solução que interopera com a versão Dubbo Java. Extraímos essa parte do projeto Hessian2, que se originou das primeiras contribuições da comunidade Yu Yu, e agora é mantida pelo membro da comunidade Wang Ge, com Zhou Ziqing e Gao Singh participando da contribuição.

No momento, o projeto concluiu o suporte compatível para a maioria dos tipos de Java. Você também pode integrar o projeto separadamente em seu próprio projeto.Seu protocolo de código aberto é o Apache-2.0.

Outra coisa importante é a biblioteca de E / S de rede assíncrona TCP usada atualmente por dubbo-go. Essa biblioteca também é baseada no projeto Getty escrito por Yu Yu nos primeiros dias. Atualmente é mantida pelos irmãos da comunidade Wang e Fang Yincheng. É também um acordo de código aberto Apache-2.0. Na próxima versão, otimizaremos ainda mais a E / S de rede e o despacho de threads de dubbo-go e Getty.

Além disso, planejamos oferecer suporte a várias outras funções importantes do Dubbo na próxima etapa, como:

  • regra de roteamento regra de roteamento (dubbo v2.6.x)
  • configuração dinâmica centro de configuração dinâmica (dubbo v2.7.x)
  • Métricas e monitoramento (dubbo v2.7.x)
  • monitoramento de link de rastreamento (dubbo ecos)

Pergunta: Qual é o status atual da aplicação do projeto?

Resposta: Dubbo-go agora começou a ser usado por algumas empresas para tentar integrar aplicativos da linguagem Go à pilha de tecnologia Java e Dubbo existente da empresa e construir novos aplicativos distribuídos da linguagem Go e outros cenários. Por exemplo, o Go interno de Zhongtong Express chama o serviço Java Dubbo, como a estrutura de serviço do aplicativo de linguagem Go da Ctrip e a interoperabilidade de aplicativos Go e Java.

A situação específica do aplicativo pode ser visualizada: https://github.com/dubbo/go-for-apache-dubbo/issues/2

P: Qual é a próxima direção de evolução?

Resposta: Depois que o dubbo-go mudou para a Apache Software Foundation como um subprojeto do Apache Dubbo, a primeira e mais importante coisa é a otimização adicional do desempenho. Embora o desempenho possa atender aos requisitos de nível de produção do aplicativo, sentimos que ainda não foi usado Go. As vantagens da linguagem, ainda há um espaço relativamente grande para otimização. Por exemplo, o Getty mencionado acima, a próxima versão fará algumas otimizações para o modelo de E / S de rede e despacho de thread do aplicativo dubbo-go Getty.

Além disso, ele contém algumas funções importantes mencionadas acima que precisamos concluir em um futuro próximo para maximizar a compatibilidade com o Dubbo em termos de integridade funcional. Em relação ao desenvolvimento futuro do dubbo-go, ele também evoluirá para o roadmap online do Dubbo 2.7.x.

P: Por falar em desempenho, qual é a situação atual de desempenho?

Resposta: Fizemos um projeto dubbo-go-benchmark. Quando o modelo de CPU é Intel® Xeon® CPU E5-2609 0 @ 2,40 GHz e o número de núcleos de CPU é 4 * 8, enviamos 1k e retornamos 1k de dados. Com 100 solicitações simultâneas, 100 w no total de solicitações, o qps pode chegar a cerca de 12.000.

O desempenho da CPU é substituído por uma configuração superior, como Intel Core i9 2,9 GHz, e os qps podem chegar a cerca de 20.000.

Continuaremos a otimizar o desempenho da biblioteca Hessian2 e da biblioteca Getty posteriormente para economizar recursos para a maioria dos usuários.

Se precisar de mais materiais para entrevistas de grandes empresas, você também pode clicar para entrar diretamente e obtê-los gratuitamente! Senha: CSDN

Se você gostou deste artigo, por favor, encaminhe-o e goste.

Lembre-se de me seguir!

Acho que você gosta

Origin blog.csdn.net/weixin_49527334/article/details/113002003
Recomendado
Clasificación