今每天气不错,咱们来分享一个能让你技术得到加强的主题: 开发中间件。前端
不少同窗听到这个主题,可能会说咱们是小公司,没有机会开发中间件。redis
那你就错了,咱们这里说的中间件,并不必定是那些如dubbo之类很牛逼的开源组件,而是,大家公司内部本身使用的公共组件。spring
首先,咱们要刻意培养这方面的能力,其次,咱们要掌握必定的套路来快速地开发一款健壮的公共组件。springboot
下面,咱们就从这两个方面分享一下个人心得。mybatis
我举个例子,有的公司可能就只有一个大的单体应用,有的公司可能有不少小项目,有的公司多是很牛逼的微服务,这些项目无疑来讲都是彻底不一样的,可是,他们确定也有一些共同点,好比,他们都须要打印日志,因此,你是否是能够把日志这么一个很是简单的东西拿出来作成一个日志框架呢?框架
日志这个东西看似比较简单,大家公司可能用的仍是spring本身启动时候的日志,可是,它其实也有不少可能性,或者说可变性,好比,日志切分,滚动日志,异步打印日志,打印到远程,聚合日志,日志脱敏显示(手机号不显示全),日志可追踪,等等,你看看,我就随便说说,就能说出这么多日志相关的内容,因此,它是很适合作成公共组件的嘛。异步
这样,公司一旦有新的规范须要修改日志的时候,就只须要修改这个公共组件就能够了,全部项目升级个jar包就完事了,节省了大量的工时,同时,别人依赖你,你的影响力也就提高上去了,你就是大家公司日志这块的专家了,别人遇到问题都得来请教你,是否是很爽。elasticsearch
即便你是单体应用,也应该培养这样的能力,保不许你哪天就走了,这个日志组件是否是能够带到下一家公司,是否是可让你更快速地搭建新项目,是否是可让你在新的公司创建影响力。微服务
上面只是说到了日志这么一个例子,其实,还有不少能够提取的东西,最简单的,大家公司用到什么开源组件,你就提出来,单独打成一个jar包,让别人来引用你,而不是去引用那个开源组件。性能
为何这样搞呢?由于这样搞的好处是多多滴,好比,哪天有这么一些需求,kafka须要带上用户上下文,kafka消费者可追踪,elasticsearch存储的关键数据须要加密,MySQL存储的关键数据须要加密,给前端显示的手机号须要脱敏,日志追踪咱们要换成skywalking,redis咱们要搞集群,你想象一下,这些修改是否是须要全部项目都跟着修改,即便你只修改一行代码,加一个拦截器,动全部项目,也会被人打死,可是,你只是让别人升个版本号,这个别人仍是很容易接受的。
说了这么多,那么,要如何快速地开发一个公共组件呢?
其实,很简单,咱们仍是以日志为例。
如今,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的option,尽可能使用稳定的技术,不引入过多的依赖,等等,多写多用多体会。
好了,今天的分享就到这里,上班去了。
最后,我想问,大家公司有哪些封装得不错的组件呢?欢迎留言讨论。