Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 3.88 KB

所依赖的基础组件的版本如何进行选择.md

File metadata and controls

34 lines (25 loc) · 3.88 KB

所依赖的基础组件的版本如何进行选择

操作系统(CentOS 7)

  • CentOS 7版本,CentOS是一个Linux的主流发行版本,并且内置了一些服务管理的能力(Systemctl),用于后续的服务发布和管理
  • 优势:目前基本所有的主流云产商都是支持的
  • 缺点:目前没有明显的大缺陷会影响服务部署和使用
  • 总结:建议大家选择CentOS 7,如果还没有从CentOS6、CentOS5升级的可以进行升级

开发语言(JDK11)

  • jdk11(2018-09-25正式发布)是自jdk8之后的首个长期支持版本(LTS),现在虽然jdk8是主流,但是相信之后大家也会逐步切换到jdk11的
  • 优势:jdk11引入了一些新的特性,并且对于对比于jdk8,gc算法使用G1作为了默认的gc算法,并且引入了少量的新特性。目前主流的基础框架SpringBoot和SpringCloud的新版本都已经支持JDK11
  • 劣势:由于jdk11删除了一些默认包,导致从jdk8到jdk11的过程中会遇到无法找到一些Class的异常
  • 遇到的坑:
  1. 一些老版本的ide不支持jdk11的编译,需要进行ide升级
  2. 一些框架依赖jre里面的包,但是在jdk11里面被删除了,需要通过依赖显示引入
  3. 少量第三方的Encode或者Decode算法,使用了jdk以前的sun.misc包里面的方法,还有一些使用了jdk里面的tools包,现在jdk11没有这些包了,导致程序出错。目前有仅仅遇到一些银行提供的包还在使用sun.misc包,并且没有提供有效的解决方案。
  4. 一些大数据相关的组件(flink),目前还不支持jdk8
  • 总结:如果是微服务开发,可以选择进行升级,绝大部分框架或组件都支持jdk11,如果是大数据开发,不建议进行升级。由于工作中主要是为服务业务开发,所以已经完全升级到了jdk11

基础框架(SpringBoot 2.1.3 + SpringCloud G系列)

  • SpringBoot + SpringCloud 作为java语言微服务的标配,已经被大部分公司采用了,目前最新版本SpringBoot为2.1.3,SpringCloud为G系列,通过这两个大版本,基本可以覆盖80%依赖组件的版本,这样有利于统一版本管理。目前通过把SpringBoot + SpringCloud和剩余的20%基础依赖进行了一次二次封装,方便在公司内部进行版本管理和持续的升级所依赖的基础框架 loc-framework

  • 优势:绝大部分的微服务功能目前Spring全家桶都可以覆盖,大大降低了开发成本,并且社区活跃,对于绝大部分的场景都有现成的解决方案,并且通过SpringBoot可以使得部署非常方便。

  • 劣势:整套技术所依赖的组件过多,大部分业务开发人员不需要掌握所有的东西,所以可以通过上面说的二次封装进行进一步的整体打包,屏蔽技术细节和统一版本

  • 总结:如果能够使用好SpringBoot + SpringCloud可以是的整个团队的效率大大提高。所以我个人认为SpringBoot + SpringCloud也是目前java语言微服务落地方案中最优选择。

总结

很多人问如何选择使用开源框架的什么版本?我建议是选择最新的稳定版本。有些人怕最新版本会有问题,不稳定。其实只要是一个活跃稳定的开源项目,如果这个版本有bug,那么一定会有人先遇到,并且提供解决方案。如果你是第一个遇到问题的人,那么恭喜你,你可以把问题上报给作者,或者自己修复提交pr给作者,也算对开源框架的贡献。

关于bug的问题,其实新版本和老版本都会有bug,新版本解决老版本的bug,并且也可能会引入新的bug。所以只要是正式稳定版本,我觉得就可以大胆使用,并且正视问题并且积极解决。

希望大家在使用框架的同时一定要多多关注版本号。这样对之后排查问题也是很大的帮助。