Skip to content
redlion99 edited this page Nov 24, 2014 · 1 revision

目标KPI

支持多客户端 web ios android

高效: 并发连接数1万以上

易扩展: 支持第三方SSO登录 方便和其他现有系统的互交互 方便二次开发

方案介绍:

Netty + SocketIO + AKKA + Redis

组件介绍:

Netty java平台上最高效的底层通讯组件 由JBOSS提供的一个java开源框架。Netty提供基于NIO异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。

SocketIO

Socket.IO 实现了实时双向的基于事件的通讯机制。旨在让各种浏览器与移动设备上实现实时app功能,模糊化各种传输机制。 Socket.IO 是跨平台,多种连接方式自动切换,做即时通讯方面的开发很方便 支持以下协议: WebSocket Adobe® Flash® Socket AJAX long polling AJAX multipart streaming Forever Iframe JSONP Polling

AKKA Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。它已经成功运用在电信行业。系统几乎不会宕机(高可用性 99.9999999 % 一年只有 31 ms 宕机

Redis Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

与XMPP方案比较的优点:

Netty基于NIO的高效通讯底层性能优于openfire 使用的传统Servlet架构 Redis 的基于内存+硬盘的会话数据存储 比 openfire的 mysql高效很多 Socket.IO对于浏览器,Websocket的支持 优于openfire 基于事件的异步编程模式 简单高效 基于AKKA的核心并发性能优异,扩展能力强 XMPP 基于xml的协议过重 Openfire整套方案过于笨重,对其改造难度大

Openfire的优点: 整套方案 首次部署难度小 方案比较成熟

Clone this wiki locally