今天天气不错,来分享一个可以提升自己技术的话题:开发中间件。很多同学听到这个话题,可能会说我们是小公司,没机会做中间件。那你错了。我们这里说的中间件不一定是dubbo之类牛逼的开源组件,而是你们公司用的公共组件。首先要刻意培养这方面的能力,其次要掌握一定的套路,才能快速开发出健壮的公共组件。下面,我们将从这两个方面来分享我的经验。让我举一个例子。有的公司可能只有一个大型单体应用,有的公司可能有很多小项目,有的公司可能有非常强大的微服务。这些项目无疑是完全不同的。但是,它们必须有一些共同点。比如他们都需要打印日志,那你能不能把日志这么简单的东西拿来做一个日志框架呢?日志似乎比较简单。你的公司spring自己启动的时候是可以使用日志的,但是它其实有很多的可能性,或者可变性,比如日志切分,滚动日志,异步打印日志,打印到远程,聚合日志,日志脱敏展示(手机端)number没有显示全),日志可追溯等等,你看,我随便说说,能说那么多日志相关的内容,很适合做一个公共组件。这样,一旦公司有新规范需要修改日志,只需要修改这个公共组件即可。所有项目都可以用jar包升级,节省大量工时。同时,别人也依赖了你,你的影响力也提升了,现在已经是贵公司日志里的专家了。人家遇到问题都要请教你,不是很好吗?即使你是单体应用,你也应该开发这样的能力。你不确定有一天你会离开。这个日志组件可以带到下一个公司吗?它能让你更快地构建新项目吗?让您在新公司中建立影响力。以上只是日志的一个例子。其实还有很多其他的东西可以提取出来。最简单的就是你提出你公司使用的任何开源组件,单独做一个jar包让别人引用你。不要引用那个开源组件。你为什么这么做?因为这样做有很多好处。比如有这样的需求,kafka需要带上用户上下文,kafka消费者可以被溯源,elasticsearch存储的关键数据需要加密,MySQL存储的关键数据需要加密。加密,前端显示的手机号码需要脱敏,我们需要用skywalking代替日志跟踪,需要为redis搭建集群。试想一下,如果这些改动需要修改所有的项目,哪怕你只修改一行代码,加一个Interceptor,如果把所有的项目都搬过来,你也会被打死。但是,你只是让别人升级版本号,别人还是容易接受的。说了这么多,如何快速开发一个公共组件呢?其实很简单,我们以日志为例。现在,对于1.0.0版本,你只需要新建一个Maven项目,在resource下拖一个logback-spring.xml,它定义了你的日志格式。一般还需要做滚动日志,按天拆分,10M一个文件等等等等,模板很多,网上一大堆,就不细说了。这样就开发了一个日志组件,你可以打包成Maven私有仓库,其他人可以下载。是不是很简单?!OK,现在大家都在用你的日志组件,但是有些项目发现日志的同步打印有点影响性能,所以我有一个请求,能不能把日志改成异步的。很简单,你只需要加一个异步Append,重新打包成1.0.1版本,告诉他升级版本就大功告成了。好了,现在有一个项目使用微服务给你提出一个请求。我们有太多的服务。能不能把日志打印到一个地方,统一查看?而且,我们想通过一个请求,通过一个标识把所有的日志都查出来。这很复杂吗?其实,并不难。简单的说,你申请一个elasticsearch,加上一个打印到ES的Append,把所有的日志打印到同一个地方。查看非常方便,再也不用无机登录了。查看日志。那么,第二个要求呢?sleuth的引入可以让你的日志可追溯。只需在Append中引用sleuth的traceid。这样就完美解决了微服务聚合和日志可追溯的问题。甚至,你可以更进一步,偷偷接入zipkin等调用链跟踪框架,完美展现调用链的流程,帮助快速排查问题,辅助提升接口调用性能等等。相信有了这样的框架,你在公司的地位会非常稳固,成为日志方面的专家。当然,很多大公司都有这样一套现成的东西,可能没有你发展的空间,但不影响你培养这种思维。比如可以封装kafka、elasticsearch、mybatis、redis等,只要有这种思维,机会无处不在。当然,我上面说的很完美。在实际操作中,您可能会遇到各种各样的问题。有问题才有价值。最常见的问题是版本兼容性和jar包冲突。所以,你还需要掌握一些常用的技术,比如springboot的自动组装,Maven的options,尽量使用稳定的技术,不要引入太多的依赖等等,多写,多用,多体验。好了,今天的分享就到这里,我要开始工作了。本文转载自微信公众号“童哥阅读源码”,可通过以下二维码关注。转载本文请联系童哥阅读源码公众号。
