Пара слов
Я часто думаю о многих технических «почему проблема», когда иду на прогулку, и иногда проблема будет думаться долго, пока каждый пункт проблемы не убедит меня, что она не закончена. Поэтому я хочу записать эти мысли и сформировать статью, которую можно будет использовать как новую серию. Вы можете не видеть код в этих статьях, но вы можете получить представление о некоторых проблемах, которые легко упустить из виду, и более глубокое «почему» проблемы.
Сегодня приносит первый1
Статья, почему Dubbo переписан на Go?
Созданный в Alibaba, Dubbo, исходный код которого был открыт в 2011 году, пережил 10 лет. В 2019 году его переписали на Go и выложили в открытый исходный код, а сейчас, спустя два года, он изменился по сравнению с оригиналом.V1.0.0
версия, разработанная дляV3.0.0
, пока количество звезд 3,8К.
Коллега однажды спросил меня, почему «старый» проект Даббо приходится переписывать на Go, есть ли в этом какой-то практический смысл?
Сегодня я поделюсь некоторыми своими взглядами.
Соедините прошлое и будущее
Я думаю, чтобы хорошо ответить на этот вопрос, мы должны начать с первоначального замысла Dubbo-go, На домашней странице github он представляется так:
Официальный китайский перевод
Реализованный на языке Apache Dubbo Go, он создает мост между Java и Golang, взаимодействует с экосистемой gRPC/Dubbo и позволяет экосистеме Java пользоваться техническими дивидендами облачной эпохи.
Позвольте мне перевести это простым способом: некоторые люди в компании или отделе используют Java-версию Dubbo, а некоторые люди используют Go, и им нужно общаться, поэтому для решения проблем со связью существует Dubbo-Go.
Итак, первый вопрос: почему компания использует Java, а затем Go?
Выбор языка программирования
Я думаю, что при выборе языка программирования в коммерческих компаниях наиболее важным моментом являетсяэффективный, а остальные пункты второстепенны. Поскольку основная цель коммерческой компании — получать прибыль, независимо от того, на каком языке она говорит, пока она может получать ту же выгоду с наименьшими затратами, это хороший язык.
Эффективность включает в себя несколько аспектов:
- эффективность разработки. Высокая эффективность разработки, проекты могут быть запущены в кратчайшие сроки, занять рынок и сэкономить трудозатраты.
- операционная эффективность. Высокая эффективность работы, экономия затрат на сервер
Глядя на выбор многих отечественных коммерческих компаний, таких как Али.
Али использовал PHP в первые дни.Основным соображением при выборе PHP была эффективность разработки.Однако с развитием бизнеса производительность PHP не могла поддерживаться, и язык с высокой операционной эффективностью должен был быть изменен.
C/C++, естественно, считается высокоэффективным, но эффективность разработки этих двух языков низка, и необходимо найти баланс между эффективностью разработки и эффективностью эксплуатации, поэтому Али выбрал Java.
Когда Али официально ответил, почему он выбрал Java на Zhihu, он в основном учитывал следующие моменты:представление,Легко учить,Экологически богатый,активное сообщество
Ставить производительность на первое место, легкость в освоении, экологичность и активность в сообществе на самом деле являются эффективностью разработки.Именно с этими преимуществами эффективность разработки высока.
Когда Alibaba выбрала Java, она разработала большое количество промежуточного программного обеспечения Java и взрастила большое количество талантов Java.Поэтому другие компании также обращаются к Alibaba при выборе технологий, в результате чего все больше и больше компаний выбирают Java.
То же самое верно и для выбора Go.Некоторые молодые компании могут использовать языки сценариев, такие как PHP и Python на ранней стадии.Когда они развиваются и растут, им приходится сталкиваться с той же проблемой, что и Али: проблемы с производительностью.
Go был выпущен в 2012 году, и у каждого есть выбор. Go обладает высокой производительностью и очень прост в использовании. Новые компании, такие как ByteDance, в основном ориентируются на Go.
Так что в целом разумно выбирать Java или Go и разумно существовать.
Почему компании выбирают Java и хотят использовать Go?
- По сравнению с Java, язык Go обладает такими характеристиками, как быстрый запуск, высокая скорость компиляции, небольшой объем памяти и хороший параллелизм (сопрограммы), поэтому компании, у которых уже есть Java, также рассмотрят Go, но в настоящее время на такие компании приходится малая доля..
- В некоторых компаниях нет обязательного стека технологий, поэтому новые отделы и новые предприятия могут не мешать и выбирать новый язык для разработки на Go.
резюме
Подводя итог, разумно выбрать Java или Go, разумно выбрать и то, и другое внутри компании, хотя доля невелика, но потребность в общении между Java и Go все же есть.
Dubbo побеждает в рамках RPC
На ранней стадии компании это обычно один сервис. Когда масштаб достигает определенного уровня и отдельное приложение не может поддерживать развитие бизнеса, оно выбирает микросервисную архитектуру. В настоящее время это простая в использовании структура RPC. необходим.
Среди RPC-фреймворков, которые могут адаптироваться к языку Java, Dubbo является самой ранней программой с открытым исходным кодом в Китае, она была открыта в 2011 году.
Конкуренты, подобные ему, такие как Spring Cloud, имели открытый исходный код в 2014 году, Weibo Motan был открытым исходным кодом в 2017 году, межъязыковой gRPC был открытым исходным кодом в 2015 году, а Thrift был открытым исходным кодом в 2007 году.
Только Thrift предшествует ему, но Thrift — это всего лишь инфраструктура RPC, а Dubbo включает в себя готовые возможности управления службами, такие как регистрация и обнаружение служб, балансировка нагрузки, отказоустойчивость, динамическая конфигурация и многое другое.
Можно сказать, что у раннего фреймворка Java RPC не было выбора.
Даже в эпоху расцвета инфраструктур RPC, с использованием стольких компаний и поддержкой Али, Dubbo также имеет свое место.
резюме
Когда компания выбирает язык программирования Java и фреймворк Dubbo (есть еще много вариантов), а позже хочет попробовать Go, или какой-то новый бизнес или новый отдел хочет попробовать Go, они сталкиваются со сложной проблемой: как Go соотносится с Связь Java Dubbo.
Поскольку протокол Dubbo является частным протоколом, стоимость его повторной реализации в Go все еще довольно высока. Так появился Dubbo-Go.С этой точки зрения Dubbo-Go по-прежнему имеет большое значение для соединения Java и Go.
Завершите борьбу с пулами потоков
Если вы используете фреймворк Dubbo, вам часто нужен шлюз Dubbo.Что касается шлюза Dubbo, вы можете обратиться к моей статье:«Эволюция микросервисного шлюза».
В этой статье подробно представлены предыстория, трудности, выбор, дизайн, эволюция и опыт наступания на яму шлюза Dubbo.Среди них я потратил много времени на знакомство с "борьбой с пулом потоков". , Потоки очень ценны, но если шлюз Dubbo вызывается синхронно, один запрос должен занимать один поток, что приводит к невозможности параллелизма, а когда пул потоков заполнен, это повлияет на другие запросы.
Таким образом, решение состоит в том, чтобы либо изолировать пул потоков, либо перейти на асинхронные вызовы. Изолированный пул потоков решает только проблему, что запросы не влияют друг на друга, но параллелизм все равно подняться не может.Решается отлично переходом на асинхронные вызовы, но кодирование слишком сложное.
И сопрограмма Go может просто решить эту проблему.Сопрограмма Go очень легкая и имеет более высокую эффективность планирования, поэтому мы можем написать очень эффективный шлюз с помощью простого кода.
Например, можно интуитивно почувствовать, что производительность Nginx очевидна для всех, но если она реализована на Java, я не знаю, сколько машин нужно для достижения производительности Nginx, но Baidu использует BFE, написанный Go заменить Nginx на обратном прокси, видно насколько преувеличена его производительность.
Для введения и принципа сопрограмм вы можете обратиться к моей статье:"Голанг писал год, поговорим о процессах, тредах и сопрограммах".
резюме
Таким образом, на шлюзе Dubbo Dubbo-Go также предоставляет новое решение, и уже существует шлюз Dubbo-Go для онлайн-справки по проектам с открытым исходным кодом.Dubbo-go-pixiu
.
Прокладывая путь для Dubbo Mesh
Service Mesh постепенно превратилась в микросервисную архитектуру следующего поколения, и Go определенно является ярким языком Mesh.Будь то K8S, Docker и другие облачные инфраструктуры, написанные на Go, или скорость разработки Go и скорость сопрограммы. Высокая возможность параллелизма делает его предпочтительным языком для Mesh.
Исходя из этого, сетка Dubbo и Dubbo-Go также проложили путь для этого, но в настоящее время Dubbo Mesh все еще находится в небольшой области, и полный план реализации не является открытым исходным кодом.С этой точки зрения, если компания хочет используйте Dubbo Mesh На пути трансформации Dubbo-Go также может быть одним из моментов, на которых они должны сосредоточиться.
Суммировать
Сказав так много, пора прямо ответить, почему Dubbo переписан на Go.Ответом на этот вопрос является официальное предложение: построить мост между Java и Golang. Что касается того, зачем «строить этот мост», то есть несколько ключевых моментов:
- Найдите и подпишитесь на общедоступную учетную запись WeChat «мастер ошибок», ответьте на ключевое слово «Nacos», чтобы отправить вам электронную книгу «Архитектура и принципы Nacos», информация Dubbo также готовится, если вы не хотите ее пропустить, вы можете нажать на нее.