聊聊家园的技术栈(3) - 转Java的事以及基础设施

2017-05-15 kk 更多博文 » 博客 » GitHub »

原文链接 http://www.kkblog.me/notes/%E8%81%8A%E8%81%8A%E5%AE%B6%E5%9B%AD%E7%9A%84%E6%8A%80%E6%9C%AF%E6%A0%88-3
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


先说说转Java的事

我实习回来没几天, @佛爷 和 @子健 就找我谈换技术栈,我当时还挺郁闷的。 刚转 Python 不到两年,而且 Python 本身就很适合小团队,为啥要换呢?

聊完之后我明白了,关键是 Java “方便找工作”。 @子健 也提到,他在阿里实习生群里统计了一下: 总共两百多人,三十多个前端,七八十个 Java,一百多个算法。Python 在国内还是太小众了, 工作岗位太少,大公司用 Python 也只是做运维之类的工作。 大公司用的后端语言主要还是 Java 和 C++,笔试面试除了考算法,主要也就考这两门语言, 毕业后想去 BAT 的话,转 Java 有很大优势。

然后就是要怎么转的问题了。要有人能做起来,才不会半途而废。目前 @谢志彬 @田国华 @唐嘉麒 是接触过 Java Web 的,我们做的项目难度也不高,开头应该不会太难。

另一个是现有项目怎么办?目前后端除了 Python,还有一些是用 NodeJS 写的。 大体思路是拆分,大项目拆成小项目,做成微服务的架构,逐步用 Java 重写。 不用太担心工作量的问题,随着时间推移,很多项目会死掉。也不用太纠结于重写的好不好,稳不稳定, 那些旧项目也是从很不稳定的状态慢慢做起来的,大胆地去做,无论成败都是对自己能力的提升。

说实话,我挺舍不得 Python,小而美,开发效率高。我知道 @张伦 在用 Python 做数据挖掘, 有机会可以找他来做个分享。我还会继续用 Python 做 Web 开发,毕竟是自己熟悉并且喜欢做的, 不过也会关注一些 Java Web 的东西。

回到正题,未来是你们的,想长远的目标,选择适合自己的。

接下来说点“基础设施”的事情,这也是我想做或者正在做的。

Passport账号系统

这个是正在做的,前期主要是 @谢志彬 在做。主要是账号,权限方面的功能,给其他的所有需要用户信息 的系统提供服务。具体实现是基于 OAuth2.0,这是一个开放的网络授权标准。

目前这个系统属于云家园的一部分,需要抽取出来做成通用的服务,否则云家园会越来越臃肿,越来越难维护。

Passport 这个名字可以追溯到很多年前,那时候我们有一个单点登录系统(SSO), 所有需要登录的地方都跳转到那里去登录,但那个系统后来有很多问题,而且代码很混乱,没法维护。 转 Python 之后以前那些项目就废弃了。

自动化部署

现在的部署方式还是很低级:每人一个服务器的账号,需要部署的时候自己登服务器执行部署命令。 所以经常就会遇到一些权限问题,前端改了代码要等后端去部署,这种方式风险也很大,万一哪个手抖 rm -rf 一下,服务器就完蛋了。

这个系统最基本的要求就是做个网页,点一下就部署(只限白名单里的账号)。 再完善一些就要加上操作日志,回滚,添加项目等等。

具体实现可以基于 Docker Swarm Mode 或者继续用 docker-compose,Docker 还在快速发展中, 并不算完善,但前景很不错。 也调研过 Ansible,感觉还是复杂了些,但可以试试,很多公司用 Ansible。

业务数据监控

最近也有不少文章讲 “增长黑客” 的概念,依靠技术和数据的力量来改进产品, 达成用户增长、活跃度上升、收入额增加等商业目的。

但是我们现在只有 Google Analytics 的数据,太有限了。我们需要更深入地了解用户。 举个例子,我们做的家园课程表,一天中各个时刻有多少人使用,最近一周用户量和用户活跃度怎么样, App 里的某个 Banner 展示了多少次,点击了多少次等等。数据能非常客观地反映出产品的不足之处, 并指导改进策略。

具体实现也不会太难,有开源的 Grafana,InfluxDB,StatsD 等等,都是比较成熟的工具。
可以参考这个视频:Marek Mroz: Collect and visualise metrics with InfluxDB and Grafana

我的文章 Web开发三条锦囊 也有一些相关内容。