【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 条评论
登录 后参与评论

相关文章

来自专栏java学习

Java学习过程中的疑难疑惑解答

大家在学习上?工作上有什么问题不懂的?可以留言把你的问题留下来 然后我会把大家所有的问题整理在一起发给大家去解答! 比如说:我学历低以后找工作难不难呀? 反正就...

2758
来自专栏互联网杂技

经验分享 | 如何更好地推动产品及交互需求顺利落地?

我很喜欢这样的一句话:“在做设计的时候,最大的阻力不是用户相关问题,而是内部的认知、利益点、看待事情方式的不一致。”;尤其是在推动产品及交互需求落地的过程中,感...

30111
来自专栏BestSDK

云适配Enterplorer SDK助力海信集团,3跨平台,维护轻省

近日,云适配与海信集团达成合作。云适配将为海信集团提供移动化技术支持,助力移动化办公发展,提升用户高效便捷办公新体验。 ? 移动信息化的发展、智能设备终端的日益...

3475
来自专栏人称T客

CIO们如何评测移动应用平台(MEAP)的优劣?

目前来看,移动应用平台不但包括MADP还包括MAM、MDM等管理模块。所以在功能方面,要包括移动开发功能与移动管理功能,一个相对完整的MEAP平台应该包含以下功...

3528
来自专栏人称T客

移动OA研究:Html5将成移动开发主导 勿忽视微信的影响

昨天我们分析企业什么导入移动OA?他的目的和意义,今天我们来分析未来企业移动开发模式。 记得在去年底的时候,我参加了一场CIO的研讨会,我问他们最大的困惑在哪儿...

3154
来自专栏FreeBuf

2017年Google Android安全报告:Android和iOS一样安全

Google发布了Android安全报告,这份56页的报告是为了让你了解Android系统的安全性,让你知道Google竭尽所能阻止用户安装有害的应用。 这份报...

3605
来自专栏云市场·精选汇

掌握网站制作要点 让你网站成为行业佼佼者

如何自建一个网站,在互联网时代展示企业、个人的业务或产品?在如今的互联网经济的现状下,又该如何让自己的网站成为行业内的佼佼者?这些都是需要不断付出努力和迭代更新...

1.3K8
来自专栏java一日一条

糟糕的程序员面试

“谷歌式”面试真心是让人又爱又恨,它糟糕透了:好的应聘者落选,坏的应聘者背背答案就能通过,呵呵。

632
来自专栏PPV课数据科学社区

年底跳槽好福利,数据挖掘工程师面试指南

数据挖掘领域是一个独特的行业,通常的招聘方法可能不大适用于本行业的特点。在招聘一个合格的数据挖掘工程师时,公司一般关注以下三个方面: 1、他聪明吗? 聪明意味着...

26310
来自专栏EAWorld

数字化云平台架构与实现

大家好,我是王葱权,今天给各位简要分享一下普元数字化云平台(the Platform)的架构与实现的相关内容。 ? 今天分享的内容主要有这几个部分: 首先给大家...

34710

扫码关注云+社区