国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

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

Dubbo 為什么用 Go 重寫?

2021-12-31 23:21捉蟲大師 Golang

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

Dubbo 為什么用 Go 重寫?

先說兩句

我常常在散步時思考很多技術上的「為什么問題」,有時一個問題會想很久,直到問題的每一個點都能說服自己時,才算完結。于是想把這些思考記錄下來,形成文章,可以當做一個新的系列。這些文章中你可能看不到代碼,但能窺探到一些容易被忽視的問題,以及問題更深層次的「為什么」。

今天帶來第1篇,Dubbo為什么要用Go重寫?

誕生于阿里巴巴,2011年開源的Dubbo已經走過了10個年頭。在2019年,它被用Go重寫并開源,如今兩年過去,已經從當初的V1.0.0版本發展到了V3.0.0,截止目前star數3.8K。

有一次同事問我,為什么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框架沒得選。

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

小結

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

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

終結與線程池的斗爭

如果使用了Dubbo框架,很多時候需要一個Dubbo網關,關于Dubbo網關可以參考我這篇文章:《微服務網關演進之路》。

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

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

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

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

關于協程的介紹和原理,可以參考我這篇文章:《寫了一年golang,來聊聊進程、線程與協程》。

小結

所以在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/7pS9KfJsj3u9Ufg4gZ1VhA

延伸 · 閱讀

精彩推薦
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

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

    腳本之家3642020-04-25
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

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

    天易獨尊11682021-06-09
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

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

    4272021-11-24
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

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

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

    李浩的life12792020-05-27
  • Golanggo日志系統logrus顯示文件和行號的操作

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

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

    SmallQinYan12302021-02-02
  • Golanggolang 通過ssh代理連接mysql的操作

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

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

    a165861639710342021-03-08
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

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

    helight2992020-05-14
  • Golanggolang如何使用struct的tag屬性的詳細介紹

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

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

    Go語言中文網11352020-05-21
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩国产精品一区二区 | 天天操天天干视频 | 久草 在线 | 成人激情视频在线观看 | 成人久久久 | 激情五月婷婷丁香 | 国产永久免费在线观看 | 久久国产精品99国产精 | 久久夜夜| 黄色在线观看网址 | 国产精品国产三级国产aⅴ中文 | 久久综合av| 国产精品毛片久久久久久久 | 免费精品视频一区二区三区 | 91国内视频 | 美国成人在线 | 日韩在线免费观看网站 | 亚洲人一区二区 | 在线黄| 中文字幕乱码一区二区三区 | 午夜在线小视频 | 天天干天天草 | 日本电影网址 | 男人午夜视频在线观看 | 日韩福利在线 | 超碰一区二区三区 | 国产欧美日韩在线观看 | 国产色秀视频在线观看 | 在线免费黄 | 天天干天天干天天干天天射 | 欧美日韩国产精品一区 | 国产免费一区二区三区 | 日韩在线精品视频 | 色黄网站 | 国产天天操 | 视频a区 | 欧美一级大片免费 | 成人免费在线小视频 | 中文字幕一二三区 | 国产女人爽到高潮免费视频 | 中文字幕亚洲欧美日韩在线不卡 |