关于“设计一个微服务治理的工具”的想法,我酝酿了很久。但是,你知道,由于种种原因,我搁置了很长时间。最近正好因为在研究“架构适应度函数”,有了新的想法。微服务架构治理似乎与架构适应度函数无关。然而,我设想的是一个“微服务治理的架构适度函数”。您可以将其视为帮助更好地开发微服务应用程序的工具。对了,因为手边没有这样的场景。所以,我先把自己的相关想法记录下来,方便后续整合。并且大部分功能已经在Coca中实现了,我会把部分功能交给Coca来实现。比如数据库的自动化分析——Tequila做了很多自动化。微服务粒度适应度函数对于微服务架构来说,最头疼的问题之一就是微服务粒度。从源头上,我们应该遵循“两个披萨团队”的规律,即对于单个服务的设计,设计、开发、测试、运维的所有参与者只需要2个披萨。但实际上,从国内大中小型企业的做法来看,并非如此。通常一个团队维护的微服务比自己多,即6个开发人员可能维护8个微服务。大家常犯的一个错误就是按照技术维度而不是业务维度来划分微服务。关于这部分的自动化,暂时找不到头绪。但是我们可以判断两个微服务是否可以合并:即基于Git日志的微服务粒度合理性分析。服务提交者的数量。使用gitlog查看单个微服务的提交状态变更频率。查找多个模块之间是否存在大量同时变化的需求关联。通过识别提交信息规范,识别多个微服务、模块、类是否频繁同时变更。前提条件:符合提交规范。这个时候我们只需要使用类似cocagit的解析功能就可以达到类似的效果。API适应度函数在Coca中内置了API解析相关的函数,可以支持识别Spring的API注解,服务声明的API方法,解析调用关系。因此,我不需要开发这样的功能,只需要稍微改进一下,添加一些分数信息即可。对于API设计,这个工具做了几件事:API命名规范。比如命名方式不一致参数合理性。如果太多或太少,就不应该出现在URL中。是否符合RESTful规范。比如URL中不应该出现get、post等词,是否所有的API都是post。是否跨服务使用相同的资源前缀。对于大多数公司来说,要达到RESTful的第一个层次是相当困难的。数据库表适度函数微服务把服务间调用从函数调用变成了远程调用,这也意味着我们不能直接从服务A访问服务B的数据库,而是通过访问服务B的接口来访问数据库。但是在某些场景下,A和B需要共享数据库(比如一个收费的Oracle数据库实例),但是我们需要强制限制A和B服务对表的访问。因此,我们需要分析多个服务之间是否存在对同一张表的修改,或者是否存在对多个表的修改。表和服务关系维护。MyBatis等扫描工具生成表和服务关系维护。实现“数据库表映射服务”的快照测试。简单来说,这部分我们的工具需要做的是:每次提交代码时,自动扫描并生成快照。只需将其与存储的快照进行比较,即可确定数据库是否存在问题。然后设置一个合理的调优公式,就是这部分的架构适应度函数。分层架构适应度函数在解决了表面问题之后,我们可以尝试实现架构干净的目标。对于分层架构,我们要做的可能会稍微复杂一些。不过幸运的是,Coca已经实现了复杂的调用关系识别。那么,对于我们的分层架构适应度函数,我们只需要做几件事:微服务之间是否有函数调用?是否在同一个包中的单个服务的所有API,例如controller。是否存在不合理的common和util模块。改进了将三层包架构迁移到整洁架构的可视化。简单来说,就是自动识别书中记录的部分《系统重构与迁移指南》。数据结构适应度函数已经有一些工具可以在数据结构/数据模型方面做类似的事情。对于微服务架构,我们要做的一些判断是:耦合不合理。如果一个结构/类同时被大量的其他类调用,那一定是有一些不合理的地方。超大型号。值得注意的是,在一些大数据场景下,这是正确的,过于复杂的嵌套。没有行为的模型。然后,针对一些不同的用例,有一些不同的识别模式。模型分析在某些特定场景下,团队会将共享模型抽取成一个公共模块,提供给多个微服务。这种模式本身可能存在问题,因为模型本身不应该在不同的限界上下文中保持一致。相似度分析考虑到了复用和耦合的关系,这里不推荐分享。不同服务之间需要一定的copy/paste,但是需要考虑更好的方式,比如使用类似proto的DSL生成方式。同时通过DDD进行管理——不同的相似类型有更好的命名方式。其他细节需要做一些基础,比如模块的处理:modulelogobuild.xmlgradlepom.xmlbazelmoduleownershiprequirementsassociationsubmissioninformationidentification(regularrelationshipcanbeentered,configuration)recordpackage-requirements-Cluster服务关系分析……好吧,这些都不容易。结论你的微服务架构适应度函数怎么样?本文转载自微信公众号「phodal」,可通过以下二维码关注。转载本文请联系phodal公众号。
