利用开源数据库中间件构建高性能Sakai系统

2022-09-17

一、引言

Sakai系统是我校采用开源软件搭建的在线辅助教学平台, 系统为教师及学生提供丰富的学习管理功能, 系统内置作业、考试、课程大纲、成绩册等工具, 目前已在我们国内几十所高校广泛使用;但随着应用的逐渐深入、用户量的逐步增大, 各高校在使用过程中也遇到了一系列问题。Sakai系统在1500以上用户同时进行考试时经常会出现系统运行缓慢, 考试无法顺利进行, 甚至会出现系统无响应的情况。通常情况下系统管理员都会通过提高数据库服务器硬件配置, 优化数据库配置文件, 前端应用进行集群配置等等方式来提高系统性能;在笔者所在高校期末考试时通常1天内可能会有近两万学生进行在线考试, 最高同时在线人数会超过三千, 在高峰期系统前端服务器压力不大, 压力最大的反而是数据库服务器, 而紧靠提供数据库服务器硬件配置和对数据库进行优化是远远不够的。本文则拟通过从使用国内开源的数据库中间件Mycat来优化数据库架构, 同时优化数据库配置, 实现数据库读写分离, 解决Sakai单库读写压力大的问题;从服务器硬件和数据库优化等多方面提高系统整体性能。

二、数据库服务器硬件优化

数据库服务器通常是数据计算密集型的, 因此要求数据库服务器必须是高性能的, 同时还要兼顾服务器的安全性、可靠性和可扩展性;一般可以考虑一下几个方面: (1) CPU:一般64位CPU一定要工作在64位操作系统下, 如果系统属于高并发的, 则应选用频率较高缓存大的, 而不是使用较多核数的CPU, 对于密集型场景和复杂SQL, 则CPU频率越高越好。 (2) 磁盘I/O:即磁盘寻道能力, Mysql数据库由于要不断的将日志等文件写入磁盘, 在高并发时会频繁的刷盘, 因此需要磁盘有较高的I/O能力, Mysql每秒钟都在进行大量、复杂的查询操作, 对磁盘的读写量可想而知。因此, 通常认为磁盘I/O是制约My SQL性能的最大因素之一;在笔者所在单位早期也因为高峰时段I/O过高而导致数据库服务器无响应或响应较慢。解决这一制约因素可以考虑以下几种解决方案:使用RAID-0+1磁盘阵列, 注意不要尝试使用RAID-5, My SQL在RAID-5磁盘阵列上的效率不会像你期待的那样快;有条件的也可以使用SSD硬盘。 (3) 对My SQL应用, 推荐使用S.M.P.架构的多路对称CPU, 例如:可以使用两颗Intel Xeon 3.6GHz的CPU, 现在我较推荐用4U的服务器来专门做数据库服务器, 不仅仅是针对于mysql。 (4) 物理内存对一台使用My SQL的数据库服务器来说, 服务器内存建议不要小于8GB, 推荐使用16GB以上的物理内存, 不过内存对于现在的服务器而言可以说是一个可以忽略的问题, 工作中遇到了高端服务器基本上内存都超过了32G。

三、操作系统及数据库配置优化

操作系统是数据库的基础, Mysql在linux系统上性能会比Windows上好, 因此一般会选择将Mysql安装在Linux上;操作系统的一些参数配置也会有影响到Mysql的性能, 首先网络方面要增加tcp支持队列数, 减少断开连接时资源回收, 加快超时等待时间, 同时还需要增加打开文件数的限制。

Mysql版本选择也很重要, 推荐使用Mysql5.7版本, 该版本整体性能相对于5.6有很大提高, 据Mysql官方测试5.7整体性能比5.6快3倍左右;同时Mysql5.7支持多源复制并提供JSON支持。如果有预算可以购买Mysql企业版, Mysql企业版功能更稳定, 同时提供完善的支持服务。Mysql本身的优化可主要关注一下几个配置参数: (1) innodb_buffer_pool_size:这个参数非常重要, 用于配置innodb缓冲池的大小, 如果数据库中只有innodb表, 则推荐配置量为总内存的75%。 (2) innodb_buffer_pool_instances:5.5以后版本引进的, 可以控制缓冲池的个数, 增加个数可以增加并发性。 (3) innodb_flush_log_at_trx_commit:关键参数, 决定了数据库多长时间把变更刷新到磁盘, 参数有三种值, 对innodb的io效率影响很大, 默认值为1, 可以取0, 1, 2三个值, 一般建议为2, 但如果数据安全性比较高则使用默认值1。 (4) innodb_file_per_table:关键参数, 控制innodb每一个表使用独立的表空间, 默认为off, 也就是所有的表都会建立在共享表空间中, 建议改为on, 使用独立的表空间。 (5) max_connections:是指My Sql的最大连接数, 若是并发连接请求量比较大, 建议调高此值, 但也不能盲目提高。由于篇幅限制本文仅列出部分重要的配置参数, 我们需要根据服务器配置及应用实际需要进行配置。

四、数据库架构优化

由于Sakai系统代码量庞大, 通过修改代码实现程序上的读写分离不太现实, 因此我校选用了My Cat这个开源数据库中间件, 用于实现读写分离配置。

(一) Mycat与其他数据库中间件差异

Mycat是基于阿里巴巴去IOE (去掉IBM的小型机、Oracle数据库、EMC存储设备) 时的一个开源产品发展起来的, 由于是国内开源产品, 因此国外对该产品研究较少, 国内对该产品的研究较多, 但大多使用在一些O2O的项目上, 真正使用Mycat+Mysql+Sakai这种组合的方案较少;Mycat属于进近几年的开源软件, 因次相关的论文及研究成果较少。武汉理工大学的祝雄锋研究了使用Mysql Proxy实现负载平衡, 读写分离, failover等, 但其不支持大数据量的分库分表且性能较差;孙巍、谭成翔研究了使用Amoeba中间件进行分布式数据库管理系统的构建, Amoeba是对应用提供My SQL协议接口的代理服务器软件, Amoeba不支持事务;而Mycat则同时具备这两种产品的优势并且支持事务, 而我校的Sakai系统对事务要求较高, 经过综合对比分析研究发现Mycat比较符合我们的要求。

(二) Mycat部署

本文采用的系统架构图如下:

Mycat的安装可以去官网下载Mycat权威指南查阅安装步骤, Mycat配置主要有一下几个配置文件。 (1) schema.xml:用于配置逻辑库, 在此配置文件配置具体的数据库实例、读写分离配置和心跳语句。 (2) server.xml:server.xml几乎保存了所有mycat需要的系统配置信息, 主要用于定义登录mycat的用户和权限。 (3) rule.xml:定义了我们对表进行拆分所涉及到的规则定义, 如果不需要进行表拆分则不需要配置此文件。

在确认Mycat配置正确并启动后, 再修改Sakai所有前端节点数据库连接, 配置数据库连接到Mycat节点。

五、结论

经过一学期使用后, 笔者发现在进行了服务器、数据库及架构优化后, 在进行大规模在线考试时, 由于进行了读写分离配置, 读操作集中在从库, 写操作集中在主库, 读写分离, 数据读写分布在三台服务器, 数据库压力大大减小, 系统响应速度有很大提升, 即使在大规模考试高峰期也没有再出现数据库响应速度慢或无响应的情况。同时在高峰期磁盘IO也由原来的90%左右降到了50%左右。由于运用场景不同, 我们可以根据自己的需要灵活的选择适合自己的方案, 限与篇幅和其他原因本文介绍难免有所遗漏或不太详尽, 敬请谅解。

摘要:本文从服务器硬件优化、服务器配置优化、Mysql配置优化, 系统架构等多方面分析阐述了构建高性能Sakai系统的方法和步骤;重点使用了Mysql数据中间件对系统架构进行了优化, 实现了读写分离, 减轻了数据库压力, 从而提高了系统整体性能。

关键词:数据库,性能,优化

参考文献

[1] 魏斌.高性能My SQL集群部署[J].河南科技, 2014 (14) :6-9.

[2] 罗贵章.一种面向高负载Sakai系统的性能优化方案[J].计算机与现代化, 2015 (2) :101-105.

[3] Mycat开源项目组, Mycat权威指[EB/OL].http://www.mycat.org.cn/, 2011年01月.

上一篇:时代背景下关于如何做好和谐社会思想政治工作的几点思考下一篇:“微时代”背景下高校思想政治教育方法研究