论文部分内容阅读
以云计算为核心的第三次IT革命引发了一次全新的技术浪潮,而分布式计算在这一浪潮中起着中流砥柱的作用。实现分布式计算的主流方式是使用普通商业硬件搭建分布式系统,通过增加机器数目来实现扩容。实现这样的一个分布式系统,必然涉及多台主机上的多个进程,而由于不同主机之间的进程需要通过网络来进行连接,这势必会带来诸多复杂问题。利用现代高级程序设计语言如C++,以及面向对象的思想去设计并实现分布式系统可以一定程度上降低或者避免这些复杂性。网络与分布式系统实验室的基础类库最初是为了降低设计通信服务器的整体难度,以及减少实现通信服务器的开发工作量设计并实现的。本文的主要目标就是对网络与分布式系统实验室的基础类库的做进一步改进和完善,设计并实现面向分布式计算业务的网络编程框架。本文对实现分布式计算业务的常见需求进行归纳与整理,提炼出了两种模型:通信模型和并发模型。通过分离业务逻辑和底层的通信模型,以及分离业务逻辑与底层的并发模型,力图将代码中的功能性部分和非功能性部分分开。依据这两种模型,本文设计并实现了两个框架用以支撑实现常见分布式计算业务:事件驱动框架和多线程框架。多线程框架优点是对并发业务提供了一个非常自然的抽象,业务之间的隔离性好,缺点是操作系统提供的原生线程属于稀缺资源。事件驱动框架优点是能够提供大量的并发,没有上下文切换,没有锁的羁绊,缺点是编程复杂性的增加。结合实际应用,本文提出了一种使用网络编程框架的范式:业务的主流程实现在事件驱动框架中,统一处理网络I/O事件、定时器事件和信号事件,而事件驱动框架中的一切阻塞流程,如磁盘I/O或数据库事务等都统一交由多线程框架去处理。本文的最后通过测试用例对框架的功能特性和性能特性进行了验证。使用本文实现的网络编程框架去实现分布式计算业务,不仅能很好满足性能要求,还能大大简化了开发工作量,使得程序员能够把精力更多地集中在分布式计算业务逻辑的实现上。