玩多多单泽兵:面对技术挑战,从零开始,绕过多个坑,掌握搭建方法

原创
存储 开发工具
技术选型是做什么的?一个网站会分成很多层,技术选型不外乎是确定某一层到底用什么样的技术,虽然看起来现在有好多技术的标签,有React、JS、Spring、java,太丰富了,跟做玩具租赁一样,我要成功去找到我最需要的那些工具。

【51CTO.com原创稿件】在WOT2016移动互联网技术峰会平台技术专场,玩多多CTO单泽兵先生给我们带来了《初创企业之断舍离》的精彩演讲,与参会的朋友共同分享了初创公司做技术转型的时候遇到并绕过的坑,学到并掌握的方法以及创业者的大不同。

  一、现在的孩子正在经历着一个特别糟糕的时代

  谈到为何会选择做玩具租凭这一行业,单泽兵先生表示,现在很多小孩正在经历着一个特别糟糕的时代,他的糟糕不是什么都没有,相反是他们有的太多。现在的小朋友玩的玩具好多,从床铃到车,各种摇摇车、各种自行车,各种玩具,应有尽有,但是他们真的玩得过来吗?他们真心从这个玩具里获取到他们想要的东西了吗?其实不完全是,因为孩子的父母都经历过物资匮乏的时代,所以当小朋友抱着父母的大腿在玩具柜面前说我要这,我要那的时候,家长都会毫不犹豫给他买了,导致了什么结果呢?家里面各种玩具堆成了山。

[[173092]]

  实际上,现在很多小孩子的很多玩具,大都用塑料盒封起来的,大多数都不玩了,就放在那看。为什么呢?他已经四岁半的,一岁、两岁的玩具肯定就不会去玩了,就一直放在那。这些玩具送朋友不好意思,如果不送又觉得可惜,所以我们就提出一个想法叫玩具租赁,以租代售,除了陪伴类的玩具,除了必须的玩具,其他的玩具,不同的玩具,常识性的玩具都可以通过租赁来实现,更小朋友更多的尝试机会。除了租赁以外,还提供上门安装服务,帮你讲解这个玩具怎么玩,甚至陪你的小朋友一起去把这个玩具可能性达到最高。

  这个业务看起来貌似很简单,是一个典型的电商业务,但实际上技术挑战非常大。

  二、面对技术挑战,从零开始,逐步搭建

  在创业初期,如何搞定技术难点,对玩多多提出来较大的挑战。单泽兵先生在演讲中提到,像Twitter、Facebook、Linkedin以及国内很多大公司的架构图特别复杂,根据不适合我们这么小的业务。我们反复思考了系统架构是干什么的?总结出一些经验。我们认为,系统架构对外和对内的职责不一样,对外要解决三高(高可用、高并发、高可扩展),当用户数量增长以后,架构可以稳定支撑并不受影响,当业务有一些变化能够准确扩展或者顺应业务的变化需求。对内是对研发人员,要能够简单理解架构,如果一个架构让所有研发人员感觉特别复杂,效果就会下降。

  上图是我们认为一个最初级的网站,有Service层,有前端。前端通常是基于浏览器的,是一个Browser-based HTML Rending,只要把页面based HTML返回给浏览器,就会正常去渲染。服务端刚开始也很简单,通常会MVC,就是View、Contro,还会把Service单独拎出来,就是逻辑不能写在Contro里,也不能写在Moden里。底下是持久层和第三方API,现在大家开发都会遇到好多API,要跟微信打交道,要跟短信打交道,要跟各种统计服务打交道,都是需要第三方API,会专门分成一层。

  除了浏览器访问之外,初创公司的流量主要来自哪儿?答案肯定是微信。要把应用放到微信里,一个HTML放在微信并不容易。另外,除了微信之外,APP、百度应用或者微博应用也可能会应用它,前端可以做一些,然后拿出来把前端分成DOM Contro和Client Model,再往下走前端就相对稳定了。在服务端,也会分成多个Service,不同的Service解决不同内容。提到SOA,所谓面向Service,这个并不是全部。再往下会变成除了SOA以外会用业务Service。这样就会把业务Service和平台Service分开,平台Service是更底层,更偏数据存储和逻辑处理,而业务Service是更多面向业务层面的分层,这就是所谓微服务的架构。

  回头来看,技术选型是做什么的?一个网站会分成很多层,技术选型不外乎是确定某一层到底用什么样的技术,虽然看起来现在有好多技术的标签,有React、JS、Spring、java,太丰富了,跟做玩具租赁一样,我要成功去找到我最需要的那些工具。

  另外,在技术选型前端应用和数据库层应该分别怎么考虑。做前端核心考虑几个点:一个是复用性,我们的应用大部分运行在微信里,不排除会在百度应用、新浪微博等等平台上使用,前端的复用性非常重要,如果前端做好了,在新建一个APP时非常容易,而不需要做太多事情。二是复杂度,现在做一个前端功能很费劲,如果特别复杂会陷入一个坑,前端留得不够的时候怎么办?JS已经完全成为一门真正独立的全站语言了,如果后端开发和其他开发不能及时补位,太复杂就会导致所有业务逻辑都会压在前端,所有展示层任何一个改动都需要前端,就会形成瓶颈。三是SEO,大家可能觉得这个词有点老,当真正创业时就会发现任何一个流量、一个PV都是特别宝贵。我们之所以在百度移动端搜索排名第一,是因为想了一些方法来做SEO,但是SEO和JS冲突,因为用JS渲染出来的页面都是动态的。比如打开一个以纯JS做的网站,像Gmail打开一看只有一行代码,这时候百度、其他搜索引擎来抓就不解析了。我们跟百度进行深入交流,现在解析性能太差不搞这事,怎么办?讨论了很多方案,最后决定前端用React、JS来做,相对比较成熟,而且语法也比较自由。

  后端的关注点,主要在语言选型是特别纠结的事,玩多多的团队大部分来自于赶集网。赶集网是基于PHP开发的,虽然 PHP是公认的最好的语言,可是PHP有自己的问题,当规模做大了以后怎样做异步、怎样做分层、怎样做符号,怎样跟异构语言进行通讯,在赶集网遇到很多类似的问题。我们曾经想过把某些部分进行迁移,但后来发现成本太高,做起来很痛苦。另外,在做一个新业务,第一要考虑今后的扩展到底是什么样的,如果完全不能扩展,只能看起来简单,未来也会踩到坑。因此,在衡量以后我们选择了用Java做服务端。在框架选择、可维护性、今后服务可拓展性上确实有很多优势。

  持久层。我们在选择持久层做的时候毫不犹豫现在了mysql,但是mysql是自建还是云端,纠结了一段时间,用云端的好处是可以自动备份、自动扩展,性能也比较好。如果是自建,因为所有服务是跑在云端的,自建就意味着在云主机里要开mysql使令,与选择云主机有可能是一个普遍硬盘,而且云主机存储本身没有安全保障,坏了业务不能跑了,最后还是选择了用云端mysql来做持久存储。另外,redis也有一个坑,我们redis用量并不多,主要是在缓存和一些性能比较薄弱的地方,进行队列处理或者缓存处理的业务,发现用某云的redis会少一些命令,不知道是为了安全性,还是为了复杂度降低,少一些命令应用会发现在本地开发完全正常,一个问题都没有,一旦部署到云端发现跑不起来,然后就看日志找了一堆问题,发现官方解释redis不支持Cloud Foundry命令,不能用,只好绕,跟Cloud Foundry相关的逻辑全干掉,重新部署。

  选择了技术结构,回顾和反思,在做技术选型先考虑的几个点:一个是简单,二是要是快,三是用对人。

  三、带着小小的梦想,让世界能够一点点变好

  关于创业,创业者是一群什么样的人?单泽兵先生认为,他们说不甘平凡,不甘平庸,心里有一点小小的梦想,这小小的梦想哪怕是改变一点点,让这个世界能够有一点点变好,他就会觉得很开心。

  为了这个梦想,要吃很多苦,要被人质疑,要一周工作七天,这是所谓的创业者。创业者是一个长跑的过程,,没有丰厚的薪资,大公司的诱惑,没有丰厚的福利,没有平台支持,要离开舒适区。

  那么,为什么还有那么多人创业?单泽兵先生认为,创业给人带来的变化有三点:第一个是韧性,以前在公司做事,搞不定有老大担着,现在所有事情到你手里,必须有结果,没得选。创业者遇到问题后就必须得解决,所以就会磨练韧性。二是感恩,以前在大平台里做事情,有很多平台资源去调用,能够用的资源更多。但初创公司是完全不一样的,因此要珍惜你身边的每一个人,他都有可能在你创业路上给你帮助。三是无畏,当你走入创业者当中时,就会发现没有任何事情搞不定,所有事情都会有解决方案,不是无解的。经历过这些后,很多挫折你也不再担心、不再害怕。

  “本文由单泽兵先生于2016年8月,在WOT2016移动互联网技术峰会平台技术专场《初创企业之断舍离》主题演讲整理而成。WOT2016大数据峰会将于2016年11月25-26日在北京粤财JW万豪酒店召开,届时,数十位大数据领域一线专家、数据技术先行者将齐聚现场,在围绕机器学习、实时计算、系统架初创企业之断舍离构、NoSQL技术实践等前沿技术话题展开深度交流和沟通探讨的同时,分享大数据领域最新实践和最热门的行业应用。了解WOT2016大数据技术峰会更多信息,请登陆大会官网:http://wot.51cto.com/2016bigdata/”

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:张诚 来源: 51CTO.com
相关推荐

2017-03-21 10:24:03

玩多多单泽兵WOT

2015-10-15 14:16:24

2019-12-17 09:42:11

运维架构技术

2021-05-06 11:42:07

运维架构技术

2024-02-23 09:00:00

编程语言编译器工具

2019-09-23 19:30:27

reduxreact.js前端

2023-11-16 08:53:05

NumPy库Python

2015-08-28 09:26:59

2015-08-07 09:29:27

2020-07-02 15:32:23

Kubernetes容器架构

2019-01-18 12:39:45

云计算PaaS公有云

2018-04-18 07:01:59

Docker容器虚拟机

2015-11-17 16:11:07

Code Review

2016-11-02 14:18:45

搭建论坛Flask框架

2017-09-13 14:01:51

数据库MongoDB数据库即服务

2023-12-27 08:47:41

PrometheusLinux架构

2017-03-14 14:04:24

Python机器学习

2010-05-26 17:35:08

配置Xcode SVN

2018-09-14 17:16:22

云计算软件计算机网络

2016-08-08 10:54:01

点赞
收藏

51CTO技术栈公众号