微信支付商户系统架构背后的故事

  通过在24核CPU,64G内存的机型上进行测试,9000W数据的排序在最短可以在25 ms内完成,QPS最高可达5400。

  六.并行优化

  随着当前硬件的发展,系统资源越来越丰富,多CPU大内存成了系统标配,充分利用这些资源可以有效的提升的处理效率优化性能。腾讯在2014年底开始进行PostgreSQL多核执行优化。

  目前PostgreSQL9.6社区版也会包含部分并行化特性,但是没有我们这边这么丰富,下面介绍下腾讯PostgreSQL并行化的原理和效果:

物联网

  系统创建一个全局的共享内存管理器,使用bitmap管理算法进行管理

  系统启动时创建一定数据的Executor,这些Executor用来执行执行计划的碎片

  系统会创建一个计划队列,所有的Executor都会在任务队列上等待计划

  每个Executor对应一个任务结果队列,Executor在输出结果时就把结果的指针挂到结果队列中去

  计划队列,结果队列,计划分片执行结果都存放在共享内存管理器中,这样所有的进程都可以访问到这些结构

  Postgres会话进程在收到sql时,判断是否可以并行化,并进行任务的分发;在结果队列中有结果时就读出返回

  我们完成优化的算子:

  Seqscan

  Hash join

  Nestloop join

  Remote query

  Hash Agg

  Sort Agg

  Append

  通过在24核CPU,64G内存的机型下测试,各个算子的优化结果:

物联网
物联网
物联网
物联网

  整体来说性能普遍是优化前的10-12倍,优化的效果比较明显。

  七.腾讯PostgreSQL-XZ的两地三中心容灾

  两地三中心容灾是金融级数据库的必备能力,对于金融类业务数据安全是最基本也是最重要诉求,因此我们为了保障高效稳定的数据容灾能力,也为PostgreSQL-XZ建设了完善的两地三中心自动容灾能力。具体的两地三中心部署结构如下:

物联网

  同城节点间采用强同步方式,保障数据强一致;异地采用专网异步同步。

  节点内,每台物理机上部署CAgent,agent收集机器状态并进行上报,并进行相应的告警和倒换执行功能。

  每个IDC至少部署一个JCenter,JCenter负责收集上报每个agent上报的状态到ZK集群。这么多个JCenter中只有一个是主用,主用的JCenter除了进行状态上报还进行故障裁决和倒换。在主用的JCenter异常后,系统通过ZK自动裁决挑选一个备用的JCenter升主。

  JCenter和CAgent是两地三中心的控制和裁决节点。

  对于数据库节点,CN在每个IDC至少部署一个。DN在每个中心部署一个,一个为主,另外两个并联作为备机放在主机上,一个为同步备机,另外一个为异步备机。

  在主机故障宕机时,JCenter优先选择同城的备机升主。

 

  目前,腾讯云已经提供云数据库PostgreSQL的内测使用,并将提供内核优化版和社区版两个版本来满足更多客户的要求。