2018年终总结-从我所在的团队回首一年技术变迁
前言
今天是2018年的最后一天,独自一人关上房门,静坐回想一年来的总总,当作总结吧。
作为传统的it公司,不是互联网企业,能逐渐转型到各种流行的技术,不容易。如果刚好看到此文章的您是互联网公司的,请不要见笑。
微服务
spring cloud
微服务近两年很火,特别是spring推出了spring cloud后。2016年用的人不多,所以市面只是零星出了几本书籍,到了2017年,经过了一年多的使用,用的公司多了,书也多了,2018年出了更多的spring cloud书,虽然很多内容相似,但也可以看出火爆。
版本更新也非常快,从之前的config+eureka+zuul,到今年zuul从1升级2,但spring cloud官方却推出gateway,并且不支持zuul2。
不管怎样,我终于用spring cloud实现了一个系统。它涉及写代码的不多,更多的是配置。而大部分的配置,都是我来弄的,也算是一种小幸运吧。
有些奇怪的是,不少的人把微服务和spring boot总拉到一块,虽然你要使用spring cloud就必须得使用spring boot,但无论如何,boot只是spring的简化与集成,它为什么是微服务呢?比如市面上有一本书名为使用spring boot构建微服务;还有一次会议上,一个经理说:前台用vuejs实现,后台咱们就用微服务实现吧,呃,不需要用spring cloud这么复杂,就用spring boot吧。
可能大家想说的是RESTful api吧,这个spring mvc里就有了,并不是真正的微服务,可能错的人多了,这样称呼也是对的吧。
dubbo
dubbo是很早就有了,2015年的项目我就接触过,虽然我在项目里没有真正的写dubbo代码。搞不懂是dubbo推动了微服务还是微服务带旺了dubbo。今年感觉dubbo也发展的不错,也推出了spring cloud dubbo的集成。公司也有用,但是RPC写起代码我自己觉得还是比较麻烦,定义interface,打成jar包提供给外。也许天生就没有rest优雅,毕竟关注的是效率。
k8s
虽然听说也提供微服务,但用起来好像更偏向于容器那一块,今年我没有机会接触到,看看明年公司是否有机会给我弄弄这个。
其他
一个东西火了之后,一切都好说。华为也推出了微服务,有技术沉淀就是好,说弄就弄出来。晚舟被抓没事,咱们技术跟上就行。
微软也出了微服务,不过没太关注.net发展,不是很清楚细节。
前端框架
Vue.js
今年公司大力在推。基本作为首要的前端框架,无论pc端还是移动端。大把大把的项目在用。用的基本都是Vue2,好在。1和2的差距还是有些的。如果在写2的代码,拿着一本1的书在看,估计比较难受。Vue3也出来了,有什么新变化呢?
和react、angular这三巨头,react还是占有率最大,但是增长势头却比不上vue。vue有可能将来超越react吗?虽然尤雨溪当时在google,但是毕竟是国人,现在也回来了,vue也入选osc了,如果它能厉害点,还是开心一点。开源中国去年它还排第四,今年居然是冠军了。
layui
这名字。。。我总看成layer,或者和很多类似的一大把ui框架名字很相似:ligerui、easyui等等。但它竟然在2017年ocs排名第一!虽然今年倒退到第四,但是估计国内用的项目还是不少的。很多后端的人都说好用。但同事却有的说不好,究竟好不好?看来我要再努力,多参与。
bootstrap
想不到这么多年了,在ui、css上这框架还是这么火。不知道和国内的同样比较流行的element比如何,都是栅格系统。
这三个框架,今年都没能深入弄,2019年我要在前端技术上再积累多一点,不要老搞后端的,不然领导分配个前端的任务给我我还不会,太丢人了。
thymeleaf/freemarker
不应该放这。随便吧。模板,今年用的不多,明年可能也逐渐被vue替换吧?
SSM框架
终于转型ssm了!你没听错,我今年之前并不会spring和mybatis(很久前用过,包括hibernate,但是那时候都是配置xml的,这么多年了,连xml里是啥都不记得了)。
S所代表的spring已经基本都默认用spring boot替代了。第一个的S也早不是struts1或2,现在没有新项目不用spring mvc了把?
spring各种注解,学起来很爽。但刚开始还是挺难,特别mvc那块,涉及web。mybatis确实没有hibernate有技术含量,不过,好用就行了,应对复杂业务。
数据库
接着,该轮到数据库上场了。
mycat
mycat在2017年还是很不错的,但是在今年却连osc的前20都进不了。可能大家确实觉得bug有点多吧。我用了了父子表,竟然有事务的bug,想该源码,又不知道怎么改,项目进度压力在那,没时间慢慢看。后来放弃了父子表就好了,虽然要xml里加个rule并且不能关联表查询。(谢谢张哈希提供了一点帮助)
QQ群也是一个莫名其妙的存在,入群要交30元。我很惊讶一个开源的软件要交钱入群。虽然我不知道缘由。
但作为国内的开源分布式mysql解决方案,并且基本是唯一的解决方案,还是不错的。我很想知道,大家是怎么用mysql的?不用mycat,难道都是自己公司造一个轮子,大家都这么厉害?
mysql
我今年终于认真的用mysql进行开发了,之前几年都是在打酱油。细细研究,和oracle差别巨大。建表时每个字段的定义都有讲究,还有json格式,json,是一个好东西,出现在各处。
druid
连数据库,国内大家应该都用这个吧?新项目很少用DBCP了吧?支持下阿里还是不错的。
redis
五种数据类型我在一个项目里用了四种,zset以后会有机会的。我从没用过redis,也没写过代码,但是大家却用我设计的redis来开发,还没发现什么问题,非常神奇,redis是一个好工具。集群和非集群还需要继续学习,分别用Jedis和JedsCluster操作。
mongodb
同事在用,所谓文档,很多是json、或者图片吧?明年看看是否可以接触下。
消息队列
消息队列竟然单独一章节,很神奇。多年前,只知道jms。
kafka和RabbitMQ还是选择了前者。效率优先。rocketmq那些就更没机会了。kafka的主题和分区怎么定,我的经验还是欠缺,多向同事学习,毕竟搞了几十个还是上百个broker。大数据量,大并发才有意思。需要写磁盘的,为什么还能这么高效?
Web服务器
nginx
2018年apacke虽然继续第一,但nginx也不弱,第二。而且增长势头第一。apache主要是国外php用所以才多吧?国内java的世界,估计nginx更火。
刚刚几天前用了最新的1.14.2,前几月还用1.12.几,还有漏洞,nginx的发展也不慢。
细细看,功能还不少:反向代理、rewrite、缓存等等。学习起来真的不比tomcat简单,反而更难,特别如果用lua开发,基于openresty。
keepalived
开始弄,走了不少弯路。keepalived+nginx是最成熟的方案了吧,如果不用F5硬件负载的话。keepalived相对简单很多,只要掌握了虚拟ip,和防火墙的配置注意事项。今年终于用上了这个不算新的技术,不错。
tomcat、jetty、undertow
spring boot默认支持的三剑客。既然必须要用tomcat,那weblogic和Websphere就可以歇歇了。我真正需要拿起多年的tomcat6的书籍看看。虽然我在用的是tomcat9。
session共享是用tomcat cluster配置,还是用更高效的redis?都和Weblogic差别很大。
基于nio和少占用内存,undertow和jetty也是可以尝试。谢谢阿里的许进和Lovnx他们给我的一点提示。
编程语言
java8
终于用上java8了,不容易。原因大概就是spring cloud不支持java6。既然升,没理由只升到7而已。可惜oracle马上就说java8要收费。总不能停留在java8的某一个小版本吧?
公司也许会找人基于openjdk来一个的,我觉得。会不会找我呢?
或者改用go?net?不太可能。改了也没啥,我也挺有兴趣。
java8的lambda很有意思,在多线程、集合和打印日志都尝试了,调试是一个麻烦事。java9和java10是不是都不太火?
python
大家搞机器学习和深度学习的都在谈论,但我们也有人用来shell。是的,也是一个不错的选择,我也这么干了。比写shell舒服很多。解析性的语言学习成本极低。适合搞数学的人拿来就用。
但是安装包是一个非常麻烦的事情,jar简单很多。python2和python3也在各个平台不一样。
es6、nodejs
代码里大家写的各种let、const、imort、require开始时把我搞晕了,我技术太差,要不断学习。
本来想把nodejs放在web服务器里写,想想又感觉不对。还是放这。
也许是nodejs推动了es6吧?如果没有了nodejs的出现会怎样?npm、webpack这些还会不会出现呢?不知道。我只知道es6里的promise、暂时性死区等等很难理解,要不断看书。
安全:Https、加密
这两年越来越重要。几年前是很少听见https的,所以传统的、技术落后的公司,也不会错过https的技术浪潮。安全很重要。
买证书、在nginx上配置;又或者用jdk、openssl等生成自签名。很好玩。
加密的领域,国内慢慢起来了,国密不比什么aes、rsa差,中国人的数学本来就很好。就看规范、标准的制定和推广策略行不行了。
我用sm4写了一个jar,晚点打算用android里很流行的混淆技术用Intellij混淆成abc;又用oracle写了一个基于aes+填充标准5的别人看不见我源码的function,感觉很神秘嘛。可惜oracle里没有国密。
敏捷
开始搞敏捷了。很痛苦。天天晨会,却没有scrum里的8小时,也没有xp里的两个人一起写代码可以偷偷懒。唉:)
DevOps
jenkins
好像开始用了,但是我等了一年,这位同事还没有帮我配置好,没看到。
sonar
一样,白等了一年。
maven、nexus
早就用了,今年算是平民化了。Gradle算是颓下去吧?业界感觉势头不行的?
nexus各团队也搭建不少。
maven我感觉自己精通了,其实还有很多不会的。
git
开始替代svn了。搭建了各种各种的gitlab。[git],这个读音大家要读正确哦。
持续集成
没看到,估计在某个团队的某个角落里运行中。但没有喇叭吓我,没有可视化屏幕。
这些东东放devops不知道对不对,放在没地方放,放这把。我对这些没啥兴趣,几年前都弄过了,也没什么技术含量。
Docker
没有不在用的吧?但我却还不会。我对自己说:Danni,你要赶紧学啊。是的。
不然一下子要发布100台机器怎么办?赶紧看看前天同事写好发我的dockerfile。
年初我就不应该傻傻的写scp的shell,也不应该直接用eureka的rest api来启停发布。
mesos、k8s这些对我更陌生,下一步再说。
我只是一个小小的程序员,也许看到的只是公司的冰山一角。可能还有更多更多的技术变迁。
个人总结
- 设计模式&UML:像难驯服的马,又像深奥的佛学,总是用过了又不记得了,除了最简单的策略模式。不过,今年我还是成功用到了命令模式、模板方法模式、门面(外观)模式、适配器模式。简单工厂就不算了。
- 分布式:大并发时还是不太会。
- sso:用的cas,很难,记不住。但是多看几次,也就那样了。
- MAC、工具:Windows转向mac了。eclispe也转向idea,webstorm了。学会postman、jmeter。
- JUnit:在spring和mybatis里应用自如了,但现在好像又忘了。。。
- 工作流(ExtJS、DWR):前阵子放下了,没搞了。太老的技术。。
- TCP/IP、http:想不到这些基础技术还是很有用。比如:https里从哪一步开始加密?加密哪些数据?
- Gitee:比github快太多,如果不是和世界接轨,我都不想用github。
- 微信小程序、公众号、app、H5:玩玩就好,我不是搞这个的。不过H5和css3还是要弄。
- json、日志:忘了这个了,虽然是个小东西,但是fastjson、gson、jackson、net.sf等,slf4j、logback、log4j2等。还不少东西。
- 数学:想不到还挺重要。特别加密、机器学习里。特别线性代数。
- 区块链、机器/深度学习、spark:看看书就好,留给公司的专职去弄,有个同事说spark很好用。看那个马上出版的《程序员2018》也许继续会有。
2019立flag
- 学docker,用起来
- 写vuejs代码,有空试试vscode,webstorm老卡和闪退
- 写redis(+protobuf)和kafka代码
- 学国内的开源框架/组件,支持一下国内。什么dubbo、layui、element、iview、mybatisplus,啥都行。
- 大并发、分布式
- 同事玩EDAS和HSF好像很厉害,要多参与下
- 好像怎么明年目标这么小?算了,还得帮公司干活呢,也不能白养我,不能只顾着学习的。
希望这个flag能进到===true的代码分支吧!
2018.12.31 下午 Danni3 于家中