江南白衣2014年的技术流水账,对Java开发者非常有价值
2014,平缓的一年,记一篇平淡的流水帐,没有形而上的思考。有些是自己弄的,有些是同事在弄自己只在旁边看的。
1. Redis and other DB
Redis在上年已用作Session、Scheduler与Throttling,今年还用于Cache与应用服务器去集群化后的Cluster Service替代品。Redis的各种数据结构太好用了,可惜Redis作者今年的时间都在非功能性的需求上,在数据结构上面下的功夫少了。
升级了Redis 2.8,Sentinel的大改进,原本自家写的关于HA的很多脚本都不再需要。
但动态扩容没有像豌豆荚那么高大上的做一个Codis出来,只像小米一样做了个成倍扩容的方案,然后苦等Redis Cluster出来。而Redis的跨机房复制与容灾切换最牵扯精力,最后打算做一个后台双写的Replicator和一堆FailOver/Recover的脚本,但只支持幂等的操作如SET/SADD,不支持INCR/LPUSH。
Cassandra也试了一下,好像没有一个压力测试的下午是无错的渡过的,也不适合会频繁删除的数据比如Session。但它的动态扩容,跨机房容灾,以及按属性查询,不占用内存又的确比Redis这熊孩子省心。
传统数据库方面,项目原本只有MySQL Cluster与Oracle两种选择,现在PostgreSQL强势插入,各方面测试结果都漂亮。不过跨机房复制的功能需要买商业版,而虚拟环境/云平台下的License,公司的集采还没谈下来。
2. Craftmanship
今年最痛快的编程体验,是做一个引擎类家伙的原型,三两天写了千多行代码,对拿下美国那张大单有大帮助。好久没这么密集的coding了,一段宝贵的记忆。
有趣的是,几个月过去后引擎又完善了很多,但代码还是两千行上下,平均下来的每天编码行数又变成正常值。所以,1. 某某大牛一天写多少行代码的江湖传说其实意义不大,2. 代码大部分时间都在被阅读被维护,可理解可维护性多么重要。
左拨一下,右弄一下,项目性能比上一个版本提升了400%。
有的项目在用Scala Test做折中经济版的BDD,还用Moco做远端Web服务的模拟。
有个段子,程序员最讨厌写文档,和别人不写文档。但自从Leo用Jekyll + Git + Jenkins搭了个新的文档系统 ,一下子冒出好多设计文档看花了眼,证明程序员也不是天生讨厌写文档。
Leo还引入了PlantUML,这种用text写的UML太方便,原本习惯了直接用PPT画图的又慢慢改回UML。但还是可惜UML被UML三剑客带进沟里,然后就没了发展。
3. Graphite与运维
新引入的Graphite,同样是被一鱼多吃的典范:存储Time Series Metrics数据,能用于诸如服务监控与报表、按TPS/接入设备数/月使用量的License模式、系统限流保护、故障时自动切换机房等等。有了它,很多故事都能讲下去了。
Graphite最成熟,功能非功能做得最好,生态圈也最完备,不过最近的更新有点慢了,用Go写的后起之秀InfluxDB可以关注。
Graphite原本只运行于Linux,我改写了一个可跑在Windows下的版本,方便日常调测。
今年Graphite还终于有了好看的DashBoard:Grafana,基于Angular.js,每月蹭蹭的涨功能。
但Metrics的类库,堂堂Java界就只有一个CodeHale Metrics,Spring Boot用它,Cassandra也用它。但它实在不够好啊,所以自己结合Statsd,写了个Metrics Lib,也开源在SpringSide-Metrics里。谁说我只会用轮子,不会做轮子的!!!
Logstash + ElasticSearch也终于引入做日志的集中收集和统计。
4. Spring Boot
Spring Boot出来,Javaer有福了,小白也能愉快的快速开始一个SSH的典型项目。再加上Spring Loaded,不用在Rails,PHP前自卑了。
恰逢MicroService架构又火了起来,和Spring Boot也很搭。
其实它不是一个新的框架,而是大幅简化并集中了SSH中的各种配置,嵌入式的Tomcat或Jetty,还自带一些健康检查,Metrics之类的Http API。成熟项目里一些老手经过一番努力也可以实现。但人家这个是官方的,开箱即用的,面向小白的。
生产环境还是Weblogic,但只在本地开发与Jenkins环境里换用Spring Boot,团队的生产效率便提升很多,轻轻松松压着进度不用加班加成狗了——但不加班加成狗,是不是就拿不到明星团队奖了?
[注: SSH= Spring / SpringMVC / Spring Data JPA + Hibernate]
5. SpringSide
今年不算勤快,只发布了1个中版本,3个小版本,明年要更勤快些。
域名换到springside.io,又站到了Spring的新域名spring.io的旁边。io是地球上哪个角落的小国,没人有闲心管域名注册的事,所以成了开源软件们的菜。
下个版本,SpringSide的Modules会洋气地放到Maven中央库,谢谢D瓜哥帮忙在Sonatype填的申请。
6. 其他
项目都云化了,为接地气当了一把装机小王子,小碰了一下KVM 和 OpenStack ,并记下一份装机宝典,据说有不少同事看。
项目所需,对Diameter协议可以冒充专家了,但对各种电信协议还是没什么感情。
敏捷一个新玩法是将Team Leader 与 Scrum Master分开,固定的Team Leader是团队的技术骨干和精神领袖,而可轮换的Scrum Master负责团队管理与杂务,将团队里技术最强的那个人从管理中释放出来。
另一个新鲜事物是对Jenkins上几百个Job无数的Test Case进行大数据分析,显示经常不稳定的,变快的,变慢的测试用例等等。
全年各种大会,只去了一次InfoQ在深圳的架构师峰会,还要感谢泰稳的赠票。
来自:http://calvin1978.blogcn.com/articles/my2014.html