超越“高并发I/O数据库系统”的性能挑战( 二 )


文章插图
 

  • 早期介入,防患于未然 。
AppleS会在第一时间阻止潜在I/O性能瓶颈的产生 。为产生这个目标,I/O需要在数据库和存储子系统看见造成性能瓶颈的用户并行I/O之前,及时发现并有效规范他们的I/O行为 。
超越“高并发I/O数据库系统”的性能挑战

文章插图
 
  • 通过P和ζ的二维控制实现隐藏过量的并行I/O 。
也就是通过P控制总是允许适量的用户并发I/O访问数据库,并且暂停而不是拒绝多余的I/O行为,同时基于ζ控制,AppleS会尽量保障用户I/O顺序访问模式,从而有效提升缓存的命中率 。
AppleS会通过P优化和ζ优化保证整个I/O隐藏过程的公平、高效和稳定 。
超越“高并发I/O数据库系统”的性能挑战

文章插图
 
  • 应用性和高度兼容性 。
AppleS的设计需要考虑其快速跨数据库部署的能力,鉴于MySQL、MongoDB是广泛接受的经典关系数据库和NoSQL数据库,现有的AppleS原型系统实现可以快速部署于MySQL和MongoDB的多个主流版本 。
超越“高并发I/O数据库系统”的性能挑战

文章插图
 
让我们看一下早期介入的实现细节,AppleS是通过干预I/O请求从网络链接传入数据库的过程来实现早期介入的 。
超越“高并发I/O数据库系统”的性能挑战

文章插图
 
该过程可分为六步:
1.通过网络驱动传入Socket缓存 。
2.数据库发起系统调用 。
3.I/O请求进入数据库 。
4.工作现存发起存储I/O请求 。
5.查询结果返回 。
6.I/O请求转回 。
其中AppleS通过策略性暂缓过量I/O请求的系统调用及步骤二和三,来防止过量I/O请求进入系统数据库 。
超越“高并发I/O数据库系统”的性能挑战

文章插图
 
AppleS是通过P控制和ζ控制来实现过量用户并发I/O隐藏的,前者控制并发用户数量,而后者调节单个用户的连续访问数 。上图给了一个AppleS的调度案例,其中P和ζ设定为2和10,该案例中有4个并发用户,其中用户1和3权重为0.4,而用户2和4权重为0.1 。因此在一轮AppleS调度中,允许的发送的请求总数为10 。而四个用户的用户I/O 定额也就是连续访问数,基于权重分别为4,1,4,1,换言之,在任何时刻,同时被数据库可看见的并发用户人数限定为2,也就是P=2 。同时每个用户可连续发送的请求数也被其用户I/O 定额所限定 。
通过这种方式,只要P和ζ设定匹配数据和存储子系统的处理能力,AppleS就可以准确地隐藏过量的并行I/O 。
超越“高并发I/O数据库系统”的性能挑战

文章插图
 
以上实验给出了P控制的效果,优化P设定匹配点,可以避免过量的用户并发I/O导致的锁竞争低效的争抢行为,以及高队列效应 。从而最小化I/O请求延时,进而获得高吞吐率、很低的用户并发I/O不公平性、以及低水平的请求延时波动 。
由于AppleS通过从数据库外部截获数据库发出的系统调用,来帮助其进行用户并发I/O的调度,它本质上将数据库和底层存储子系统视为一个黑盒子,这使得AppleS操作可以从物理层面与数据库的操作和底层的OS 合态I/O操作隔离开来 。从而获得较高的易用性和兼容性,事实上AppleS可以通过迅捷的配置,快速适配一款特定的数据库 。
此外AppleS还可以兼容多个版本的主流linux内核,不同的存储I/O调度机制,以及资源管理工具,比如Cgroup 。
超越“高并发I/O数据库系统”的性能挑战


推荐阅读