@Lenciel

Palm4fun Tech Stack Review Part II

距离上篇略久,主要最近很忙。

Application & Data

和其他几个提供辅助的部分不同,App/Data这部分基本上就是产品本身了。

Application Hosting

stack_devops_1

我们在选择云的时候,也有试用过“久负盛名”的几家大的。

  • 阿里因为性价比的原因直接被我忽略了
  • AWS显然是成熟度最高的,但是在国内用起来确实比较憋屈,希望他们正式入华后有好转
  • Google的Compute Engine和Windows Azure都属于开张不久,前者因为有打折劵最终被我用来做了很久的翻墙代理(但是也因为忘记关VPS收到了巨额账单,好在Google还比较厚道免单了)。后者因为在国内有部署,速度非常不错,但是整体比UCloud还是贵了不少。

最终我们选择了UCloud,他们的价钱比较公道,服务也做得非常棒。虽然我们机器并不是很多,但是仍然有24小时随叫随到的服务团队在跟,并且服务团队的技术实力在国内的服务提供商里面也非常突出。

平时还有一些抛弃型的原型我会放到Heroku或者Google App Engine上,因为它们用来部署Django应用非常便捷。

我们大多数项目都只是简单的管理后台,用Apache还是Nginx并没有明显区别。因为Apache在大多数OS自带,所以基本上都是以Apache+uwsgi+supervisor来进行部署。

Languages & Frameworks

stack_devops_1

这张图再画长一倍也不一定能画完,因为这部分特别是Web前端技术的变动实在是太大了。感觉JavaScript社区换框架、方法论、编译工具甚至是VM就像足球运动员换袜子一样勤。

所以我们的策略一直是不绑定到某个具体框架:那样很容易被绑架。从目前来看:

  • React/Flux最近特别火,由Facebook内部使用并开源(特别是最近推出了React Native)。
  • AngularJS,火了很长时间,由Google内部使用并开源。目前两个主要版本变动太大嘴炮很多,可以观望到尘埃落定再考虑深入学习。
  • Backbone是非常不错的客户端MVC框架。
  • node.js和io.js。目前它们是一样的东西,io.js只是node.js的一个fork(类似于Hudson和Jenkins的关系)。目前可以只学node.js但是得盯着io.js的发展,因为很多原来node.js的主力都在io.js这边。
  • npm是Javascript目前最主要的package管理工具。目前你还会听说bower但几乎大家都已经确认这是个愚蠢的idea。另外你还会听说jspm,一个很新的系统,非常不错,值得留意。
  • Browserify使得你可以在browser里面直接使用npm的module,而不仅仅是在server端。完全是一次革命,非常好用。
  • Gulp和Grunt是build工具(类比Ant/Maven),Gulp更新而且设计上非常成熟,推荐学习和使用Gulp。
  • express.js是服务器端JS应用开发需要学习的东西。
  • Meteor是设计非常领先的一个全栈的框架(想想Django),整体上非常酷,目前也很流行。如果你想试试自己的学习能力和承受能力,值得一试。
  • jQuery之于JavaScript就好比少林寺之于中华武术。每个人都在学,都以为它就可以搞定整个武林,但那是错的。JQuery是用来对DOM做操作的,如果你用它在干别的,你多半错了。

Assets & Media

stack_devops_1

这方面没什么好说的,一开始我们用的就是UCloud自带的服务。后面为Testbird开发项目的时候接触到了七牛云。不得不吐槽一下七牛云还处于快速增长期,不论是提供的服务的稳定性,还是文档更新的及时性,都还有很多值得提高的地方。

Data Storage

stack_app_data_4

数据库我们一般本地开发用SQLite,stage和prod服务器用MySQL。之所以没有选择Postgresql是因为它那些很不错的功能我们在项目里面还没有需要,所以就偷懒选择了自己更熟悉的系统。

Libraries

stack_app_data_5

这张图也是很难画完整的,因为它一直在变。不过我们基本上用ACE封装了一套自己的UI框架,对提高开发效率还是非常有用的。

Utilities

stack_utilities

都是些中规中矩的选择,因为好的服务都在国内被封堵得比较彻底,不是吗?

比如统计,百度做得和Google还差几个数量级(你见过实时统计有百度那么不实时的么?),但是在国内因为墙的关系常常还是只能用。

再比如SMS网关,国外有大量的类似Twilio的优质服务,价格便宜,接口良好,但是…我们都用亿美。

值得一提的是推送消息服务,因为被百度坑过,我们一开始用了我浙大著名创业公司“个推”,结果质量低得还比较离谱。最后好死不死又换到了百度Push:原因还是因为Google原生的Push被墙。

Business Tools

stack_devops_1

其实Trello和Slack这样的工具用好一个就足以撑起一家中等规模的公司了。可惜因为经常被墙,很多不能自己翻墙的同事或者客户用起来倍感艰辛。

整个公司的任务驱动主要还是靠Jira,知识分享和管理主要是靠Confluence。

阿勒!

Goodbye Palm4fun, and the tech stack review Part I

goodbye

大概两年前,和Bergkamp、194一次计划外的聊天之后,出于保护直肠的目的,本座离开了基友密布的Myriad,作为Palm4fun的联合创始人之一,开始捣鼓着自己创业。

在具体的研发工作方面,我主要是负责服务器端的开发。但因为被冠名CTO,我的工作还包括:

  • 制定研发流程,管理运作研发团队(很幸运,团队都是气味相投的小伙伴并且平均水平很高)
  • 搭建和维护各种IT系统让大家的工作更加轻松
  • 对各种项目进行技术选型、风险评估和报价
  • 培养有palm4fun自己特色的团队文化
  • 甚至是,设计我们的logo和T-Shirt

别误会,并不是和写代码比,我更喜欢做这些事情:我做这些,主要是经过多年的折腾,已经对自己想在什么样的环境里进行软件开发有了自己的体会。所以,我当然愿意花时间和小伙伴们一起,把理想中的工作环境具体到实践。

经过这两年的时间,虽然我们有纯技术团队创业理应遭遇的各种捉襟见肘,但因为整个团队的坚持和付出,在活下来的同时,也完成了一定的技术积累。有一个可喜的现象是,我们自己参与开发孵化的项目,虽然有一些死掉了,但也有一些拿到了几百万的天使投资;而我们作为外包方参与研发的项目,客户都非常认可我们的项目质量和工作方式。很多客户不但和我们确定了长期合作的关系,还积极介绍自己朋友的项目给我们。

新年到来之际,随着我们被Testbird收编,Palm4fun大部分成员即将投入到新公司的各条战线,Palm4fun作为一个组织也就此消亡了。回首这两年,我想说,如果你没有和我一起经历那说了你也不懂我还是不说了……

跨年的时候,茕茕孑立的本座画了张思维导图,主要目的是把过去两年palm4fun的积累整理一下。画出来之后很多朋友希望我分享高清无码图:因为整个图非常大,不太适合在移动设备上看。

stack_all

其实在一开始选择这些的时候,基本上就是从运维支撑和测试部署工具、产品开发和数据管理、基础设施和功能模块以及商业工具四个维度出发,所以就拆成四个部分简单过一遍。特别声明:选择的依据和出发点主要是根据个人喜好,包括自己使用的体验以及眼缘,并没有特别的理由。比如我们用Reviewboard不用Phabricator,完全是因为团队中大多数人已经用习惯了。

Build/Test/Deploy

stack_devops_1

  • 我们没有用Gerrit或者Phabricator的原因是它们功能太多了
  • Ngrok是做微信接口调试时意外发现的好物

Monitoring

stack_devops_2

  • Sentry帮我们在用户找到我们之前找到了很多问题
  • 一开始我们用过Nagios,它的设计也很不错,就是界面太…
  • Zabbix帮我们远离主机因为硬盘满了或者内存不够驾崩的场面