Openfire 系统架构
一、架构概述
可伸缩系统架构是指除功能性需求外通过添加可伸缩技术元素,如:连接池、会话、包路由、分布式缓存、负载均衡等技术。使系统能支持大用户并发的访问的系统架构。通过连接池有效共享Socket。用户会话保存用户在线信息。包路由实现数据包的分发,传输。分布式缓存提高常用数据访问性能。负载均衡分发客户请求。可伸缩是服务端系统的重要技术,因为好多场景都要求系统能随着用户访问量的增加而进行可伸缩,特别是互联网产业高速发展的今天。
二、伸缩架构
系统分为连接管理器,业务服务器,组件服务器,代理服务器、负载均衡服务器和即时通讯客户端。因为系统的可伸缩架构主要体现在连接管理器和业务服务器这两系统角色,所以本章主要对这两部分进行讲述。系统架构的各部分功能如下:
l 负载均衡:是通过负载策略分发客户端请求,后端的连接管理器退出服务后,请求不在分发给本台连接管理器。
l 连接管理器:是保存客户端连接,实现系统用户并发上的可伸缩,连接服务器不包含业务逻辑代码它的功能只是负载保持客户连接和转发客户请求。
l 业务服务器:业务逻辑都实现在业务服务器包括用户验证模块、用户会话模块、在线状态模块、路由模块、文本消息模块等。
l 组件服务器:是用于扩展非即时通讯本身核心功能的业务,是通过业务服务器包路由过来的客户端请求,并通过组件服务器应答客户端。
l 代理服务器:是负责适配不同即时通讯协议实现不同即时通讯的互联。
系统架构中连接管理器和数据包路由模块是整个可伸缩系统的最重要部分:(1)当用户连接上服务器要保存用户的连接和会话,这数据随着在线用户数的增加会不断增加。(2)在用户连接得到扩展的基础上,业务模块可以进一步切割成不同的业务单元负责不同的功能,通过路由表把业务请求正确路由到可以完成的业务单元中。 用户连接的扩展和业务单元的扩展就实现了系统的可伸缩。要实现以上两点,就产生了连接、会话、数据包和路由表这几个概念。连接用于保存每个客户端的网络层数据,会话用于保存用户业务相关的数据,提高执行效率。数据包代表了不同的业务请求通过路由表使包在不同服务器组单元之间转发,实现业务单元的可扩展。
三、线程模型
系统采用多线程技术平衡IO和CPU的资源利用,使服务器的IO和CPU调用重叠在一起,从而提高系统性能。同时通过线程加上异步阻塞队列的运用,使任务可以分离和异步执行。连接管理器和业务服务器都属于不同的进程,进程内开启多条线程分别执行不同任务。
连接管理进程内会保存客户端连接,如果超过服务器可承担的负载,负载均衡会把新的请求分发到负载低的连接管理器。业务服务器进程内保存了在线会话路由表,通过业务服务的路由表,实现了组件数据包的路由,路由表可以路由所有JID实体,包括客户端、服务端、组件。如果不是本业务服务器的JID,而是组件服务器的JID,会把包路由到指定的组件服务器进一步处理客户请求。
因为业务服务器包含的是用户的状态数据,要伸缩业务服务必须同步节点间的状态,所以有群集线程负责处理节点间的状态数据同步。架构中连接管理器进程和业务服务器进程是可以部署到不同的主机。而进程下通过创建不同线程完成不同的工作,因为多线程平衡了CPU和IO资源的利用,使主机资源利用更充分。
四、连接管理器
因为在大并发环境下,连接资源需要随着用户并发访问量的增加而增加,所以可伸缩的连接资源就是支持大访问量的关键技术。系统通过增加独立部署的连接管理器程序提高并发的能力,连接管理的前端是一台负载均衡设备,它负责把用户访问分配到指定连接管理器,多台连接管理器在访问服务器。使用连接管理器后,服务器的连接池是提供给连接管理器连接,而一台连接管理器也提供指定数量的连接给客户端访问,这样通过添加连接管理器,以适应用户访问量。
Author:samuelchoi
Email:samuelchoi#163.com
Blog:www.cnblogs.com/samuelchoi
posted on 2012-08-14 14:01 samuelchoi 阅读(3175) 评论(2) 编辑 收藏 举报