分布式计算框架--MicroTask性能测试实战
一、什么是MicroTask框架
酷家乐是以分布式并行计算和多媒体数据挖掘为技术核心的VR智能室内设计平台,吸引了超过300万室内设计师(覆盖全国40%的室内设计师)和超1000万业主用户。由于业务的特殊性:用户需要对材质效果进行实施的预览,而生成预览的3D数据需要大量的计算资源,对任务的实时性,可靠性有着较大要求。MicroTask框架是为了解决以上问题由酷家乐内部人员研发的一种通用的分布式实时任务队列编程框架,已经广泛的应用于酷家乐各个业务线。
二、为什么需要Micro Task
首先让我们回顾一下jetty的工作原理:jetty架构比较简单,分为acceptors,selectors和workers三个线程池。acceptors负责接受新连接(非阻塞型) selectors处理HTTP消息协议的解包(非阻塞模型) workers处理请求(阻塞模型)。
一般是一个ServerSocket对应一个ServerConnector。如果服务器要监听多个端口,就会有多个ServerSocket,相应也会有多个ServerConnector。这上半部分Jetty已经给我们做好了,无需操心其内部实现。需要关心的是业务逻辑,在下半部分的Worker线程里运行。当一个请求过来时会创建一个Worker线程来处理这个请求。
而酷家乐业务特点跟其他互联网公司有很大不同:
1.生成3D数据计算量比较大、资源消耗比较多
2.请求体往往比较大
3.nosql类型数据结构
服务端生成3D数据特别消耗资源,jetty处理请求是同步的,如果多个请求同步来生成3D数据整个服务会崩溃!!!Micro Task 主要“消峰”:把耗费大量资源的计算任务丢到队列中,避免同步计算瞬间占满服务器资源导致整个服务崩溃 (在Micro Task中计算只会导致Worker挂掉)。
业务请求体接近100MB
用户设计的建筑
三、Micro Task业务使用
业务表现应用:用户在左侧栏选中材质,拖拽到3d中生成的用户想要的效果。由素材数据转化成为3D坐标信息需要消耗大量的计算资源,而通过MicroTask分布式计算快速的生成3D坐标信息。
请求流程:前端请求过来,service服务创建相应的计算任务,丢到任务丢列中。task服务器进行分布式计算,然后把处理的结果返回到任务队列中。此时前端不断的去轮询task的任务之到拿到返回结果。
四、Micro Task性能测试实战
方案1
方案2
五、最后
到这里酷家乐分布式计算框架–MicroTask压测方案已经介绍完了,因为篇幅的原因还有很多实施细节部分并没有完整表述,同时MicroTask压测也才初具雏形,欢迎有兴趣的同学联系我们一起探讨,有表述错误的地方也欢迎大家联系我们纠正。