1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 1718字,需瀏覽 4分鐘

         ·

        2022-02-14 22:18

        大家好,我是煎魚。

        雖然我朋友他們已經(jīng)從大單體切換為微服務(wù)化有一定的年頭了,但一些細節(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 則直接通過讀取集中的鏡像倉庫的方式獲?。?/p>

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

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

        方案五:其他

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

        如果想一勞永逸,可以通過云開發(fā)環(huán)境來解決,因為在分配云開發(fā)機時,你已經(jīng)有了身份認證,你能夠擁有什么權(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ū)交流和留言:)

        瀏覽 68
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美激情第一区 | 五月综合婷婷丁香 | 国产伦精品一区二区三 | 男人把ji放进女人舒服视频 | 国产精品黑料吃瓜网曝事件海角 | 国产精品初高中女破苞 | 青青草国产| 大香蕉婷婷九色黑料 | 亚洲色天 | 总攻各种姿势肉高h污文 |