第49期 | 极客时间手记四:构建技术基础服务
你好,这里是卖桃者说,今天主要和你聊聊构建技术基础服务的事。
有了人了,有了组织架构了,很多人会心急火燎做业务,做产品,从而忽视为业务产品提供服务的基础设施,好,那就暂且搭一个草架班子吧,只要能够支撑产品运行就可以了。这个想法其实是有隐患的。

1、根基:技术基础服务
我们首先应该构建技术的基础服务,技术基础服务对于创业公司来说是根基,根基稳固了,至少能支撑 1-2 年的发展,然后再去迭代。如果产品发布后,技术服务跟不上,会对产品和用户带来非常大的伤害。
举个例子,当时微信和米聊几乎是同时发展的,产品功能类似,当时微信朋友圈、微信公众号平台都没有推出来,都是即时通讯工具。但是米聊在发展到几千万用户时就有问题了,由于它基础设施不够强壮,用户量增加到一定量级的时候,就会比较吃力,比如出现消息发不过去、信息接收不了等现象。而当时腾讯在用自己的能力全力支持微信业务,微信以流畅、稳定等特性赢得用户的认可,之后微信团队通过一系列创新,一骑绝尘,微信得以成为最大的国民 App。
2、如何构建基础服务
在创业初期如何构建基础服务呢?以下是我的一些思考:

第一,规划产品要有长远的打算。多长算长呢?按照现在得迭代速度,你至少要想明白一年内要做什么,做成什么样子,那么你现有的技术架构起码需要支撑 1-2 年的产品发展。
第二,成熟的技术要尽快引入。我们最早时后端技术用 PHP 构建后端服务,用 Lua 做了一些限流的策略。现在我们大部分后台服务是 Go 来写,因为我们看好 Go 优势和未来,Go 也足够成熟了。
第三,考虑同类型技术在不同应用场景下的使用。无论是招人还是技术选型,都要确定相同的技术或者是语言在不同场景下的应用; Java 可以做服务器端,也能做移动开发,Lua 可以写游戏脚本,也可以写高性能网关服务,等等。
第四,要重构代码,而不是重写代码。很多人会接手遗留系统或维护老项目,看到代码不舒服就想推翻重写,但是你不知道那些代码的上下文和原始场景,全部重写,风险非常大。我的建议是要重构而不是重写,重构是比较稳妥的方式。
第五,要把变化集中在某个领域,而不是散落在系统的各个地方。对于一些基础服务,我们可以将它放在某一个集中的地方,给全局提供服务,比如处理异常、记录日志和鉴权的功能,要求每位程序员都要自己实现不好,也容易出问题,系统服务应该具备这样的能力。这是架构设计上比较基础的原则之一。
第六,要做好 Code Review 和研发计划,反正项目都会延期。Code Review 是我们团队比较坚持的,代码要想上线,至少要有一个人看过你的代码,才能提交测试和最终上线。Code Review 是一个比较大的话题,国内很多团队在这一块做的不是太好,对 Code Review 非常敷衍。硅谷的 Google、Airbnb 等公司,他们的 Code Review 非常成功,已经形成了成熟的流程。Code Review 可以解决很多的问题,保证你的代码质量,让你的团队拥有很好的技术协作氛围等。
对于研发计划,肯定要做,但对于初创公司来说,没有必要做得那么精准,实际上也做不了那么精准,很多时候我们能够做出一个月相对精准的计划就不错了。
3、大公司和创业公司的不同

大公司自己造轮子,创业公司应该聚焦在自己的业务上。针对这个点,我推荐大家使用公有云,因为它对研发、运维包括系统的性能支撑已经非常完备了。公有云还可以提供大量的服务,如搜索、推荐、数据处理、安全等。尽可能使用公有云所提供的技术,而不是租机器自己搭服务。公有云及其服务会帮你解决初创公司非常多的问题。

上图是我司所用到的基础服务,包括自己搭建的基础服务、业务系统(极客时间)、使用的编程语言、各个终端技术等。我们仅在本地搭建了测试环境,其他服务都在公有云上。
你要构建一个产品,那么你应该做到心里有数,整个技术的前端、中端、终端需要用到什么样的技术服务。如果你之前没有做过产品,那么需要你在这方面花费更多的功夫。
关于这部分的话题,展开讲内容挺多的,限于篇幅,今天就聊到这里吧,你有什么想要了解的,可以在留言区提出来,可以后续再分享。
卖桃者说,明天见。
(编辑:成敏)