年是“双11”十周年。年11月11日,当时的淘宝商城(天猫的前身)举办了首届网络促销活动,当天销售额为0.5亿元;年的双11,天猫、淘宝总成交额亿元,创造了25.6万笔/秒的新支付峰值,数据库处理峰值达万次/秒。双11开始后的7分23秒,支付宝的支付笔数突破1亿笔,相当于5年前双11全天支付总笔数!对于阿里来说,每年的双11就是一个超级工程,而下一年的双11又会突破前一年的纪录,因此双11其实是一个不停“膨胀”的无限工程。支撑双11的核心数据库,就是自年开始立项的金融级分布式数据库OceanBase。OceanBase的目标是成为新一代商用关系型数据库,其差异化优势在于底层的分布式技术。此前的OceanBase1.0成功支持了年双11的支付峰值,如今OceanBase2.0已正式上线,迎接即将到来的支付新峰值。OceanBase2.0有何新功能?对1.0版本进行了哪些优化?能否支撑今后双11的无限扩展?OceanBase团队的两位专家杨传辉和韩富晟解读了2.0版本的特点,两位专家均强调OceanBase2.0的设计可支撑百万支付峰值甚至无上限,年还将在不增加服务器的基础上“顶住”新的峰值。此外,在完全兼容MySQL后,OceanBase2.0加强了对Oracle数据库的兼容。OceanBase还在以极致精神打磨软件,挑战世界级基础软件。进一步提升分布式架构今年以来,国内云服务商陆续推出了各自的分布式数据库,杨传辉强调OceanBase是唯一一个走通用数据库路线的产品,其特色在于分布式架构对用户透明,不需要修改业务。OceanBase的技术定位为通用的金融级分布式商业数据库,从支持金融行业起步,再逐步拓展到支持各个行业。(上图为蚂蚁金服研究员杨传辉)相对1.0版本而言,OceanBase2.0在分布式架构方面更上一层楼。OceanBase1.0已经实现了用户对机器故障的无感知,也就是多台机器部署数据库,无论哪台机器宕机都可以30秒内无损切换,即所谓高可用。OceanBase2.0进一步实现了多台机器部署数据库的时候,用户对数据分布的无感知,这就是数据库层面的自动分片和自动负载均衡。OceanBase2.0支持在线数据分片,当某个数据分片数据量或者访问量太大时,在线分裂成多个分片,整个过程对服务没有任何影响。分布式数据库的数据分片,即把数据集切分成若干子集再分布到不同机器上,达到分布均匀、负载均衡、扩缩容时数据迁移少等目的。杨传辉强调,一台服务器上的数据分片数量,说明了数据库底层的技术能力,因为分片越多则意味着系统开销越大,数据分片要能做到足够小,才能实现整个集群负载的精细化控制和快速数据恢复。外界基于MySQL方案的分片数能达到单机几十个,而OceanBase2.0则可支持的单机分片数达到10万到万个,从而实现了无限的可扩展能力。在实现用户对机器故障无感知和数据分布无感知后,OceanBase2.0还对分布式事务进行了改进。OceanBase1.0已经支持了分布式事务,2.0版本则进一步实现了全局快照和全局索引。所谓全局快照,即当一条SQL语句涉及到多台机器时,通过全局快照保证各台机器的强一致读取。在全局快照读的基础上,OceanBase2.0实现了全局索引,就真正做到了用户对多机环境的无感知。此外,由于出现了全局快照,为了提高局部的租户级数据一致性,OceanBase2.0在全局时钟的基础上又引入了租户级时钟,从而保证单个租户的数据一致性,而无须频繁引用全局时钟,这样就避免了全局时钟成为整个系统的瓶颈。强化对Oracle数据库的兼容除了日益强大的分布式架构,OceanBase2.0相比OceanBase1.0在功能上最大的亮点是为用户提供了一个全新的Oracle兼容模式。众所周知,MySQL是互联网场景中最为流行的数据库,但从市场规模、功能完备等方面看,Oracle依然是商业数据库的绝对领导者。OceanBase的Oracle兼容模式使得传统企业的应用可以平滑迁移到OceanBase,在不改变业务代码的前提下充分享受分布式数据库在扩展性、可用性和系统成本等各个方面带来的收益。从MySQL到Oracle的兼容,不仅仅是SQL语法、数据类型、功能等方面的改变,更重要的是从专用数据库到商用数据库的全面功能升级,而这一切都是基于OceanBase对于自有内核的全面掌握。例如,迁移传统数据库应用中,存储过程的支持是绕不过去的一道难题。OceanBase2.0在兼容Oracle存储过程各种复杂、灵活的语法与功能的同时,还进一步通过编译执行(Just-in-TimeCompilation)等技术,大大提升了其执行效率和具体场景中的实用性。与此同时,OceanBase2.0还提供自定义函数、窗口函数、层次查询、dblink、临时表、sequence等一系列丰富的数据库功能。Oracle兼容模式的另外一个体现是数据库内核能力方面的增强。例如,为了更好的处理复杂查询的处理能力,OceanBase2.0全面升级了分布式查询的优化和执行引擎,增强了对复杂业务的支持能力;为了实现更精确的查询优化,OceanBase2.0实现了直方图以及实时统计信息更新的机制;同时,OceanBase2.0实现了基于用户参数的计划选择机制,增强了系统对大小查询混合场景的支持。诸如此类,OceanBase2.0在SQL引擎中引入了大大小小数十种内核优化手段,向成熟的商用数据库又迈进了一大步。数据库应用与数据的平滑迁移是升级过程中的重要考虑因素。OceanBase2.0数据迁移平台支持Oracle业务到OceanBase2.0的一键平滑迁移,为用户系统的升级铺平了道路。OceanBase2.0刚刚转向Oracle兼容,任重而道远。杨传辉表示,相信随着整个团队的不断努力,OceanBase会持续降低用户使用数据库的门槛,实现对用户生产力的充分解放与赋能。挑战百万支付新峰值年双11的支付峰值为25.6万笔/秒,那么年及以后的支付峰值目标就上看百万笔/秒甚至更高。这么高的目标能否实现?这就是OceanBase2.0问世的目的:今年双11交易支付,全部升级到OceanBase2.0,从而挑战百万支付新峰值。在支撑更高的支付峰值方面,OceanBase1.0已经无法对数据进一步的拆分而不影响上层的业务,OceanBase2.0的目标就是在用户无感知的前提下可以把数据拆分到无限多的机器里,无需上层的业务改造就可以支撑百万甚至更高的支付峰值。OceanBase作为基础软件,是整个支付业务性能的基石。OceanBase一直以来也把性能作为核心功能对待,一直为业务提供性价比最高的数据库服务。OceanBase2.0版本继续发力,在性能上获得了跨越式提升,在线事务处理能力(也就是处理OLTP类型业务的能力)提升了50%,为完成年双11不添加一台服务器支持新的业务峰值的目标提供了坚实的基础。负责性能优化工作的韩富晟具体介绍了OceanBase2.0的各项改进。OceanBase2.0主要从三个层面下了大功夫。第一,是数据库架构层面的革新;第二,是系统实现层面的精雕细琢;第三,是数据库运行环境的整体调优。(上图为蚂蚁金服资深技术专家韩富晟)OceanBase2.0对事务提交流程进行了大重构,大幅度减少事务提交流程的开销。支付业务是典型的在线事务处理类,以短小事务为主,事务的提交执行的频率特别高。事务的提交也通常是数据库内部最耗时的一部分。OceanBase2.0打通日志服务与事务服务,将原先分布式事务两阶段提交的多条日志优化到每个分区只有一条日志,依然保证很好的支持事务的原子性和一致性的功能。日志条目数的减少简化了提交流程,不仅提升了系统处理能力,还显著减少了事务提交的耗时。OceanBase2.0还在哪些地方精打细算了呢?实际上,OceanBase2.0的整个请求处理路径都进行了细致的优化。以内存分配器为例,OceanBase数据写入Memtable过程中,会在数据存储和索引更新过程多次分配内存,内存分配器很容易成为系统的瓶颈。通常解决这个问题的方法是让分配器预分配很多内存,但是在OceanBase分布式多分区的架构下,给大量空闲分区预分配意味着大量闲置的内存无法有效利用。OceanBase2.0启用了自适应的内存分配器算法,只对写入量大的分区进行内存的预分配,有效平衡了空间占用和系统性能。数据库一般都是操作系统压力最大的进程,也经常触碰操作系统的各种极限。OceanBase2.0在实际生产环境大压力运行时,我们还发现了Linux内核的bug。这个bug从3.1版本内核开始出现,目前3.1也是业界在生产环境普遍使用的一个版本。在内核专家的支持下,我们发现了Linux调度系统的缺陷,这个缺陷使得CPU无法充分利用。仅解决此bug一项,就给系统带来了7%的性能提升。为什么OceanBase要这么细抠系统性能呢?这是因为做软件有两大代价要应对,一个是开发代价,一个是运行代价,有些系统很侧重开发代价,特别是变化频繁的业务系统,好的开发效率是系统迭代的关键。但是数据库这样的底层系统在
转载请注明:http://www.aierlanlan.com/rzgz/5952.html