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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介:

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

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

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

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

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

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

在创业初期,如何搞定技术难点,对玩多多提出来较大的挑战。单泽兵先生在演讲中提到,像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/”

作者:ZC
来源:51CTO
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
209
分享
相关文章
《深度剖析:网络开发中AI实现动态内容生成的挑战》
在数字化浪潮中,AI与网络开发的融合带来个性化、实时性体验,但也面临诸多挑战。技术层面包括模型训练优化难、实时响应矛盾和多模态融合复杂;内容质量方面存在准确性、独特性和可信度问题;法律伦理上涉及版权争议、隐私风险及算法偏见。要实现广泛应用,需技术创新、法律规范和伦理约束。
99 19
《AI驱动的网络安全工具,能否让传统手段“下岗”?这篇文章来告诉你!》
在数字化时代,网络安全至关重要。传统手段如防火墙、IDS和防病毒软件虽稳定可靠,但在应对新型复杂攻击时显现出局限性。AI驱动的网络安全工具借助机器学习等技术,能实时分析海量数据,快速识别未知威胁并自动化响应,但其依赖高质量数据且成本较高。未来,传统与AI工具将相辅相成,共同构建多层次的安全防护体系。
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
70 4
解锁AI潜力:让开源模型在私有环境绽放——手把手教你搭建专属智能服务,保障数据安全与性能优化的秘密攻略
【10月更文挑战第8天】本文介绍了如何将开源的机器学习模型(如TensorFlow下的MobileNet)进行私有化部署,包括环境准备、模型获取与转换、启动TensorFlow Serving服务及验证部署效果等步骤,适用于希望保护用户数据并优化服务性能的企业。
234 4
探索后端技术:构建高效系统的秘诀
在当今信息技术飞速发展的时代,后端开发作为软件架构中的核心部分,其重要性不言而喻。本文将深入探讨后端技术的各个方面,从基础概念到高级应用,帮助读者全面了解后端开发的世界,揭示构建高效系统的秘诀。
颠覆传统!Python Socket编程新思维,基础与进阶并重,打造卓越网络能力!
【7月更文挑战第25天】在数字时代,网络通信至关重要,Python的Socket编程简化了这一复杂领域,使初学者也能轻松上手。通过Python的`socket`模块,我们能快速搭建服务器与客户端,实现数据交换。示例代码展示了如何创建、绑定及监听Socket,以及收发消息。掌握基础后,可利用asyncio库探索异步编程,提升通信效率,处理多连接。Python的Socket编程,结合传统与现代技术,助力开发者在网络通信领域取得非凡成就。
115 0
深入探究软件自动化测试中的挑战与解决策略
【5月更文挑战第18天】随着软件开发周期的不断缩短和发布频率的增加,传统的手动测试方法已无法满足快速交付的需求。因此,软件自动化测试成为确保产品质量和加快上市速度的关键工具。然而,自动化测试的实施并非没有挑战。本文将探讨在实施自动化测试过程中常见的问题,如测试用例的设计、维护成本、框架选择和技术更新等,并针对这些问题提出有效的解决策略,以帮助组织提高自动化测试的效率和效果。
|
11月前
|
后端技术优化与应用研究
后端技术优化与应用研究
86 1
解释区块链技术的应用场景、优势及经典案例
解释区块链技术的应用场景、优势及经典案例
647 0
深入探究软件自动化测试中的挑战与对策
【4月更文挑战第2天】 在软件开发的生命周期中,测试环节是保障产品质量的重要步骤。随着敏捷开发和持续集成的流行,自动化测试成为提升测试效率和质量的关键手段。然而,实施自动化测试并非没有挑战。本文将探讨自动化测试过程中常见的问题,包括测试用例设计、维护成本、框架选择、以及跨平台兼容性等,并针对每一挑战提出相应的解决策略。通过实际案例分析,本文旨在为软件测试工程师提供实用的自动化测试优化指南。
111 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等