2016年终总结

2016年大约一半时间在深圳,一半时间在广州;而2015年大约一半时间在北京,一半时间在深圳。说来也是个对称的事情。兜兜转转,如今又回到深圳,感受又回到了起点。这折折腾腾看起来挺好,可是不少失去了连续性,并非太好的事情。前端

回顾

这一年的关键词也是跳槽,分割线也大概是在年中的时候,秉承着互联网改变各个行业的理念,到了非互联网公司。java

上半年

先说说上半年的这家公司,其实去年的总结也有提到了,其实去年就不大想待下去了,不过很差频繁跳槽,好不容易熬到了过年,因此跳槽仍是挺瓜熟蒂落,不过深圳这边可选的公司并非太多,至少不像北京那么多,主要是有工程师文化的公司并非不少。鹅厂有着深厚的产品文化,对工程师并非太友好,具体我也就懒得说了,别人道出个人心声:腾讯一年感觉。本来呢,我仍是秉持比较谨慎的态度的,没有文字说出来,怕有失偏颇,不过看到同道中人也是这样的观点,那我也就放心了。固然,高层也有所觉察,去年圣诞晚会就有强调要警戒今日头条这类科技公司,未来可能要颠覆掉腾讯新闻,今年也更增强调科技,老板说,这是腾讯史上人数最多的股东大会,“第一次提出,腾讯将来要成为一家领先的互联网科技公司”。也许会渐渐改变吧,指望对工程师愈来愈好,好比27寸显示器+macbook。node

下半年

上半年底到了非互联网公司,不过仍是有些许工程师文化,mac air + 25寸显示器 + git。说实话,不是太喜欢不用mac、不用git的公司。今年全部的技术上的成长,都在这里了,毫无疑问,这就是跳槽的好处,不少新技术,没有氛围和实战的场景,光靠本身是很难搞起来的。主要是经历了从传统SOA到微服务的转变,另外因为以前在未经历过先后端分离,也一块儿经历了。微服务+docker+k8s,很浓重的devops的味道。固然也是有些磕磕碰碰,不过新技术就是要去尝试。另外职责上从之前的纯后端,到整个项目,基本上除了前端开发,其余的多多少少都有些涉及,算是开拓了视野,也算是打杂了一些。下面就一一说一下吧。mysql

一、先后端分离

先后端分离以后,后端变得简单一些,基本上纯提供简单的api,前端的逻辑会重一些,这就对前端工程师的能力要求会高一点。其实逻辑移到前端,对于java工程的好处是,前端是自然异步的,能够很好地更细粒度地请求后端api,这样服务更轻量,大大下降了出现后端服务哪里有问题,致使整个页面出不来的状况,并且前端自然异步,能够很好地并发请求,这样能够很好地handle个别服务故障的状况。nginx

先后端分离以后的第二点就是要处理跨域问题,前端有两类方式来处理这个问题,一个是使用nodejs,前端自己就能够代理后端服务,不过这也就增长了对前端工程师的能力要求。不过前端最近技术更新太快,2016年里作前端是怎样一种体验。本来本身有点想学前端的,不事后来本身折腾了一下,有点不知所措了,前端一部分愈来愈演变得像后端了,新技术太多,感受有些复杂化。另外一个处理跨域的方式就是用nginx转发,前端工程本地开发的时候,使用node的httpproxy,配置一个nginx的地址转发便可,这样全部后端接口的维护都由后端统一维护,前端只管基于相对路径的请求。本来本身走了点弯路,让前端本身本地搭建nginx去转发,结果发现前端对nginx实在是一窍不通,另外把api的转发配置也给暴露到前端了,不是太友好,并且前端的开发环境并非太统一,有的用windows有的用mac,因此各类配置起来有些麻烦,期间虽然有尝试过用docker,可是也是增长了对前端人员的要求,最后仍是回归到前端本地开发使用nodejs的本地代理,仅仅作本地开发用,生产环境仍是用nginx。git

说到nginx,也算是今年接触比较多的,之前仅仅作java后端,不涉及这么多,如今接触nginx也算开拓视野吧。以前公司仍是用淘宝的tengine,没想到时隔几年openresty大势崛起。因而,也就是开启了nginx+lua的开发模式了。对于用惯java的来讲,对于nginx的秒级重启,感到很是的爽歪歪。一开始还不是太习惯lua这种脚本,一来没有ide能够提示和debug,二来对lua不是太熟悉,有些排斥。不事后来渐渐喜欢上了,主要是秒级重启,很是之快速。另外就是使用nginx做为api-gateway,至关地成熟,不像spring cloud的zuul,坑仍是比较多的(好比以前的一些版本不支持url中带冒号的),另外对于java启动慢,占用内存多,有些不放心,因此总体仍是很是喜欢openresty,但愿明年继续进阶,但愿可以熟练掌握。相比于zuul,nginx惟一不大好的是不可以作到服务的自动发现,不过这个主要是看你怎么使用了,也有经过etcd去动态配置nginx的,固然咱们没有搞这么复杂,整个都抛给k8s了,nginx转发到服务暴露的externalIP,由k8s去处理服务的扩容伸缩啥的。redis

二、微服务架构

之前仍是soa(单体架构),没想到今年微服务这么火,感受本身若是不是跳槽,估计没这么快接触到微服务,因此,这个也是跳槽的好处。微服务与SOA的关系呢,层次不同,不是很比如较,不过大体认为,SOA是偏架构层面的,而微服务是SOA的一种特定方法,就相似XP/SCRUM之于敏捷开发。
简单列一下微服务的好处吧:

  1. 代码量不会庞大,好维护,能够2周是否能够重写完为衡量目标

  2. 可根据服务的特色选择最适合的技术来实现,能够大胆尝试新技术

  3. 简化部署,能够快速迭代发版,升级,回滚的话,影响的限度相对较小。大的单体架构,一处小的改动就发版,代价太大,不能频繁发版,多个改动一块儿升级,风险大

  4. 可根据团队人员规模,组织结构去适配服务架构,保证团队人员能够hold住相应规模的微服务

  5. 微服务便于聚合和重用

  6. 从人才培养上,能够给更多人提供对单个服务负责的机会,而当这些人在单个服务上面获得足够锻炼以后,就能够给他们更多的责任,从而帮助他们逐步达成本身的职业目标,同时经过分担职责能够防止某一我的的负担太重。

主要的仍是化繁为简,去中心化,解构,把之前的单体架构,重量级的服务都微服务化以后,各个服务之间耦合不那么多,就能够自由更新。不用担忧系统升级以后,哪一个之前的旧功能受到影响,还得当心翼翼地回归。服务更加内聚,影响范围在可控的范围内。固然并非全部的服务都能这样,好比一些公共基础设施的服务,好比登陆服务。

咱们主要是用spring cloud全家桶来进行微服务,得益于netflix oss的技术栈,中小公司能够不用本身重复造个轮子,spring cloud拿来即用。固然这也得益于springboot的兴起,想一想之前在公司里头,还得研究不一样环境的不一样配置文件怎么处理,而后配置文件里头的数据库密码啥的怎么加密之类的,springboot的profile很轻松地能够解决环境配置问题,spring cloud的configer server的encrpt功能则可很轻松地解决加密问题,一块儿都是那么easy,忽然间你会发现,之前本身苦苦研究的东东,在大浪潮前面被轻松超越。spring的不少东东都比较好用,好比spring session,轻松解决分布式session问题,简单添加几个依赖和注解就ok了,还有spring data系列,相似的repository,经过约定的findByXXX等屏蔽底层的数据库细节,固然里头有些坑,好比mongo的findOne,就是会自动取一条,而jpa的findOne,若是有多条会报错,不过总体而言仍是挺好的,好比分页功能就很好用,通用的方法,从pg切到oracle,改下驱动基本就ok了,根本就不用去处理oracle麻烦的分页方式。另外,关于服务之间的熔断,hystrix就提供了很好的支持,很是好用,大大提高服务的高可用。

Spring Boot基础

Spring Cloud系列

忍不住说几句Spring Cloud系列,就是eureka的设计是AP的,强调高可用,可是这个须要看场景的,有的可能喜欢CP的设计,那么eureka就不那么适合了。本身使用的过程当中特别想吐槽的有点就是eureka这个每次经过eureka去作服务发现,都须要等一段时间,有点费劲,另外,若是是搭配k8s一块儿使用的话,那么Spring Cloud全家桶的功能有些会跟k8s重叠的,好比服务路由发现。所以相对而言,若是不存在后端服务间的交叉调用,那么其实用Spring Cloud的ribbon、eureka其实可能不是太合适,固然有hystrix仍是很好用的,不过也存在误判。

SpringBoot应用系列文章

Srping Data JPA系列

Spring Data Mongo系列

Spring Data Redis系列

Spring Data Elasticsearch系列

Spring Boot配置属性系列

三、万物docker化

docker也是今年主要的收获之一,特别是大部分生产的服务都是跑在docker上面的,包括pg、redis、kafka等等,感受很是爽。docker来了,更简化开发,更devops。

docker基础系列

基础组件docker化系列

怎么说呢,用了docker以后,我的就能够研究不少集群的东东,这是以往使用visualbox或者vmware没法比拟的,很是是便捷,新技术就是好。

固然使用docker以后,还须要一个掌舵的,咱们使用的是k8s,G家的东东。

虽然写了好几篇怎么在mac上安装的,不过最后都证明了没法正常启动,因此后来就不了了之了。看来若是想在mac上搞,估计得老老实实走vargant的方式。

盘点及展望

总的来讲,今年主要是延伸技术视野,跟上了docker、k8s以及spring boot和cloud的新技术,外带个openresty。技术深度的话,都不是太够,明年须要重点关注下。

去年的愿望,实现了一点,那就是“在sg的声望破1000”,其余的还有待继续努力。展望下明年:

  • 深刻系统设计,这个才是抵抗技术更迭太快的秘密武器

  • 夯实基础,好比计算机网络、算法等

  • 深刻一些经常使用的东东:Spring Cloud、Redis、Mongo、PG

具体的指标呢:

  • 继续天天sg博客,继续提高sg声望

  • 多回答stackoverflow的问题

  • 每周末技术复盘

  • 夏天仍是须要继续跑步,指望能学会游泳

  • 少加班、多提高时间以及项目管理能力

嗯,就先这样吧,咖啡馆写了一下午,准备去吃晚饭了。

doc

相关文章
相关标签/搜索