虽然我朋友他们已经从大单体切换为微服务化有一定的年头了,但一些细节方面的处理总会有不同的人有不同的看法。

而且时不时就会有人出来反复问,这其中的一个重要讨论点,就是 Proto 这个 IDL 的代码到底放在哪里

实施方案

经过多轮讨论对 Proto 的存储方式和对应带来的优缺点。

一共有如下几种方案:

  • 代码仓库。

  • 独立仓库。

  • 集中仓库。

  • 镜像仓库。

方案一:存放在代码仓库

直接将项目所依赖到的所有 Proto 文件都存放在 proto/ 目录下,不经过开发工具的自动拉取和发布:

缺点

  1. 项目所有依赖的 Proto 都存储在代码仓库下,因此所有依赖 Proto 都需要人工的向其它业务组 “要” 来,再放到 proto/ 目录下,人工介入极度麻烦。

  2. Proto 升级和变更,经常要重复第一步,沟通成本高。

优点

  1. 项目所有依赖的 Proto 都存储在代码仓库下,因此不涉及个人开仓库权限的问题。

  2. 多 Proto 的切换开销减少,因为都在代码仓库下,不需要看这看那。

方案二:独立仓库

独立仓库存储是我们最早采取的方式,也就是每个服务对应配套一个 Proto 仓库:

这个方案的好处就是可以独立管理所有 Proto 仓库,并且权限划分清晰。但最大的优点也是最大的缺点。

因为一个服务会依赖多个 Proto 仓库,并且存在跨业务组调用的情况:

如上图所示,svc-user 服务分别依赖了三块 Proto 仓库,分别是自己组的、业务组 A、业务组 B 总共的 6 个 Proto 仓库。

缺点

  1. 假设你是一个新入职的开发人员,那么你就需要找不同的业务组申请不同的仓库权限,非常麻烦。如果没有批量赋权工具,也没有管理者权限,那么就需要一个个赋权,非常麻烦。

  2. 在运行服务的时候,你需要将所有相关联的 Proto 仓库拉取下来,如果没有工具做半自动化的支持,麻烦程度无法忍受。

优点

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

  2. 按需拉取,不需要关注其余的服务 Proto。

方案三:集中仓库

集中仓库也是一些公司考虑的方式之一,是按公司或大事业部的维度进行 Proto 代码的存储。

这样子只需要拉取一个仓库,就可以获取到所有所需的 IDL:

image

缺点

  1. 安全性下降,因为其它业务组的 IDL 也全都 “泄露” 了。

  2. 非按需拉取,在查看原始文件时,需要关注一些多余的。

优点

  1. 只需要拉取一次 Proto 仓库就可以轻松把一个服务所需的 IDL 集齐。

  2. 仓库权限管理的复杂度下降。

方案四:镜像仓库

结合上面几种方案的特点,我们也可以得出镜像仓库的方式。

也就是自己服务的 Proto 文件存放在代码仓库的 proto 文件中,在本次 feature 提交或发布后,自动同步到镜像仓库去。

你所依赖的其他服务 Proto 则直接通过读取集中的镜像仓库的方式获取:

这样子的话,通过开发工具的配合,开发人员在开发时就只需要关注自己项目的 Proto 就好了。

集中的镜像仓库主要用于构建和部署,大幅度降低了多 Proto 的关注和切换开销。

方案五:其他

本质上上述的所有方案多多少少都有一些利弊存在,并且都需要开发工具来进行支持,否则实操起来还是非常麻烦。

如果想一劳永逸,可以通过云开发环境来解决,因为在分配云开发机时,你已经有了身份认证,你能够拥有什么权限,不能拥有什么权限,基本都是明确的。

所以一般在组内、跨组联调时,也可以直接调度,不需要像其它方案那样进行过多的关注,甚至在自己本地运行一套微服务。

这需要大量的工具/资源支持,也需要研发有一定规模才能做。

小结

在本文中我介绍了比较常见的 5 种 Proto 代码的管理方式,其各有利弊,不同公司不同人的理解或适配度都不一样。

大家可以根据实际环境进行选用,并且建议拉上核心的人员进行讨论和选型,因为 Proto 代码涉略面还是比较广的,多多少少都有人有不一样的看法。

你是怎么解决的,欢迎在评论区交流和留言:)

关注煎鱼,获取业内第一手消息和知识

用gRPC建设微服务,Proto 怎么管理更合适相关推荐

  1. 微服务模块综合管理(模块视图管理,自动化热部署,前端资源实时刷新......)

    一.微服务可视化整体管理 微服务模块太多,启动关闭等管理操作就会很复杂,用这种方法就会很方便管理 方法是 1 idea底下没有的找出services窗口 2 IDEA底边栏选services 2 选择 ...

  2. 微服务 杜家豪_搞好“微建设微服务”也是大业绩

    <新湘评论>2017年第06期,湖南省委书记杜家毫发表署名文章<做经得起历史和人民检验的发展业绩>.文章认为,这些年来,湖南人民生活发生了翻天覆地的变化,但实现人民向往的美好生 ...

  3. Java微服务_医疗管理项目_基于若依快速开发框架

    一.项目简介 项目简介:尚医疗是专门为各大医院.门]诊提供的一款医疗管理平台.系统包含:系统 管理.药品进销存管理.看病就诊.收费管理.检查管理.数据统计等核心模块.通过尚医 疗系统可以快速方便的管理 ...

  4. 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。...

    微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...

  5. Google和eBay在建设微服务生态系统中的深刻教训

    当我们观察市场上的大规模系统,它们的系统架构往往都进化为非常相似的:一系列多语言聚合的微系统.比如Google.Twitter.eBay和Amazon. 那么在这种多语言聚合的微系统环境中工作的看法是 ...

  6. Spring Boot+gRPC构建微服务并部署到Istio(详细教程)

    点击关注公众号,实用技术文章及时了解 作为Service Mesh和云原生技术的忠实拥护者,我却一直没有开发过Service Mesh的应用.正好最近受够了Spring Cloud的"折磨& ...

  7. ServiceStage-华为微服务开发与管理平台

    前言 在上一篇文章 一年前,我来到国企搞IT 中,和小伙伴分享了我在国企这一年当中的所见,所闻,所想,很高兴能够获得很多同道中人的共鸣.过去一年,我的很大一部分工作都投入到公司技术平台的建设中.Jir ...

  8. 建设微服务API网关的一些实践

    随着这些年微服务的流行,API网关已经成为微服务架构中不可或缺的一环.一方面它承担着服务对外的唯一门户,一方面它提取了许多应用的共性功能. 整体架构 我们的API网关目前的架构如下图所示,可以看到AP ...

  9. 在微服务中如何管理数据

    来自Stitch Fix团队的工程副总裁Randy Shoup在QCon纽约2017会议上讨论了如何在基于微服务的应用中管理数据和隔离持久化.他还介绍了将事件(Event)作为微服务的第一类构造.他介 ...

最新文章

  1. 2018年科技公司融资纪录十大排行榜!中国四家公司上榜
  2. 通俗解释优化的线性感知机算法:Pocket PLA
  3. 【转】经济计量学软件包Eviews快速使用
  4. (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  5. Linux系统:centos7下搭建ZooKeeper3.4中间件,常用命令总结
  6. 20条.net编码习惯
  7. Python操作文件目录
  8. 数据分析用r还是python_想要从事数据分析,选择python还是R语言呢?
  9. 基于谷歌街景多位数字识别技术:TensorFlow的车牌号识别系统
  10. mysql 多表连接技巧_【Mysql进阶技巧(1)】 MySQL的多表关联与自连接
  11. python语言字符串逆转顺序_Python字符串逐字符或逐词反转方法
  12. Unity HDRP卡通角色自然渲染shader
  13. hardfault常见原因_STM32 出现 hardfault_handler 处理方法
  14. ISC 2022“护航数字山河·数据安全协同创新”高峰会:共议数据安全新方案
  15. 【图像识别】基于计算机视觉实现红绿灯识别含Matlab代码
  16. FPGA 结构分析 -IO 资源
  17. brew 一直等待_58岁上海股神自爆交易铁则:80%时间的等待+20%的时间操作,精髓...
  18. 第八届蓝桥杯 拉马车JAVA暴解
  19. 老子《道德经》第六十五章
  20. 微信小程序之排行榜功能实现

热门文章

  1. WF4 AttachedPropertiesService
  2. 干掉勒索病毒的22岁程序员自曝黑历史:中学是电脑白痴
  3. 如何修改WAMP中mysql默认空密码重新登录phpmyadmin
  4. spring异常处理-HandlerExceptionResolver
  5. Swift - defer关键字(推迟执行)
  6. DevExpress GridView 添加和设置右键菜单
  7. [置顶] iOS中让省略号垂直居中
  8. 深入浅出 - Android系统移植与平台开发(十三)- Android的对象管理
  9. 【系统架构】如何解决热点数据更新问题
  10. EF里一对一、一对多、多对多关系的配置和级联删除