【通过代码来“理解”代码】不知道大家是如何使用你们的源代码及源代码仓库的?做做codereview?或者用静态代码扫描工具扫扫代码质量?其实 , 我们完全可以做的更多 。
通过管理只能做到对过程的优化及规范化 , 但你很难通过管理去提升软件内在的架构设计质量及代码质量 , 因为它是和研发人员的能力及自我要求息息相关的 , 并且需要进行长期的训练 。
我之前在负责构建微服务治理体系的时候 , 发现如果要对架构的质量及研发的质量进行深度的度量及治理的话 , 是无论如何都绕不过源代码的 , 为什么这么说呢?软件研发它是一项协作性的智力行为 , 在研发过程中 , 需求人员、设计人员、研发人员需要进行紧密的协同和配合 , 这些人所有的思考、意图、策略最终都会体现在代码上 。 可以说 , 一个系统的代码就是一本“书” , 你只要读懂了这本“书” , 你就知道这个系统的前世今生 。
但问题是 , 你如何读懂这本“书” , 相信大家都对自己负责的系统的源代码非常熟悉 , 但是 , 你们能否做到对你们整个服务集群中所有服务的源代码都非常熟悉呢?这显然不可能 , 要读懂这一堆的“书” , 靠人力是显然不行的 , 我们需要借助一些自动化的手段 。
正是基于以上的思考 , 我们开发了一套针对源码仓库中所有工程源码进行统一扫描的工具 。 它的核心是eclipse中负责源码解析的AST组件(Abstract Syntax Tree , 中文为抽象语法树) , 通过AST , 可以获取到源码工程中任何一个Java源码文件中所调用的外部类、继承或者实现的接口(父类)、类变量集合、类方法集合、方法逻辑块(多层嵌套)、注释等等基本信息 , 有了这些基本信息之后 , 通过对代码的逐行扫描 , 并基于一系列的正则及其它匹配 , 就可以获取到一个方法对其它方法的调用关系 , 最终汇总之后 , 就可以构建出一个跨工程、方法一级的非常庞大的调用关系矩阵 , 微服务之间的调用关系则是这个调用矩阵的一个子集 。 这个调用关系矩阵和基于动态调用链路跟踪所获取到的调用链路非常类似 , 我给它起了一个名字叫静态调用链路 。 有了这个静态调用链 , 实际上 , 我们就有了代码内的逻辑关系 , 在它基础上 , 就可以进行深度的架构关系及代码质量的梳理 , 这在后面的介绍中会有详细的讨论 。
【微服务度量及分析体系】有了以上所有这些度量指标 , 包括前面重点介绍的代码一级的静态调用链路(矩阵) , 就可以来看看最终针对微服务治理的度量及分析体系是个什么样子 。
从下往上看 , 首先通过各个指标来源渠道获取到各类度量指标 , 并把它们以ODS(操作型数据)的格式汇总到数据仓库;通过数据模型抽取出主数据(MDM) , 这些主数据包括了服务、需求、任务、人员、团队等 , 在此基础上 , 通过不同的数据主题(Topic)构建起一个多层的“数据集市” , 这些数据主题包括了异常、性能、资源、调用关系、容量、系统、测试、开发、运维协同效率等;有了这个数据集市 , 就可以在其基础之上进行各类数据分析 , 包括性能分析、容量分析、健康度分析、团队及个人的质量报告、质量趋势、动态调用链及静态调用链的深度梳理、以及各维度的汇总报表 。
根据这些分析报告 , 由治理委员会进行深度的分析并制定出各类的治理决策 , 或者通过人为或自动化的机制发出各类管控指令 。
治理决策和管控指令就是微服务度量及分析体系的最终产出物 。
有了治理决策和管控指令 , 就可以对微服务的线上及线下体系进行治理 , 首先来看一下对线上体系如何进行治理 。
【服务限流】服务限流是微服务集群自我保护的一种常用机制 , 我们对线上调用比较频繁及资源占用较大的服务都加上了相应的限流举措 , 并构建了单机限流及集群限流两套限流措施 。
首先来看一下单机限流 , 它有多种限流算法可供选择 , 最主要的是两种 , 漏桶算法及令牌桶算法 。 它们之间有什么区别呢?打个比方 , 比如有家酒吧已经客满了 , 保安开始限制客流 , 一种举措是酒吧中出来一个客人 , 才放进去一个客人 , 这样就可以保证酒吧中的客人总数是固定的 , 人人都有座位 , 这就是漏桶算法---必须有出去的 , 才能有进来的;另外一种举措是不管有没有客人出去 , 保安固定每隔5分钟就放一个客人进去 , 这和春运火车站的波段式限流非常类似 , 可以保证客流是比较均匀的 , 但是这种策略也有一定的风险 , 如果离开的客人不够及时 , 酒吧中的客人总数可能会升高 , 导致一部分客人没有座位 , 这就是令牌桶算法 。 因此 , 如果要对线上并发总数进行严格限定的话 , 漏桶算法可能会更合适一些 , 这是单机限流机制 。
推荐阅读
- 好记又有个性的微信名字500个
- 跟女生聊天没话说怎么找话题 微信没话说的女生还有必要追吗
- 分享微信朋友圈投放的6大结论 微信朋友圈如何投放?
- 微信的文件保存在哪里使用指南推荐阅读
- 电脑微信多开怎么弄的解答法子您要知道知识
- 单身必看!如何在微信上撩到喜欢的女生
- 在微信上和女生聊什么能成功邀约约会
- 比邻,探探,遇见,陌陌,微信和女生聊天经验分享
- 看我撩妹秘籍,在微信上我如何撩妹的
- 搭讪女生加微信后如何开场聊天我是这样做的!