论文部分内容阅读
如今网络平台中各类应用已经深入到人们的衣食住行等领域,人们的生活、工作、学习带来了翻天覆地的变化,如百度搜索、淘宝、微信各种互联网App,每一秒钟都有数以万计的用户使用这些应用程序。当用户访问量增加时,高并发访问数据库由于磁盘I/O速度造成请求响应延迟,解决这一问题的关键方法是在服务器端采用缓存技术。在缓存服务器处理高并发的访问时,为快速处理请求,以非阻塞方式处理网络I/0以及各种定时任务。因此,服务器中需要一套高效的基于事件的子系统,如Memcache基于Libevent的事件机制。当前Libevent作为通用事件机制广泛使用在服务器中。Libevent是开源、事件驱动、跨平台的网络处理库,提供了简洁的API便于项目开发。但是Libevent为满足通用性以及跨平台性导致代码庞杂,性能有所下降,而且代码封装过于完善不利用扩展。在项目开发中如果对事件机制效率要求较高,需要根据具体需求自行设计实现。本论文设计和实现了分布式缓存系统中的事件机制,该分布式缓存系统是基于应用服务器高并发问题的背景下设计实现的。项目运行系统为Linux操作系统,使用C语言进行开发。事件机制内部使用多线程解决客户端的高并发访问,修改了并行处理中经常使用的Master-worker模式,将多线程模块封装在事件机制内部,内部线程的数目根据任务可以动态调整,线程使用epoll处理网络I/O,快速处理用户请求。事件管理器采用双hash表实现,为减少大量的事件迁移对系统的波动,实现hash表的逐步迁移平摊开销策略。考虑到系统需要进行大量定时事件操作,事件机制定时器采用了级联时间轮算法。时间轮算法保证定时事件插入、删除等一系列操作的时间复杂度都在0(1),并且不会随着定时事件的增加而增大。级联时间轮算法可以表示大范围的定时跨度,降低内存的占用。经过测试,该事件机制子系统能够快速地处理I/O事件以及定时器事件。基于该事件机制的分布式缓存系统可以实现平稳快速地运行。