【.com原稿】WOT2016大数据峰会将于2016年11月25-26日在北京粤财JW万豪酒店举行。届时,数十位大数据领域的一线专家和数据技术先驱将齐聚现场,就机器学习、实时计算、系统等前沿技术话题进行深入交流和探讨。体系结构和NoSQL技术实践。同时分享大数据领域***实用和最热门的行业应用。会前,记者采访了小米公司研发总监欧阳晨。小米公司MIUI商业产品部架构师、研发总监,WOT2016大数据峰会重要演讲嘉宾之一。他演讲的主题是小米程序化广告交易平台(MAX)的架构实践。【受访者简介】欧阳晨·欧阳晨,小米公司研发总监,目前就职于小米公司MIUI商业产品部,任架构师、研发主管。主要负责广告平台的系统架构、广告交易系统和数据平台的研发。曾在微软工作10年,带领团队从事互联网广告和搜索引擎的研发,包括负责微软的移动上下文广告系统和数据算法,Bing搜索引擎的IndexServe的性能提升,是最早在甲骨文公司从事数据库研发工作。当被问及目前团队规模和业务分工时,欧阳先生表示:“小米商业产品部目前有百余人规模,其中大部分是技术人员,整体团队还在不断壮大,有不断有广告行业技术专家加入,研发部门按业务目标划分,可分为媒体、系统架构、策略算法、广告主服务和数据平台,媒体组负责媒体变现和用户体验,系统组负责架构演进和可靠性,策略算法组负责点击率预估、相关性等,广告主服务负责提升广告主满意度和ROI,数据平台提供数据洞察和营销数据平台DMP”。小米程序化广告交易平台(MAX)架构设计思路对于架构设计思路,欧阳总表示,架构设计本身就是一种学习和进化。踩了太多的坑,知道哪里不能去,就成了一个念头。广告平台的设计思路基于几个方面:第一,对当前业务和未来业务的深刻理解,始终认为架构是为当前和未来业务服务的,减少业务引入的成本变化,多在设计理念上愿意根据业务对系统进行分解,特别是对需求变化的业务模块进行隔离,降低耦合。其次,架构设计需要与团队的组织保持一致,遵守康威定律。例如,在平台建设初期,各业务群发展迅速,架构需要提供足够的灵活性。另外,广告系统对可靠性的要求非常高,这不仅涉及用户体验,还涉及业务收入。因此,系统的预警、报警和故障排除需要很大的投资。广告系统还具有业务驱动的特点。不同的广告服务可能需要不同的系统架构来支持它们。因此,架构的可扩展性和可演化性也非常重要。它需要支持业务的小步骤和敏捷迭代。小米程序化广告交易平台(MAX)及对应行业的演进过程欧阳总表示,平台架构的过程其实就是一个演进过程,每一步演进都是为业务服务的。它可以分为四个阶段,即“加、减、乘、除”。第一阶段是加法。新服务不断上线,整个系统不断变得复杂。因此,各种服务之间的耦合度非常强。在后期,每一个设计都有很大的影响。第二阶段是减法。为了解决第一阶段的问题,系统的解耦是重中之重。每个模块都被分离和服务以减少模块之间不必要的连接。第三阶段是“乘法”。这个阶段业务发展路径比较稳定,各个模块的分解也比较妥当。每个模块(服务)可以使用各种技术来高速提高服务质量。比如在数据处理方面,通过Stream处理大大提高了时效性;算法模块解耦后,算法上线的速度和种类也有很大提升;架构面向服务后,系统的容量和可靠性也有很大的提高。最后一个阶段是“分裂”。整个系统变得非常庞大和复杂。开发人员数量增加了近5倍,部署的机器数量也增加了近10倍,服务模块数量超过了20个。此时的架构调整涉及到一些抽象。它根据业务分为服务组。离线数据流也进行了大规模的优化,整合了一些零散的小模块,让整个系统更加简洁。值得分享的经验是,架构师的工作不是去创造一个静态的、美好的架构蓝图,更多的是寻找长期技术投入在成本、质量、效益和速度上的平衡点,以支持快速发展为目标。业务的发展。研发过程中遇到的问题和经验教训谈及经验教训,欧阳诚坦言,研发过程中踩坑在所难免。关键是要从陷阱中吸取教训,不要第二次踩同样的陷阱。在架构设计方面,他个人的收获之一就是架构和演化一定要坚持为业务服务。这部分他举了两个例子:第一:一年前刚接触这个平台的时候,感觉平台层次不清,各个业务之间的重复度很高。第一直觉是需要一个全面的架构,统一的广告检索,可扩展的广告检索元语言等。基于这些想法和过去多个广告平台的经验,广告演进的目标架构(所谓的蓝图)是设计的。有些模块已经开始沿着这个思路进行重构,而有些模块并没有沿着老路重构开发。半年后,我们再回顾一下当时的决定。当时重构的模块是业务比较稳定的模块,后面的业务并没有从中获得多少直接收益。虽然代码很工整,设计很规范,但是投入产出比很低;对于一些没有重构的模块,在各种新业务的冲击、打磨和碰撞下,不断自然进化,反而成为最适合业务变化的模块。现在回想起来,很多设计是一开始没有规划好的,因为很多新业务没有到位。.第二:关于MySQL,项目前期使用MySQL一直很顺利。当读访问量较大时,采用读写分离;然后进行水平拆解、水平扩展、代理层的引入;然后数据量又增长了,有些数据不得不移植到HBase中。整个过程中,我们花在MySQL上的时间太多了。每一次数据库的改进都需要大量的人力,而且容易出错。每项工作的成果只能维持很短的一段时间。我们得出一个简单的道理,如果有机会再来一次,我会早点拥抱NoSQL解决方案,避免在MySQL上做很多不必要的投资。开发设计“老司机”给初学者的忠告每个人都是从新手成长起来的,而新手往往有着无限的潜力。我有几点小建议,也是我在成长过程中多次经历迷茫后的一些体会。首先,你要学会确定自己想去的方向,是想做架构师,还是想成为某个领域的专家。一旦确定了目标,就可以多向身边的大牛学习,看看优秀的同事是如何思考问题的。二是保持学习热情。计算机行业的新技术层出不穷,需要不断充电才能了解最新的技术动向。第三,在学习的过程中,要坐冷板凳,学以鱼不如学鱼。每一项新技术,每一类问题,都会有一条学习曲线,而你往往需要经历一条黑暗的曲线。明亮的。另外,在解决问题的时候,尽量理解问题的原理,把问题想透,学会深入思考。***,也祝愿刚入门的新人,都能享受到计算机技术带来的快乐和痛苦。路漫漫其修远兮,路漫漫其修远兮,征程将至,加油!【原创稿件,合作网站转载请注明原作者和出处为.com】
