现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

孙玄:一切抛开业务的架构设计都是耍流氓

2015-12-27 10:47 工业·编程 ⁄ 共 3922字 ⁄ 字号 暂无评论

58同城即时通讯、C2C技术负责人,负责58核心系统的架构以及优化工作。分布式系统存储专家,2007年开始从事大规模高性能分布式存储系统架构设计实现工作。涉及自主研发分布式存储系统、MongoDB、MySQL、Memcached、Redis等。前百度高级工程师,参与社区搜索部多个基础系统的设计与实现。毕业于浙江大学。

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小时工作外,持续的学习新技术,时间允许情况会下,完成简单原型,在线上做些尝试。周末完成工作后,会和家人在一起。

给我留言

留言无头像?