<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          真是頭疼,Proto 代碼到底放哪里?

          共 1849字,需瀏覽 4分鐘

           ·

          2022-03-01 15:30

          大家好,我是煎魚。

          雖然我朋友他們已經(jīng)從大單體切換為微服務(wù)化有一定的年頭了,但一些細(xì)節(jié)方面的處理總會有不同的人有不同的看法。

          而且時不時就會有人出來反復(fù)問,這其中的一個重要討論點,就是 Proto 這個 IDL 的代碼到底放在哪里

          實施方案

          經(jīng)過多輪討論對 Proto 的存儲方式和對應(yīng)帶來的優(yōu)缺點。

          一共有如下幾種方案:

          • 代碼倉庫。
          • 獨立倉庫。
          • 集中倉庫。
          • 鏡像倉庫。

          方案一:存放在代碼倉庫

          直接將項目所依賴到的所有 Proto 文件都存放在 proto/ 目錄下,不經(jīng)過開發(fā)工具的自動拉取和發(fā)布:

          缺點

          1. 項目所有依賴的 Proto 都存儲在代碼倉庫下,因此所有依賴 Proto 都需要人工的向其它業(yè)務(wù)組 “要” 來,再放到 proto/ 目錄下,人工介入極度麻煩。

          2. Proto 升級和變更,經(jīng)常要重復(fù)第一步,溝通成本高。

          優(yōu)點

          1. 項目所有依賴的 Proto 都存儲在代碼倉庫下,因此不涉及個人開倉庫權(quán)限的問題。

          2. 多 Proto 的切換開銷減少,因為都在代碼倉庫下,不需要看這看那。

          方案二:獨立倉庫

          獨立倉庫存儲是我們最早采取的方式,也就是每個服務(wù)對應(yīng)配套一個 Proto 倉庫:

          這個方案的好處就是可以獨立管理所有 Proto 倉庫,并且權(quán)限劃分清晰。但最大的優(yōu)點也是最大的缺點。

          因為一個服務(wù)會依賴多個 Proto 倉庫,并且存在跨業(yè)務(wù)組調(diào)用的情況:

          如上圖所示,svc-user 服務(wù)分別依賴了三塊 Proto 倉庫,分別是自己組的、業(yè)務(wù)組 A、業(yè)務(wù)組 B 總共的 6 個 Proto 倉庫。

          缺點

          1. 假設(shè)你是一個新入職的開發(fā)人員,那么你就需要找不同的業(yè)務(wù)組申請不同的倉庫權(quán)限,非常麻煩。如果沒有批量賦權(quán)工具,也沒有管理者權(quán)限,那么就需要一個個賦權(quán),非常麻煩。
          2. 在運行服務(wù)的時候,你需要將所有相關(guān)聯(lián)的 Proto 倉庫拉取下來,如果沒有工具做半自動化的支持,麻煩程度無法忍受。

          優(yōu)點

          1. 使得安全性較高(但 IDL 本身沒有太多的秘密)。

          2. 按需拉取,不需要關(guān)注其余的服務(wù) Proto。

          方案三:集中倉庫

          集中倉庫也是一些公司考慮的方式之一,是按公司或大事業(yè)部的維度進行 Proto 代碼的存儲。

          這樣子只需要拉取一個倉庫,就可以獲取到所有所需的 IDL:

          image

          缺點

          1. 安全性下降,因為其它業(yè)務(wù)組的 IDL 也全都 “泄露” 了。

          2. 非按需拉取,在查看原始文件時,需要關(guān)注一些多余的。

          優(yōu)點

          1. 只需要拉取一次 Proto 倉庫就可以輕松把一個服務(wù)所需的 IDL 集齊。

          2. 倉庫權(quán)限管理的復(fù)雜度下降。

          方案四:鏡像倉庫

          結(jié)合上面幾種方案的特點,我們也可以得出鏡像倉庫的方式。

          也就是自己服務(wù)的 Proto 文件存放在代碼倉庫的 proto 文件中,在本次 feature 提交或發(fā)布后,自動同步到鏡像倉庫去。

          你所依賴的其他服務(wù) Proto 則直接通過讀取集中的鏡像倉庫的方式獲取:

          這樣子的話,通過開發(fā)工具的配合,開發(fā)人員在開發(fā)時就只需要關(guān)注自己項目的 Proto 就好了。

          集中的鏡像倉庫主要用于構(gòu)建和部署,大幅度降低了多 Proto 的關(guān)注和切換開銷。

          方案五:其他

          本質(zhì)上上述的所有方案多多少少都有一些利弊存在,并且都需要開發(fā)工具來進行支持,否則實操起來還是非常麻煩。

          如果想一勞永逸,可以通過云開發(fā)環(huán)境來解決,因為在分配云開發(fā)機時,你已經(jīng)有了身份認(rèn)證,你能夠擁有什么權(quán)限,不能擁有什么權(quán)限,基本都是明確的。

          所以一般在組內(nèi)、跨組聯(lián)調(diào)時,也可以直接調(diào)度,不需要像其它方案那樣進行過多的關(guān)注,甚至在自己本地運行一套微服務(wù)。

          這需要大量的工具/資源支持,也需要研發(fā)有一定規(guī)模才能做。

          小結(jié)

          在本文中我介紹了比較常見的 5 種 Proto 代碼的管理方式,其各有利弊,不同公司不同人的理解或適配度都不一樣。

          大家可以根據(jù)實際環(huán)境進行選用,并且建議拉上核心的人員進行討論和選型,因為 Proto 代碼涉略面還是比較廣的,多多少少都有人有不一樣的看法。

          你是怎么解決的,歡迎在評論區(qū)交流和留言:)


          關(guān)注煎魚,獲取業(yè)內(nèi)第一手消息和知識 ??



          你好,我是煎魚,出版過 Go 暢銷書《Go 語言編程之旅》,再到獲得 GOP(Go 領(lǐng)域最有觀點專家)榮譽,點擊藍(lán)字查看我的出書之路

          日常分享高質(zhì)量文章,輸出 Go 面試、工作經(jīng)驗、架構(gòu)設(shè)計,加微信拉讀者交流群,和大家交流!

          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  jzzjzz日本丰满成熟少妇 | 免费看A片18 的视频 | 欧美性天天 | 日本AA黄色片网站 | 伊人久久网站 |