Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wird Dubbo in Go umgeschrieben?

Warum wird Dubbo in Go umgeschrieben?

WBOY
WBOYnach vorne
2023-04-10 12:51:031301Durchsuche

[[443126]]

Ein paar Worte zuerst

Ich denke beim Gehen oft über viele technische „Warum-Fragen“ nach. Manchmal denke ich lange über eine Frage nach, bis ich mich von jeder überzeugen kann Erst dann ist die Frage vollständig. Deshalb möchte ich diese Gedanken festhalten und einen Artikel formen, der als neue Serie verwendet werden kann. Möglicherweise können Sie den Code in diesen Artikeln nicht sehen, aber Sie können einen Blick auf einige Probleme werfen, die leicht übersehen werden, sowie auf das tiefere „Warum“ des Problems.

Heute kommt der erste Artikel: Warum sollte Dubbo in Go neu geschrieben werden?

Dubbo, das in Alibaba geboren wurde und 2011 als Open Source verfügbar war, hat 10 Jahre hinter sich. Im Jahr 2019 wurde es in Go neu geschrieben und als Open Source bereitgestellt. Jetzt, zwei Jahre später, hat es sich von der ursprünglichen Version V1.0.0 auf V3.0.0 weiterentwickelt und hat derzeit eine Sternzahl von 3,8.000.

Ein Kollege hat mich einmal gefragt, warum ein „altes“ Projekt wie Dubbo in Go neu geschrieben werden muss.

Lassen Sie mich heute über einige meiner Meinungen sprechen.

Vergangenheit und Zukunft verbinden

Um diese Frage gut zu beantworten, müssen wir mit der ursprünglichen Absicht von Dubbo-go beginnen. Es stellt sich so auf der Github-Homepage vor:

Der Beamte Die chinesische Übersetzung ist

Die Sprachimplementierung von Apache Dubbo Go schlägt eine Brücke zwischen Java und Golang, verbindet sich mit dem gRPC/Dubbo-Ökosystem und führt dazu, dass das Java-Ökosystem die technologischen Vorteile des Cloud-nativen Zeitalters genießen kann.

Lassen Sie es mich in Laiensprache übersetzen: In einem Unternehmen oder einer Abteilung verwenden einige Leute die Java-Version von Dubbo, andere verwenden Go. Die beiden müssen kommunizieren, daher wurde Dubbo-Go entwickelt, um das Kommunikationsproblem zu lösen.

Hier kommt also die erste Frage: Warum verwendet ein Unternehmen Java und dann Go? für andere Punkte sind zweitrangig. Da der Hauptzweck eines Handelsunternehmens darin besteht, Gewinne zu erzielen, ist es unabhängig von der Sprache eine gute Sprache, solange es zu den niedrigsten Kosten den gleichen Nutzen erzielen kann.

Effizienz umfasst mehrere Aspekte:

Entwicklungseffizienz. Die Entwicklungseffizienz ist hoch, das Projekt kann so schnell wie möglich gestartet werden, den Markt besetzen und Arbeitskosten sparen

Betriebseffizienz. Es verfügt über eine hohe Betriebseffizienz und kann Serverkosten einsparen
  • Wenn man sich die Auswahl vieler inländischer Handelsunternehmen wie Alibaba ansieht, denken sie darüber nach.
  • Alibaba verwendete PHP in seinen Anfängen. Der Hauptaspekt bei der Wahl von PHP war die Entwicklungseffizienz. Mit der Entwicklung des Geschäfts konnte die Leistung von PHP jedoch nicht unterstützt werden, und es war notwendig, auf eine Sprache mit hoher Betriebseffizienz umzusteigen .

C/C++ kommt einem natürlich in den Sinn, wenn es um eine hohe Betriebseffizienz geht, aber die Entwicklungseffizienz dieser beiden Sprachen ist gering. Es muss ein Gleichgewicht zwischen Entwicklungseffizienz und Betriebseffizienz gefunden werden, daher hat sich Alibaba für Java entschieden.

Als Alibaba auf Zhihu offiziell antwortete, warum sie sich für Java entschieden haben, berücksichtigten sie hauptsächlich Folgendes: Leistung, Einfachheit und Leichtigkeit des Lernens, reichhaltige Ökologie und aktive Community. und aktiv in der Community. Sie alle sprechen von Entwicklungseffizienz. Gerade wegen dieser Vorteile ist die Entwicklungseffizienz hoch.

Als Alibaba sich für Java entschied, entwickelte es eine große Anzahl von Java-Middleware und förderte eine große Anzahl von Java-Talenten. Daher haben sich auch andere Unternehmen bei der Auswahl der Technologien für Java entschieden, was dazu führte, dass sich immer mehr Unternehmen für Java entschieden.

Das Gleiche gilt für die Wahl von Go. Einige junge Unternehmen verwenden möglicherweise in der Anfangsphase Skriptsprachen wie PHP und Python. Nach ihrer Entwicklung und ihrem Wachstum stehen sie vor dem gleichen Problem wie Alibaba: Leistungsprobleme.

Go wurde 2012 veröffentlicht und jeder hatte eine andere Wahl. Go ist sehr leistungsstark und sehr einfach und leicht zu bedienen.

Im Großen und Ganzen ist es also vernünftig, Java oder Go zu wählen, und es ist vernünftig zu existieren.

Warum entscheiden sich einige Unternehmen für Java, möchten aber Go verwenden?

Im Vergleich zu Java weist die Go-Sprache die Eigenschaften eines schnelleren Starts, einer schnelleren Kompilierung, einer geringeren Speichernutzung und einer guten Parallelität (Coroutine) auf Eine Sprache, die bereits Java-Unternehmen hat, wird auch Go in Betracht ziehen, aber derzeit machen solche Unternehmen nur einen kleinen Anteil aus.

Einige Unternehmen verfügen nicht über einen obligatorischen Technologie-Stack, sodass neue Abteilungen und neue Unternehmen die Einschränkungen beseitigen und sich für die neue Sprache entscheiden können. Gehen Sie für die Entwicklung.

    Zusammenfassung
  • Zusammenfassend ist es sinnvoll, sich für Java oder Go zu entscheiden. Auch wenn der Anteil innerhalb eines Unternehmens nicht groß ist, besteht immer noch Bedarf an Java- und Go-Kommunikation.
  • Dubbos Sieg im RPC-Framework

In den Anfängen des Unternehmens handelte es sich normalerweise um einen monolithischen Dienst. Wenn die Größe ein bestimmtes Niveau erreicht und die monolithische Anwendung die Geschäftsentwicklung nicht unterstützen kann, wird eine Microservice-Architektur gewählt Zeit wird ein nützliches RPC-Framework benötigt.

Unter den RPC-Frameworks, die sich an die Java-Sprache anpassen können, ist Dubbo das früheste Open Source in China und wurde 2011 als Open Source bereitgestellt.

Ähnliche Konkurrenten wie Spring Cloud waren 2014 Open-Source, Weibos Motan war 2017 Open-Source, Cross-Language-gRPC war 2015 Open-Source und Thrift war 2007 Open-Source.

Nur Thrift ist älter als Thrift, aber Thrift ist nur ein RPC-Framework, während Dubbo sofort einsatzbereite Service-Management-Funktionen wie Service-Registrierung und -Erkennung, Lastausgleich, Fehlertoleranz, dynamische Konfiguration usw. umfasst .

Man kann sagen, dass das frühe Java RPC-Framework keine Wahl hatte.

Auch in einer Zeit, in der RPC-Frameworks florieren, es so viele Unternehmen nutzen und Alibaba unterstützt, hat Dubbo immer noch seinen Platz.

Zusammenfassung

Wenn ein Unternehmen die Programmiersprache Java und das Dubbo-Framework wählt (es gibt immer noch viele Möglichkeiten) und später Go oder ein neues Unternehmen oder ein neues Wann ausprobieren möchte Als die Abteilung Go ausprobieren wollte, standen sie vor einem Problem: Wie kommunizierte man mit Javas Dubbo?

Da es sich beim Dubbo-Protokoll um ein privates Protokoll handelt, sind die Kosten für die Neuimplementierung in Go immer noch recht hoch. So entstand Dubbo-Go. Aus dieser Perspektive hat Dubbo-Go immer noch einen erheblichen Wert in der Kommunikation zwischen Java und Go.

Beenden Sie den Kampf mit dem Thread-Pool

Wenn Sie das Dubbo-Framework verwenden, benötigen Sie häufig ein Dubbo-Gateway. Informationen zum Dubbo-Gateway finden Sie in meinem Artikel: „Microservice“. Gateway Evolution" Road".

In diesem Artikel stelle ich ausführlich den Hintergrund, die Schwierigkeiten, die Auswahl, das Design, die Entwicklung und die Fallstricke eines Dubbo-Gateways vor. Ich habe viel Zeit damit verbracht, „die Beziehung zwischen dem Thread-Pool und dem“ vorzustellen Thread-Pool". In Java sind Threads sehr wertvoll, aber wenn das Dubbo-Gateway synchron aufgerufen wird, muss jede Anforderung einen Thread belegen, was zu einem Parallelitätsfehler führt, und wenn der Thread-Pool voll ist, wirkt sich dies auf andere Anforderungen aus.

Die Lösung besteht also darin, entweder den Thread-Pool zu isolieren oder auf einen asynchronen Aufruf umzusteigen. Der isolierte Thread-Pool löst nur das Problem, dass sich Anforderungen nicht gegenseitig beeinflussen, aber die Parallelität wird immer noch nicht verbessert. Der Wechsel zum asynchronen Aufruf kann das Problem perfekt lösen, aber die Codierung ist zu kompliziert.

Gos Coroutine kann dieses Problem einfach lösen. Gos Coroutine ist sehr leichtgewichtig und weist eine höhere Planungseffizienz auf, sodass wir mit einfachem Code ein sehr effizientes Gateway schreiben können.

Sie können beispielsweise die Leistung von Nginx intuitiv spüren. Jeder kennt die Leistung von Nginx, aber wenn Sie Java zur Implementierung verwenden, wissen Sie nicht, wie viele Maschinen Sie stapeln müssen, um sie zu erreichen Aber Baidu verwendet es auf dem in Go geschriebenen Reverse-Proxy, was zeigt, wie übertrieben seine Leistung ist.

Einführung und Prinzipien von Coroutinen finden Sie in meinem Artikel: „Ein Jahr lang Golang schreiben, lass uns über Prozesse, Threads und Coroutinen sprechen.“

Zusammenfassung

Auf dem Dubbo-Gateway bietet Dubbo-Go auch eine neue Lösung an, die bereits das Online-Gateway Dubbo-Go verwendet hat, und Open Source ist Dubbo -go-pixiu.

Wegbereiter für Dubbo Mesh

ServiceMesh hat sich nach und nach zur Microservice-Architektur der nächsten Generation entwickelt, und Go ist definitiv eine leuchtende Starsprache auf Mesh, egal ob K8S oder Docker When Die gesamte native Cloud-Infrastruktur ist in Go geschrieben. Die Entwicklungsgeschwindigkeit von Go und die hohen Parallelitätsfähigkeiten von Coroutine machen es zur bevorzugten Sprache für Mesh.

Auf dieser Grundlage haben Dubbos Meshization und Dubbo-Go ebenfalls den Weg dafür geebnet. Allerdings befindet sich DubboMesh noch im kleinen Maßstab und die vollständige Lösung ist nicht Open Source Wenn ein Unternehmen den Weg von DubboMesh einschlagen möchte, könnte Dubbo-Go ebenfalls einer der Punkte sein, die es berücksichtigen sollte.

Zusammenfassung

Nachdem ich so viel gesagt habe, ist es an der Zeit, direkt zu antworten, warum Dubbo in Go neu geschrieben werden muss. Die Antwort auf diese Frage ist immer noch der offizielle Satz: Java erstellen und Die Brücke zwischen Golang. Warum wir „diese Brücke bauen“ wollen, entnehmen Sie bitte dem Bild unten:

Das obige ist der detaillierte Inhalt vonWarum wird Dubbo in Go umgeschrieben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen