1、计算与存储分离的架构
随着系统实时流量越来越多,之前的计算平台mysql集群压力越来越大,虽然可以通过增加mysql服务器来解决问题,但是基于成本考虑,我们选择对数据计算平台进行重构。计算与存储分离,使用分布式kv集群来存储大流量数据,slave节点计算时从kv集群抽取数据到mysql临时表,在由mysql进行复杂查询计算。整个架构的核心是大幅缩小计算平台mysql集群的数据规模,从而提高计算能力和速度。同时基于kv集群存储,可以大幅提高存储能力、降低存储成本(相比于mysql存储)。
2、自研纯内存SQL计算引擎
为了进一步提高性能,我们对mysql计算引擎进行改造。原先基于mysql集群进行计算需要经过以下步骤:slave节点发起计算任务、从kv集群中获取数据分片、保存数据分片到数据库临时表、基于mysql执行计算,改造后的架构取消了mysql集群,直接在slave节点发起数据查询、数据计算任务。slave节点包括计算任务执行器、数据分片查询器、内存数据结构、内存计算引擎、数据结果等模块。
3、MQ削峰以及流量控制
如果我们面对的是非实时性写入请求的话,完全可以使用MQ中间件先抗住海量请求,接着做一个中间的流量分发系统,将流量异步分发到kv存储中,同时这个流量系统还可以对高并发请求进行控制。流量控制系统我们主要实现了数据校验、数据过滤、数据分片、数据幂等,流量控制等功能。
4、计算数据的动静分离架构
slave计算节点从kv集群中抽取数据进行内存计算,为了进一步提高性能,对计算数据动静分离,静态数据保存到本地缓存中,动态数据从kv存储中获取。