Mobvista蔡超:因为All in Cloud,所以探索云端俭省之道

上周,大概全中国的云技术人才都聚在深圳,因为AmazonWeb Services (AWS) 技术峰会9月20日在深圳举行。

作为AWS技术峰会2018中国行的收官之作,本场峰会汇集多位AWS高管和技术专家,分享AWS在物联网、移动技术、人工智能、大数据等领域的创新与展望;亦有本土技术型企业代表,分享成功案例及实践经验。

Mobvista作为技术驱动型的全球领先移动营销平台,由技术副总裁兼首席架构师蔡超、资深后端研发工程师梁晓鹏出席峰会并做专题技术演讲,分享Mobvista在搭建和完善云计算体系过程中的经验。

  蔡超,Mobvista技术副总裁兼首席架构师

  以下为蔡超所作的《云端俭省之道》演讲分享。

——————

Mobvista的宗旨是“建立覆盖全球每一个人的信息输送管道”,公司建立了覆盖全球的移动营销平台,通过平台助力移动开发者利用全球优质广告资源来实现高效的流量变现,同时帮助广告主利用全球优质流量资源实现广告的精准投放。

从一开始,Mobvista就考虑到业务的快速启动、规模的快速扩展及全球化,所以我们的整个系统和平台都建立在云端。

Mobvista成立于2013年,经过短短几年的发展时间,我们已经成为全球前十的移动营销平台,我们的日触达用户已达9亿,日均的请求数量目前已经接近400亿。

  如同每一个在云端搭建大规模系统的公司一样,规模的快速增长,带来的是成本的快速增长的压力。这也是为什么我加入到Mobvista,如果你参加了去年的ArchSummit2017,那你会知道我去年是代表亚马逊来做一些session的分享的。

在这半年的时间里面,我们通过架构的优化,以及利用AWS的一些新技术来逐渐降低我们的成本,通过半年的优化,我们实现了单位请求的成本降低了约60%,这是一个非常难以置信的结果。那下面,我会分享一些我们自己的实践,供大家参考。

  第一个非常重要的,就是在你的架构层面实现更细粒度的伸缩,以往的单体系统在伸缩的时候我们是通过两种方式,第一种是复制系统服务,第二就是对数据进行分片。通常情况下系统的瓶颈不会是在于系统的所有方法,往往只是在于某一个方法,那这样的方式由于会导致整个系统的复制使用更大的硬件资源,导致一些硬件资源的浪费,那如果你采用微服务的话,你可以实现更细粒度的伸缩,那么对于处于瓶颈状态的微服务进行单独的伸缩、单独的复制,对它所使用的数据进行分片,提高硬件的使用效率。

另一方面,利用AWS Lambda技术,你可以直接将计算方法或业务方法上传至云端,直接进行计算或运行,而无需考虑其承载器的硬件以及扩充硬件的规模。AWS Lambda将根据请求量变化实现自动伸缩。同时,使用AWS提供的Backend Service,例如存储、步骤编排(data pipeline)等,你可以完整地构建一个Serverlessarchitecture。

  上图是我们的一个游戏数据统计系统,这个游戏数据统计系统也是覆盖全球。我们可以看一下,整体的架构中没有任何一台主机。Serverless不仅降低了系统的硬件成本,更加降低了硬件的维护成本(关于这方面更多的分享,欢迎大家参加下午我的同事梁晓鹏——公司资深工程师的一个关于Serverless的session。)

  第二,就是充分利用AWS的收费模式。AWS推出了Spot Instance,这是一种闲置的EC2Instance,通常你可以以1-1.5折的价格来获取Spot Instance,但是在某些资源紧张的情况下以及在你的竞价低于市场价的情况下,这些Instance会被回收掉。如果你的应用可以实现InstanceFlexible、同时你精巧的设计还可以满足到以上这些容错特性,那么你可以结合AutoScaling以及混合一部分的OnDemand和Reserved Instance来实现一个可靠并且低成本的系统。

  不仅是Online系统,对于后台的大数据平台,如果是使用AWS EMR平台,你同样可以利用 SpotInstance来降低你的成本。我们可以用SpotInstance来运行TaskNode,TaskNode在失效时,EMR平台会对它进行重新运行。与Master Node和Core Node不同的是,TaskNode的失效并不会引起整个EMR平台的失效,也不会像引起很大的data shuffle. 所以我们可以安全地用SpotInstance来替换所有的Task Node. 唯一的问题是,如果应TaskNode被回收,而Task需要从算,就会需要更多的时间。这时,你可以借助更多的Spot Instance,利用更多的Task Node来加快整体的运行速度,比如说4个小时的运行时间,通过更多的Task Node把它加快到1小时运行,即因为一次从而导致需要2个小时,那么你在时间和成本上还是获得了改善。

  我们一直都在提什么样的架构是好的软件架构,开发人员大都会想到:可伸缩、高可靠、可扩展、可复用、可维护。而实际上,在我做架构师的十多年经历当中,我发现其实除了以上这些一个让企业支付得起、并且能够让企业获得更高利润的架构,才是一个好架构。