江南白衣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