2019独角兽企业重金招聘Python工程师标准>>>
故事的开头
如果你一毕业参见工作就进入了大型互联网公司,那么恭喜你了,你将体验到大公司深厚的技术底蕴以及企业文化。
如果你进入到了一个初创的中小型企业,那么也恭喜你了,你将可能体会到从0到1的那种激情和完整的架构演变带来的惊喜。
经过漫漫长路,当你也成长为一名架构师,意气风发、金光闪闪的时候,让你操刀一家初创公司,你会怎么做呢?激情满满之下,你会怎么思考呢?
下面我以主视角带你来推演一下这个进程。
摆正角色
对于一家互联网初创公司来说,创始人的情况可能有几种。一是自己努力+幸运挣到了第一桶金,心中有梦,开始创业;二是赶上投资热潮期,加上自己教育背景好,聪明又情商高,心中有梦,开始创业;三是家庭助力良多,儿孙子侄出来闯荡,心中有梦,开始创业。
这就可以看到资本的重要性呀,心中想:我什么时候挣到自己的第一桶金呢?
不管怎么说,创始人是公司的灵魂,是基石。有了一个雏形之后,就需要找到共创大业的伙伴了,我以前和创始人有过小交流,他找到了我当技术负责人,梦想说了一堆,薪金也很有竞争力,我决定加入新公司。
经过长年的岗位磨练,我有这样的思考:技术是为业务服务,业务是为商业服务,商业是为创始人们...哦,不,为大众和世界人民服务。
那么带着这样的思考,第一步该怎么开始呢?
“天山”阶段
未来是不可测的,最好的方式就是先做然后看反馈,有了正反馈就继续投入资源;如果被现实教育,最好能调整方向。如果用户有这个需求,创始人也眼光独到,一般来说第一步都会是正反馈。只是看反馈的持久性和爆发性了。
经过和创始人的讨论,公司前期的投入会比较紧张,第一步是先把产品做起来。
人员紧张,时间紧张,想了想,分布式系统那一套还是先简化一下,只选择基础的技术栈,大家先干起来。
申请完域名之后,我选择的基础服务器配置如下:
- 测试机:8核 64G 放在公司自己买的服务器
- 正式机:16核 64G 使用云服务器
运维方面的选型大概是:Centos7+Nginx+Docker+Jenkins+云监控。Docker中运行MySQL、Redis、RabbitMQ、ElasticSearch。
后端和前端的技术选型大概是:Spring Cloud、Freemarker、Vue.js、HTML5。
我们会有自己的一个网站,还有自己的APP,所以也会有一个移动端的团队,分别选用Kotlin和Swift语言来开发。
这时候的团队有2个Java后端工程师、一个前端工程师、一个Android和一个IOS工程师,有一个产品经理和一个助理,2个UI设计师,加上我总共10个人。
经过两到三个月的奋战,我们做出了初版的产品,内部代号为“天山”,推广到市场。
“秦岭”阶段
由于精准的产品定位加上独特的营销手段,半个月后产品获得了50万的用户,两个月后猛增到300万用户,这时候的QPS为400左右。产品还是不停的迭代,这一大周期在内部代号“秦岭”。
用户的指数级增长对服务器的性能是很大的考验,运维团队对整体架构做出了调整。
300W用户,活跃值是20%,放在互联网公司中只能算是中等水平,这时候由于前期投入成本巨大,所以还没有盈利,不过已经接到几个VC的投资意向,老板正在洽谈。
对应的技术团队此时也开始扩充人员,原先的单体应用需要拆分成不同的业务模块,因为创立时期就上了微服务,拆分完业务模块,分了业务团队之后,微服务的东西也该扩展一下了。
此时在团队管理和架构管理上会有几条原则:
- 每个团队不超过16个人,吃自己的狗粮,每个团队负责一块业务,按职责分工,不是按技能分工。这就要求每个人都是全栈
- 所有团队的服务模块都要通过接口的形式提供出去,比如RESTFul
- 团队的通信都要通过这些接口,除此之外没有其他的通信方式,其他通信方式一概不允许
- 所有的服务接口都必须设计成是对外开放的,必须做好规划和设计,便于未来把接口开放给全世界程序员。比如用好服务网关和保证SLA
- 所有成员必须深度参与业务,理解业务。团队间都用领域对象来沟通
我主要精力呢,也是放在招聘和团队管理上,两个月要组建3到4个团队,压力还是很大的。
提一下架构方面的变迁,缓存和数据库暂时用云服务商提供的IaaS基础服务,分布式缓存+分布式数据库来解决基础设施层访问压力的问题,服务层用到4台云服务器来支撑,应用层用到2台云服务器来支撑。因为网站是偏电商类,所以图片会非常多,这时需要分布式存储系统和CDN等基础服务,也暂时用云服务商提供的IaaS服务。
随着服务的变多,调用关系开始变得复杂,没有一张全局鸟瞰图和链路追踪,出现问题的时候会变得非常麻烦。微服务的自动化运维此时显得非常重要,开始着手做这方面的工作。
“太行”阶段
“秦岭”上线半年后,业务突飞猛进,已经有了2000万的用户,PV已经有一亿以上,QPS达到了30000以上。内部的业务模块变为了20个左右,比较核心的业务服务有:会员中心、支付中心、订单中心、评价中心、物流中心等。
公司进入到高速发展期,“秦岭”之后,内部项目代号为“太行”。
“太行”阶段,微服务已经提供给我们了灵活性和可拔插性,现在团队主要精力放在了系统的高可用和稳定性上,这就需要一套高效的自动化运维平台。经过半年的奋战,我们阶段性的完成了以下目标:
- 应用整体全栈监控搭建完毕。从基础层的服务器到中间件层的监控,从应用层的各种数据收集到客户端的性能指标分析都一应俱全。有了全栈监控,有两层意义:一、解决线上问题变得快捷;二、为架构师提供了全景信息,更容易做出决策,比如服务器的增减
- 服务调度系统搭建完毕。包括服务关键程度,服务依赖关系,服务发现,版本管理,服务生命周期管理等,有了这些,对服务进行查看变得清晰,管理变的方便且优雅
- 流量调度系统搭建完毕。包括服务熔断、降级、保护等,也包括流量的控制、异地多活,还包括流量的管理,如协议转换等。流量调度的部分自动化构建了一个如水般丝滑的后台服务,灵活的配置体系大大提高了系统的稳定性和应急处理能力
“贺兰”阶段
“太行”阶段两年后,网站整体用户达到了2个亿,日活用户有4000万。这时的公司已经有了大量的现金,也开始考虑新的增长点,收购了不少其他创业公司来补充自己的短板。
此时公司的核心赢利点还是在电商业务,其他创新业务也百花齐放,有的甚至开始狂飙突进。
此时的我作为技术团队负责人,关注的点在于全局的技术战略了。主要的精力放在大数据、人工智能、人机交互、物联网的思考上,同时怎么样招揽到顶级人才,怎么样从工程到科学,怎么样用技术来改变世界也会成为日常工作和思考的一部分。
总结
纵观网站从0到1,起步阶段以业务为主,发展阶段以基础设施建设为主,高峰期以大型工程构建为主,L型新常态下,以整理旧世界并探索新世界为主。
每个阶段都有大量的东西需要学习,每个阶段也都要突破自己,真是漫漫长路,江湖路远,也唯有不断精进,才能hold住局面。
好了,以上我们一起体验了一把从初级架构师到CTO的神奇旅程,不知道你对此有什么思考或建议呢,欢迎讨论!
文中的内容参考了大神们的智慧,罗列如下:
- 大型网站技术架构
- 明眸善睐系列--企业IT架构转型之道:阿里巴巴中台战略思想与架构实战
- 大型网站系统与Java中间件开发实践
- 左耳听风 洞悉技术的本质(强烈推荐,干货满满,构建分布式系统基础设施的思路来自于这个专栏)
- 阿里巴巴CTO张建锋在2017云栖大会上的演讲