【SDCC讲师专访】58同城孙玄:一切抛开业务的架构设计都是耍流氓

本期我们采访的讲师是来自58同城高级系统架构师&技术负责人孙玄,他是58的技术委员会架构组主任,产品技术学院优秀讲师,代表58同城参与多次对外演讲。

58同城高级系统架构师,技术委员会架构组主任,产品技术学院优秀讲师,58同城即时通讯、C2C技术负责人,擅长架构设计,负责58核心系统的架构以及优化工作,满足百亿级系统吞吐需求。分布式系统存储专家,2007年开始从事大规模高性能分布式存储系统架构设计实现工作。 涉及自主研发分布式存储系统、MongoDB、MySQL、Memcached、Redis等。毕业于浙江大学。前百度高级工程师,参与社区搜索部多个基础系统的设计与实现。代表58同城多次参与QCon,SACC,DTCC,Top100等业界大会嘉宾演讲,并为《程序员》杂志两次撰稿。

CSDN:请简单介绍下您和目前的工作,以及关注的领域或技术。

孙玄:我们目前是58赶集集团的系统架构师,技术委员会架构组主任,IM&C2C技术负责人。工作主要是系统架构的设计与开发,技术团队的研发管理以及技术委员会工作。从2007年开始从事分布式存储工作,持续关注存储领域新技术,除此之外,关注更多是高可用、高性能系统架构的设计。

CSDN:您是如何走上技术这条路的?

孙玄:说来话长,自初中开始,对理工科更加擅长,本科和硕士期间学习的是计算机相关专业,一直和代码打交道,我个人对从事技术工作也非常的感兴趣,毕业后去了百度从事技术研发工作,2011年到了58同城,从事系统架构方面的工作。感谢互联网,使得技术的价值得到了极大的尊重。

CSDN:您对架构是怎样的理解?以及您对于架构师是如何定义的?他的能力,以及职责。

孙玄:脱离业务场景,空谈架构绝对是耍流氓。异常牛逼的架构设计,如果无法在业务场景中落地实施,也只是空谈。因此架构需要服务于业务,针对不同的业务场景架构设计也会不同,架构设计不必追求高大上,简而美的架构,若能满足业务发展需求,便是好架构。此外,好的架构不完全是设计出来的,随着业务量、请求量的增长,好的架构是演化而来的。架构师需要分析业务并具备较强的抽象能力,能够结合业务场景,设计合适的架构满足业务需要,做到架构设计既不保守,又不过度设计。架构师需要具备专业知识、专业能力、通用能力等三个维度能力。专业知识是基础所在,包含数据结构算法知识、业务知识等,专业能力包括系统架构能力、业务架构能力、开发能力等,通用能力属于软技能的范畴,包括沟通能力、学习能力、解决问题能力、创新能力以及项目管理能力等。除此之外,架构师需要对负责的系统了如指掌,线上出现问题能够快速分析定位解决,清楚系统潜在的问题并能提出优雅的解决方案。

CSDN:如何成为一名优秀的、软硬件兼备的架构师?

孙玄:成为一名优秀的、软硬件兼备的架构师,广度和深度都有要求,难度是非常大的。严格来讲,我本人从事架构设计工作更偏向于软件方向。术业有专攻,对绝大数同学来说,成为某一方向的优秀架构师,更容易达到。当然对于精力充沛并且天赋高的同学,优秀的全栈架构师也不是个事儿。

CSDN:可否请您简单介绍一下58同城典型技术架构及演变?

孙玄:58同城作为中国最大的生活服务平台,涵盖了房产、招聘、二手、二手车、黄页等业务,在每一个业务类别里都能看到方便用户交流沟通的58帮帮。选取了58帮帮作为58同城典型技术架构的代表,58帮帮自上线以来,随着用户量、数据量以及产品方向的发展,58帮帮在技术架构上持续的演变。58帮帮技术架构演变分为四个阶段:阶段一:传统的IM架构我们如何设计?如何满足千万在线的性能需求?阶段二:从传统IM到商家管理平台,58帮帮的架构如何演变?阶段三:从商家管理平台到移动营销工具,58帮帮的架构又如何演变?阶段四:如何打造满足58帮帮的移动推送系统。

阶段一:58帮帮架构采用了五层高扩展性架构设计:接入层、逻辑层、路由层、数据访问层、数据层,其中接入层负责海量客户端的接入、连接整合以及简单的攻防处理;逻辑层负责整个58帮帮业务逻辑的处理;路由层处理和用户一次登录session相关的数据(比如:用户在线状态[在线、离开、隐身],登录IP等),这部分涉及的数据变化非常快,没必要固化,直接存储在内存中;数据访问层统一屏蔽了底层的存储引擎,上层不用关心实际的存储是RDBMS或者NoSQL或者其他的KV存储引擎,对上层提供友好、统一的访问接口,封装原子逻辑;数据存储层是58帮帮数据的固化存储系统,根据数据的特点使用了RDBMS(MySQL)、NoSQL(MongoDB)等持久化存储,并通过分布式缓存(Memcached、Redis等)加速查询。

阶段二:所有第三方请求都会通过58帮帮服务端中转,58帮帮服务端继续调用第三方业务接口,即使下游服务策略变动、业务变动,我们只需要58帮帮服务端做相应的调整,对58帮帮客户端完全透明,从而避免了客户端升级代价大的问题。

阶段三:从产品层面看,我们接入了更多的分类业务,这部分业务在技术架构上我们采用了更加轻量化的WebService服务,客户端使用HTTP的方式调用58帮帮WebService服务,WebService服务再调用下游服务。58帮帮最终架构分为两个部分:IM相关(用户、好友、消息等)我们在技术架构上采用了TCP长连接的方式,保证了消息的及时到达;第三方业务部分我们采用HTTP短连接方式,在技术层面减少对长连接的依赖,在满足产品功能的同时,用户体验更好。

阶段四:58 帮帮推送方案没有选择从零开始的自建方案,我们采用了第三方移动推送平台和自主研发高性能Provider的方案,满足每天百亿量级的吞吐量,并通过动态组合和扩展的方式,结合离线的移动推送数据分析,不同手机使用不同的推送策略,针对性的优化,从而提升到达率。

CSDN:一切抛开业务的架构设计都是耍流氓,您是58同城即时通讯、C2C技术负责人,负责过58核心系统的架构以及优化工作,在这些项目和系统的设计与实现过程中,能否分享下您是如何结合业务来考虑架构设计的?从技术角度上,58同城如何应对高并发用户请求?

孙玄:“一切抛开业务的架构设计都是耍流氓”,我个人深以为然!因此结合业务考虑业务架构设计时,需要清晰的认识到产品发展阶段不同,架构是完全不同的。以58同城从零研发新产品开始,产品的初期,技术层面我们需要快速搭建起原型系统,以供产品快速试穿和迭代,这个阶段技术架构可以“简单粗暴”,借助类似开源LAMP的MVC架构。随着业务的发展,初期研发的系统服务能力到达了瓶颈。在架构层面,可以通过Scale Up或者Scale Out的方式扩展搞定。当业务发展到一定量级后(比如千万级别),初期的系统图不管如何扩展都无法满足,此时技术架构层面,我们需要继续优化,由原来的简单的MVC架构,我们优化成接入层、逻辑层、数据存储中间层、数据存储层等架构形式,每层的架构采用无状态设计,可以自由的扩展,以满足业务增长的需求。业务继续发展,数据存储首先会到达瓶颈,在数据存储的架构方面,我们引入分布式存储或者类似RDBMS的分库分表方案解决。

58同城每天处理千万级的用户请求,面对高并发用户请求,我们首先对海量用户请求分流处理,然后采用多线程和异步处理的方式并结合超时机制解决。

CSDN:从架构的角度,QQ、微信与58同城的即时通讯系统有哪些不同?

孙玄:58同城的即时通讯系统采用了分层解耦的架构,在每层中我们采用无状态的设计,每层子系统可以自由动态扩展,以满足请求量增长需求。在每层中通过子系统冗余部署,消除单点,保证了系统的高可用性。每层之间的调用设计成了动态负载均衡方式,当被调用下层某台子系统故障时,上层子系统调用自动动态切换到可用服务节点,继续完成用户请求操作。单机线上支持50W+的同时在线用户,单机线上达到了3w+QPS,以满足千万级用户同时在线的需求。与QQ、微信相比,58帮帮除了IM功能外,我们还具备了第三方业务接入的功能,采用了WebService和HTTP短连接的架构方式,满足业务快速接入,并做到用户体验更好。

CSDN:这些年来新语言(旧语言新用)或新技术层出不穷,你看好哪些新语言(技术)?为什么?开发者应如何应对这种新技术浪潮?以及您有什么高效的学习方法分享?

孙玄:编程语言孰好孰坏一直是技术界争论的话题,仁者见仁智者见智。C/C++/Java等在编程语言排行榜中,依然占据很高的排名。同时新语言也层出不穷:golang、swift等。新语言的推出都是解决了市面上已有语言的部分痛点,新的编程语言能够大规模使用,取决于很多因素:是否真正解决了其他语言的痛点、开发效率是否高效、是否有配套的生态系统(类库等)等等。我个人比较看好swift语言,随着配套生态系统的健全,swift占用率会越来越高。开发者对新技术要抱有持续学习的态度,新的技术出现,调研讨论,学习先进的思路,在线上小范围实践尝试,成熟稳定后,线上大规模使用。与时俱进,也不必操之过急,新技术出现到大规模使用,往往需要经过较长的时间。学习任何技术,我个人认为比较高效学习方式,一定是勤于思考,不断的实践,实践出真知。

CSDN:您现在所负责的研发团队人员搭配是怎样的?

孙玄:好的研发团队,人员梯队很重要,我负责的研发团队重视人员梯队的建设。团队具备架构师、资深工程师、高级工程师、工程师等。在技术层面,架构师负责整个团队的架构设计工作。资深工程师参与架构设计,并主导具体实现,和低级工程师一起编码落地。除此之外,好的团队建设,工作氛围很重要,通过定期的Team Building、定期分享交流、不定时的聚餐腐败等方式营造舒适的工作氛围,让大家劳逸结合、工作时能够全力以赴。

CSDN:您现在是如何安排自己的新技术学习、研发团队管理、编程、生活等时间的?

孙玄:随着负责业务范围增加,时间管理就变得非常重要,平时工作时间更多的是处理架构设计、团队管理工作。8小时工作外,持续的学习新技术,时间允许情况会下,完成简单原型,在线上做些尝试。周末完成工作后,会和家人在一起。

原文发布于微信公众号 - 架构之美(beautyArch)

原文发表时间:2016-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DevOps时代的专栏

DevOps:你有问题,乐神有答案

前言: 周三晚上,被小伙伴们热情的称作"乐神"的 DevOps专家张乐 为我们带来了《2017年DevOps现状调查报告》解读的线上语音分享,深入讲解了IT效能...

1775
来自专栏即时通讯技术

写给小白的实时音视频技术入门提纲

这是由一篇我的演讲稿整理出来的文章,目标读者是对实时音视频开发感兴趣但是又不知道如何下手的初学者们,希望把我的经验分享出来,对大家有所帮助。

2302
来自专栏WeTest质量开放平台团队的专栏

腾讯WeTest-舆情监控最新版本揭秘

腾讯WeTest舆情监控平台作为国内一流手游测试平台的王牌工具,在过去的一年中帮助无数游戏团队了解各第三方市场评分,掌握游戏和竞品的口碑情况和效果,为团队了解目...

1353
来自专栏SEO

「知识」8个改变游戏规则的SEO趋势

2947
来自专栏韩伟的专栏

如何打造顺畅的开发流程——应对需求变化

破解软件项目管理难题,从改变看待问题的方式开始。开发流程根据不同的项目应有不同的变化,但是团队中每个角色的责任应该是相对固定的。 一 既然屁股决定大脑,就让屁股...

2854
来自专栏大数据文摘

深入浅出——大数据那些事

24010
来自专栏EAWorld

企业如何按需选择元数据管理工具?

在各种数字化的影响下,将企业环境中的各种元数据整合利用至关重要。对于企业来说,选择适合自己的元数据管理工具将能最大化发挥元数据的作用,以协助企业完成在数据方面的...

1462
来自专栏SDNLAB

网络虚拟化是多云控制的关键

现在很多IT企业在云计算时代逐渐失去对正在开发和部署在公有云中的应用程序的控制,形成这种现象的原因是每个公有云对网络来说都是一个孤岛。 ? 网络虚拟化(NV)o...

3528
来自专栏WeTest质量开放平台团队的专栏

Hi,腾讯 WeTest 联合 Unity官方打造了新的性能分析工具 UPA

早在2016年ChinaJoy开始,WeTest曾受邀出席过Unity中国的线下性能场的活动,介绍我们的自动化框架和王者荣耀的故事。当时的活动很成功,期间我们收...

1641
来自专栏罗超频道

QQ订阅号来了,有什么值得关注的?

几个星期前,我收到了QQ订阅号的内测邀请,现已入驻QQ订阅号平台(不叫公众平台)。从周边朋友的反馈来看,大家对QQ订阅号平台还是很重视的,很简单,手Q活跃用户大...

3489

扫码关注云+社区