这些后端的基础设施你们公司都有吗
- 最近入职了一家公司,进去发现基础设施比较差,甚至可以说几乎没有,研发效率极其低下,于是想了下自己心目中理想的研发团队应该有哪些基础设施,因本人眼界有限,全文只针对于java后端有感而发。
CI/CD持续交付平台
- 待过几家公司,按照体验可以分以下几个等级
- 完全没有发布平台,也没有容器化,本地打包,ftp传包部署,看日子需要登录服务器,没有权限管控,灰度发布,弹性扩容缩容的不要想了。
- 基于Jenkins打包部署,有一定的学习成本,用跳板机登录机器排查问题,权限有管控,但还是不太方便。
- 有发布平台,加上云原生,能够做到不用登录机器查询日志,弹性扩容缩容,多环境开发这些也能做。
- 做的更好的还包括codereview, 远程调试,单测,自动化测试,集成测试,覆盖率统计,代码静态检测等一系列流水线,也包括二方包,三方包的打包。
- 我几乎没有在本地启动项目联调,一来是因为微服务开发,需要启动的服务很多,机器配置不够,二来是会将请求路由到本地,对其他同学开发造成影响,三来是云原生时代,没有必要。这也是一个趋势。
多环境开发平台
- 当一个应用并发迭代,需要同时部署多个特性分支,并且你的上游业务依赖该应用,需要请求到master分支的环境。这时候就需要多环境开发平台,特性分支部署时会打上tag, 请求时会带上标签请求到对应的服务,涉及mq, 定时任务,http, rpc路由等一些列中间件都要二次开发。
- 如果没有这样的平台,团队规模一大,并发迭代时需要频繁的合并代码,解决冲突,部署,开发中的服务是不稳定的,会影响上下游其他团队。我甚至接触到某个团队每一条业务线部署一套环境,包括中间件,维护成本极大。
数据库管理平台
- 我几乎没有用过Navicat这些工具,正规的公司都有权限管控,数据库平台需要支持sql的审核,提交和回滚,数据的脱敏,异构数据库的迁移和同步,支持从开发,测试,预发,线上等多个环境的工单流转,避免多个环境表结构的不一致。当然不仅仅支持mysql, 我很厌烦去打开各种数据库的地址吧,mysql, redis, es, clickhost,hbase, 每个平台一个地址简直奔溃。
- 做的比较好的是,只需要配置来源数据源和目标数据源,配置字段的映射,就能将数据全量或者增量进行同步,不仅限同类型数据源之间,还能支持数据校验,完全不需要写一行代码。
- 没有这样的平台只能双写同步数据,自己去校验数据,数据少的话写sql,都不是很优雅,甚至有安全隐患。
应用管理平台
- 需要新建一个应用在哪申请?当然是在线申请,应用的节点数,配置是几c几g, 域名是什么,应用负责人,git的权限,更重要的是应用接入了哪些中间件或者需要接入中间件都可以自助申请,不需要去线下找每个中间件的负责人,有没有遇到过接手一个应用你不知道到底有没有接mq, 有没有定时任务,有没有binlog, 每个平台查一遍简直奔溃,甚至有的平台还没有提供查询入口。
监控告警平台
- 能够监控一些技术型指标,如cpu,内存使用率, tps,qps等指标,能够支持按照各个业务线自定义配置阈值进行各种策略的告警,也可以支持业务自助接入,如下单失败率进行告警推送给业务方。
故障分析平台
- jvm oom或者其他问题,能够自动吧dump文件上传至一个地方,然后在线分析jvm, 研发只需要在线查看分析的结果,按照网上的教程敲jstack, jmap等命令可能案发现场已经不存在。
测试覆盖率平台
- 测试同学点点点怎么知道自己点对了,覆盖率又是多少,测试覆盖率平台能够统计当前特性环境与稳定环境差异的部分,也就是针对修改的代码,测试覆盖率达到了多少,对于整个测试进度有个底,相信大家都有遇到过明明已经测试过了,但是由于数据的原因或者测试对业务不清楚导致分支没有覆盖到,导致线上问题,通过这样的平台,能够直观的看到哪些代码已经测试过,哪些还没有测试,更容易把控风险。
API网关
- 我认为一个合格的网关,不仅需要支持不同协议的接口的注册上线下线,权限控制,限流,降级,,还有必要的是接口注册后文档的自动生成,生成文档的同时生成mock用例,如果是开放平台的接口,还能生成对外接口文档,swagger,yapi这些我觉得还是有一定的成本的,使用javadoc的方式一键扫描源文件注册接口,生成文档和mock用例,完全是0成本的。
- 有同学说ngnix, nginx也需要二次开发,修改配置的权限不是开发人员人人都有,改错了分分钟被喷。
项目管理平台
- 研发研发,有需求才能研发,有很多同学入职之后发现不知道所负责的业务,想看历史的prd,可能没有或者散落在各处,只能厚着脸皮去问,大厂应该都有这种平台,维护一个项目的历史背景,需求文档,排期,任务拆解,bug跟踪,统计研发成本,能够做到无序沟通就能完成一个迭代,开源的有禅道这样的工具,但是功能有限,如无法和代码分支进行管理,无法集成CI/CD,需要进行二次开发。
流量回放,故障重现
- 某段时间服务挂了,又是微服务,又没做分布式事务,导致数据不一致,订数据太麻烦,把请求都积压起来,按照一定世界范围内重放,满足数据最终一致性,当然幂等是前提。
总结
- 有些平台是雪中送炭,能大大减少无意义的时间成本,解决痛点,有些平台是锦上添花,能让工作体验更好,还有些平台大部分公司都有,但是之前待过几家公司做的不是很好,使用成本很大,必须人工介入,使得效率更低下了。
- 大厂的黑科技挺多的,这里就介绍本人觉得很有必要的几个平台。
