@Lenciel

Palm4fun Tech Stack Review Part II

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

Application & Data

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

Application Hosting

Don't touch me

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

  • 阿里因为性价比的原因直接被我忽略了
  • 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

Don't touch me

这张图再画长一倍也不一定能画完,因为这部分特别是 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

Don't touch me

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

Data Storage

Don't touch me

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

Libraries

Don't touch me

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

Utilities

Don't touch me

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

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

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

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

Business Tools

Don't touch me

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

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

阿勒!

Goodbye Palm4fun, and the tech stack review Part I

Don't touch me

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

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

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

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

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

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

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

Don't touch me

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

Build/Test/Deploy

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

Monitoring

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