一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - Dubbo為什么用Go重寫?

Dubbo為什么用Go重寫?

2022-01-07 22:30Hollis Golang

一個公司或部門內有人用Java版Dubbo,有人用Go,這兩者需要通信,于是就有了Dubbo-Go,用來解決通信問題。

Dubbo為什么用Go重寫?

連接過去和未來

我覺得要回答好這個問題,得從Dubbo-go的初衷談起,github主頁上它是這樣介紹自己的:

Dubbo為什么用Go重寫?

官方給出的中文翻譯是

Apache Dubbo Go 語言實現,架起 Java 和 Golang 之間的橋梁,與 gRPC/Dubbo 生態互聯互通,帶領 Java 生態享受云原生時代的技術紅利。

我再通俗地翻譯一下:一個公司或部門內有人用Java版Dubbo,有人用Go,這兩者需要通信,于是就有了Dubbo-Go,用來解決通信問題。

所以第一個問題來了,為什么一個公司用了Java,又用了Go?

編程語言的抉擇

對于編程語言的選擇,在商業公司里,我覺得最最主要考慮的點就是效率,至于其他的點都是次要。因為商業公司的主要目的就是盈利,不管什么語言,只要能用最低的成本拿到相等的收益就是好語言。

效率又包含了好幾個方面:

  • 開發效率。開發效率高,項目能早日上線,占領市場,也能節約人力成本
  • 運行效率。運行效率高,能省下服務器成本

縱觀國內很多商業公司的選擇都是如此考慮,比如阿里。

阿里早期是PHP,選擇PHP的考量點主要是開發效率,但隨著業務的發展,PHP的性能無法支撐,必須得換一個運行效率高的語言。

運行效率高自然想到C/C++,但這兩個語言的開發效率低,得在開發效率和運行效率中找到一個平衡點,于是阿里選擇了Java。

阿里官方在知乎上回答為什么選擇Java時,主要有以下幾點考慮:性能、簡單易學、生態豐富、社區活躍

把性能放第一位,簡單易學、生態豐富、社區活躍其實也都是說的開發效率,正是有了這些優點,開發效率才高。

當阿里巴巴選擇Java后,自研了大量的Java中間件,培養了大量的Java人才,所以其他公司在技術選型時,也參考了阿里巴巴,導致越來越多的公司選擇了Java。

而選擇Go也是如此,一些年輕的公司早期可能是PHP、Python等腳本語言,等發展壯大后,不得不面臨和阿里一樣的問題:性能問題。

在2012年Go發布了,大家又多了一個選擇,Go既有很高的性能,又非常地簡單易上手,像字節跳動這類新公司就以Go為主。

所以綜合來看,選擇Java或者Go都是合理的,存在即合理。

為什么有公司選擇了Java,又想用Go呢?

  • Go語言相比Java有啟動快,編譯速度快、占用內存小、擅長高并發(協程)的特性,所以在已經有Java的公司,也會考慮Go,只不過目前這類公司占比不多。
  • 某些公司沒有強制的技術棧,所以新部門新業務可以擺脫束縛,選擇新語言Go來進行開發。

小結

綜上看來,選擇Java或選擇Go都合理,一個公司內兩者都選擇,也有合理之處,雖然占比不多,但還是有Java和Go通信的需求。

Dubbo在RPC框架中的勝出

公司早期通常是單體服務,在規模達到一定程度,單體應用無法支撐業務發展時,會選擇微服務架構,這時就需要一個好用的RPC框架。

能適配Java語言的RPC框架中,Dubbo是國內最早開源,于2011年開源。

而和他類似的競品如Spring Cloud在2014年開源,微博的Motan在2017年開源,跨語言的gRPC在2015年開源,Thrift 2007年開源。

只有Thrift 比它早,但Thrift只是個RPC框架,Dubbo可是包含了開箱即用的服務治理能力,如服務注冊與發現、負載均衡、容錯、動態配置等等。

可以說早期Java的RPC框架沒得選。

Dubbo為什么用Go重寫?

就算到了RPC框架百花齊放的時代,這么多公司的使用加上阿里的背書,Dubbo也有它的一席之地。

小結

當一個公司選擇了Java編程語言和Dubbo框架(這種選擇還是挺多的),后來又想嘗試Go,或者一些新業務、新部門想嘗試Go時,他們就面臨了一個難題,Go如何跟Java的Dubbo通信。

由于Dubbo協議是私有協議,用Go重新實現一遍的代價還是挺大。于是Dubbo-Go應運而生,從這個角度看,Dubbo-Go在連接Java和Go的通信這條路上還是具有相當大的價值的。

終結與線程池的斗爭

如果使用了Dubbo框架,很多時候需要一個Dubbo網關

在這篇文章中,詳細介紹了一款Dubbo網關的背景、難點、選型、設計、演進以及踩坑經歷,其中我花了大篇幅介紹了「與線程池所做的斗爭」,在Java中,線程是很寶貴的,但Dubbo網關如果是同步調用,必須一個請求占用一個線程,這就導致并發上不去,而且線程池打滿后,會影響其他請求。

所以解決方案要么是隔離線程池,要么改成異步調用。隔離線程池只解決了請求不相互影響,但并發還是上不去,改成異步調用可以完美解決,但是編碼實在是太復雜。

而Go的協程可以剛好解決這個問題,Go的協程很輕量,調度效率也更高,所以我們可以用簡單的代碼寫出非常高效率的網關。

舉個例子可以直觀感受一下,Nginx的性能大家有目共睹,但如果用Java來實現,不知道得堆多少機器才能達到Nginx的性能,但百度在反向代理上使用了Go寫的BFE來代替Nginx,可見其性能有多夸張。

小結

所以在Dubbo網關上,Dubbo-Go也提供了一種新的解法,已經有用于線上的Dubbo-Go網關,開源項目可參考Dubbo-go-pixiu。

為Dubbo Mesh鋪路

Service Mesh也漸漸成為了下一代微服務架構,Go在Mesh上也絕對是一個閃亮的明星語言,無論是K8S、Docker等云原生基礎設施都采用Go編寫,還是Go的開發速度以及協程的高并發能力,都使它成為了Mesh的首選語言。

基于此,Dubbo的Mesh化,Dubbo-Go也為其鋪平了道路,但目前Dubbo Mesh還處于小面積階段,完整落地的方案并沒有開源,從這點上來說,如果某公司想走Dubbo Mesh化之路,Dubbo-Go可能也是他們要著重考慮的點之一。

總結

說了這么多,該正面回答Dubbo為什么要用Go重寫,這個問題的答案還是官方給出的那句話:架起 Java 和 Golang 之間的橋梁。至于為什么要「架起這座橋梁」,參考下圖:

Dubbo為什么用Go重寫?

原文地址:https://mp.weixin.qq.com/s/7XO0fRRa8VUhJemVP8ZLjg

延伸 · 閱讀

精彩推薦
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
主站蜘蛛池模板: 日本一区视频 | 俄罗斯freeⅹ性欧美 | 日韩精品视频观看 | 日韩一区二区三区四区不卡 | 天美传媒影视在线免费观看 | 婷婷sese| 91yellow吧字幕网zmff7 | 国产亚洲精aa在线观看不卡 | 国产中文字幕 | 亚洲 欧美 日韩 综合 | 成人亚洲欧美日韩在线观看 | 国产精品福利一区二区亚瑟 | 大学生宿舍飞机china free | 国产精品视频自拍 | 91香蕉导航 | 欧美最猛性xxxxx69交 | 九九99热久久999精品 | 天天躁夜夜躁很很躁 | 激情偷拍网| 欧美成人在线影院 | 奇米777四色精品综合影院 | 国产美女亚洲精品久久久久久 | 91在线高清视频 | 男人天堂资源网 | 91精品国产91久久久久久麻豆 | 亚洲男gay| 福利社在线免费观看 | 亚洲国产黄色 | 娇妻与公陈峰姚瑶小说在线阅读 | 操久| 欧美bbxx| 2018av在线| 黄瓜视频黄版 | 无遮挡h肉动漫在线观看电车 | 成人高清视频在线观看 | 美女污视频在线观看 | 亚洲第一区二区快射影院 | 啪啪无尽3d动漫漫画免费网站 | ova巨公主催眠1在线观看 | 久草热8精品视频在线观看 久草草在线视视频 | 丫鬟粗大狠狠贯穿h |