天问

蘑菇街技术架构的演进之路

2016年11月18日-20日,由CSDN重磅打造的年终技术盛会,SDCC 2016中国软件开发者大会将在北京举行,大会面向国内外的中高端技术人员,聚焦最前沿技术及一线的实践经验,从而助力企业的技术升级和改造、全面提升技术人员的综合实力。会前我们有幸采访了架构演进专题的卢鹏程老师:  

 

蘑菇街平台技术架构师卢鹏程

  卢鹏程,蘑菇街平台技术架构师。广泛技术爱好者,目前专注于监控、日志、存储的系统架构,热衷于高性能分布式系统设计。广泛涉猎在线会议、远程控制、智能家居、虚拟设备、Windows/Linux内核、网络安全、编译器、Client/WEB、Android移植、浏览器等多类技术。   CSDN:请先和大家介绍下您和目前所从事的工作以及关注哪些技术领域? 卢鹏程:大家好,我是卢鹏程,蘑菇街平台技术架构师,花名三刻。 目前专注于监控、日志、存储的系统架构,关注高性能分布式系统、智能运维等领域 CSDN:谈谈您为什么会选择加入蘑菇街? 卢鹏程:在传统领域工作了10年后,非常想在互联网领域接受下挑战,体验下飞速发展的技术下的激情,寻求下一个突破。很幸运,蘑菇街给了我这个机会。 CSDN:聊聊目前蘑菇街的主要业务及团队规模? 卢鹏程:美丽联合集团在“让一半人类更幸福”的使命下,运营着蘑菇街、美丽说、MOGU、淘世界等业务。目前整个技术团队已经从14年我刚来时的两百人左右,发展到了目前的七百多人。 CSDN:请您介绍一下蘑菇街的系统架构?这个架构里面使用了哪些开源的技术? 卢鹏程:从网络服务层面来讲,主要是主流的LVS + Nginx + Tomcat。谈到技术架构,主站系统主要还是PHP + SOA + JAVA,辅助以监控、日志、中间件、DevOPs等一些外围系统或平台。 开源技术被广泛应用,例如Hbase、spark、storm、Kafka等,以及目前我比较关注的Redis、Scylladb等等。 CSDN:蘑菇街是从社交转型到电商的,以及到现在这么大的体量,可以谈谈蘑菇街的架构经历了哪几次比较大的变化?又是如何一步步演化的。 卢鹏程:这个转型及架构演化是一个庞大的系统工程,涉及各部门的内部演进,以及部门间的协调合作。我更想从侧面来展现下其间的情景: 刚来蘑菇街时,正面临转型,梳理全站代码主要是PHP,做服务化。旁边的一个团队在开发一套叫做Tesla的SOA框架,从无到有,每天过来接入、吐槽的同学越来越多,产品也越来越成熟,渐渐成为标准。另一面,来找我们监控系统要PHP SDK的,也越来越少,java SDK成为主流。随之数据上报得以稳定,我们迎来了重构监控系统的时机,降低了数据容忍的开销,针对性的优化了服务性能与用户体验。。 CSDN:请讲讲你们的监控系统平台架构吧?而您认为一个高可用的监控系统需要重点考虑和解决哪几个方面的问题? 卢鹏程:监控平台是我在蘑菇街参与设计实现的第一个系统,承担着全站所有资源、业务的监控、报警任务,提供秒级数据服务。 说到架构,先放个图: 图比较简单,不一一解释了,有几个关键词可以概括:去中心、存角色、无依赖、分场景。

  • 去中心:为达成高可用、易部署、易维护的目标,我们选择了去中心的分布式架构,采用gossip + SWIM来同步配置、做集群管理。
  • 存角色:为增强核心集群稳定性、提供大促时快速缩扩容能力,我们把核心系统中的部分功能,如大查询、热查询,分离到外围系统中。同一产品,不同角色。
  • 无依赖:这里指的是核心系统不强依赖任何第三方系统,降低外界对系统稳定性的干扰,确保用户随时都能获取自己业务的状态数据。
  • 分场景:这个算是业务架构了,是我们正在做的事情。目标是用简明的场景,代替目前在数据收集、展示两端繁琐的配置。让用户更自然准确的使用监控系统,降低学习与交流成本。

引入一个高可用监控系统,要面临几个抉择:

  1. 数据是什么样的,整形还是浮点,单值还是组合,分钟还是秒级,每日M、G还是T?。
  2. 是否提供采样聚合功能。如果提供,那是异步还是流还是查询时计算。
  3. 数据存储。全量还是循环最近,本机还是集中存储。
  4. 报警。轮询还是实时,容忍误报还是引入智能报警。

CSDN:能不能介绍下你们监控系统开发团队的情况,对于技术团队管理有没有可以和大家分享的? 卢鹏程:目前我们团队由我和另外5位小伙伴组成。他们都很年轻,耐力持久,冲劲十足,思维活跃,各有特长。我们系统能有今天,主要靠他们这一年多来,持续的努力。 我们之间比较融洽,用不上刻意的管理。大家一起讨论方案、争论细节,相互吐槽代码,大促前一起加班熬夜。对于技术团队而言,更重要的应该是要挖掘潜力,产生技术共鸣,在完成任务的同时共同提高。程序员产出的多少好坏,很大程度上取决于其兴趣与工作热情。 CSDN:蘑菇街监控系统是C++开发的?怎么保证其稳定性? 卢鹏程:首先,设计分布式系统,有个准则:不要相信任何一个节点是稳定可靠的。 当初选择C++,首先是因为我自己和几个小伙伴都是更熟悉C++,其次我们要做查询时计算,是CPU密集型应用,并且我对于单机容量、性能比较看中。 C++确实本身复杂度比较高,对程序员要求也高,但熟悉理解之后,开发效率、产出的稳定性并不必其他语言差。有些人应对C++复杂性的方法是只用其C with Class的子集,禁止使用C++的新特性、高级特性,甚至禁用标准库,这其实适得其反,丢掉了RAII、智能指针、lambda、MPL等最有力的工具。做好C++项目的最好方法是勇于直面其复杂性,主动学习、理解,做到心中有牛,自然游刃有余。 CSDN:蘑菇街在技术研发过程中,形成了哪些技术产品?据悉有很多是自研的,他们是否会开源呢? 卢鹏程:其实我们早在14年底就开源了我们的IM:TeamTalk 蘑菇街确实有很多自研产品,我们平台技术部就有SOA框架、消息队列、分库分表、监控、日志、全链路监控、存储等等一系列自研技术与产品。但我们现阶段自研,首要目的都是满足业务需求,所以其依赖、业务的局限性等使大部分不具备直接开源的能力。作为监控系统的架构师,我还是希望在某一天能够整理下把她开源出去,回馈社区的同时,寻求社区力量加速我们成长。 CSDN:在本次SDCC 2016·北京站的架构演进专题上,您分享的话题是 卢鹏程:这次SDCC我分享的是《蘑菇街监控系统体系及架构演进》,到时会有详细的监控系统架构解析及其演进之路。

博客地址:http://blog.yoqi.me/?p=718
扫我捐助哦
喜欢 0

这篇文章还没有评论

发表评论