蓝海卓越高性能RADIUS解决方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
蓝海卓越高性能RADIUS解决方案
蓝海卓越计费系统在经历了私营ISP从无到有,从弱小到发展的各个阶段。计费产品的发展一路走来,也经历了很多版本的变化与更新。随着无线市场的爆发式发展,蓝海卓越原先的“小区宽带计费系统”的结构已经不能再适应于日新月异的无线接入市场的发展了。但是,WIFI接入市场是如此的崭新,以至于没有人敢于对其做过于细致的预测。因此,计费系统既要满足市场发展的需要,又不能做过于详细的业务逻辑。那么这就成为了一个两难软件设计需求。
设计的过于详细,业务变化了,一切都得重新来。客户的需求并不像小区计费那样整齐划一。业务做的过于粗,就不能满足客户的基本需求。
为了解决这样一个设计上的两难局面,蓝海卓越的“高性能Radius引擎”就应运而生了。
这套RADIUS系统,并不像传统的小区宽带计费系统那样是“完整的”。通过对“业务逻辑”与“技术实现”的分离,蓝海卓越实现了一套高性能的RADIUS计费引擎。该引擎可以在有100万注册用户的情况下,实现带业务完成800次/秒的100%成功认证。如果只是单纯的进行认证(无附加业务逻辑判断,只做RADIUS认证)可以达到2000次/秒以上!
下表是小区计费系统和高性能引擎做对比:
高性能RADIUS引擎并不是针对某种具体业务而开发的,它专注于所有计费系统的技术共性。不但可以支持小区宽带的计费业务,还可以根据实际项目的需求对无线接入提供完美
的支持。
在系统内部定义了一套计划任务,像到期停机、异常掉线检测、用户下线后的数据计算等很多功能,都被集成在引擎内部完成。
下图是这套引擎的工作原理框图。
用户查询属性
添加用户属性
删除用户属性获取用户参数更新用户静态参数更新用户静态参数获取在线信息
踢用户下线批量增加用户属性
在图中FreeRadius 负责处理RADIUS 协议部分,将获得的数据,原封不动的交给“中间层”进行处理。这就避免了使用RADIUS 那个自带的数据库接口。那个数据库接口经过实际测试,每秒钟只能完成0.7次认证。这对于大型应用来说是不可能胜任的。
数据库系统同时使用了关系型数据库和非关系型数据库。MySQL 用来存储所有的用户以及用户属性等信息。但是,并不是直接使用它的表。而是在MySQL 里建立了一套HASH 结构。经过实际的测试,使用这套HASH 结构后,在100万注册用户的规模情况下,每秒钟可以完成2000次左右的认证。即便是带有复杂逻辑的情况下,也可以保持在每秒800次以上!800次这个速度意味着什么呢?几千人同时进行认证拨号,请注意是几千人同时进行认证拨号,这个套系统是完全可以处理过来的。而用户是不会有延迟感的! 那么一个会产生几千人同时使用的系统,注册人数会有多大呢?一个中等城市可能也不会有这样规模的认证请求密度。
对于需要进行记账的场景,这套引擎使用了非关系型数据库来保存记账信息。这里用的非关系型数据库是MONGODB 。关于这个数据库的性能和功能、优缺点网上已经有很多介
绍,这里就不多说了。之所以会选择它,其实还是看上了它对于海量数据的容纳能力,以及极快的读取速度。
由于记账数据的特点,写入的多,被读取的少。如果全部放到MYSQL里,那么很快数据库就会变得非常缓慢,以至于会严重的影响认证速度。我们在早期的计费产品里,也曾经采用过定期剪切到另一个库的办法,但是实际使用中效果并不好。MYSQL还是会因为数据量太大而变得非常缓慢,以至于统计详单等业务操作起来经常卡死。而MONGODB的特性恰恰可以解决这个问题。
在引擎中还有一个非常重要的单元,那就是计划任务单元。对于异常掉线检测、到期停机等计费必备的功能提供了高效率的解决方案。
这个引擎不包含任何业务逻辑,只提供最基础的技术接口;它是一套基于FREERADIUS 的标准RADIUS解决方案,同时提供下线触发等丰富的技术接口;它是一套性能远远高于FREERADIUS的RADIUS系统;它是一套可以和任何业务系统无缝集成的RADIUS系统。
虽然使用了FREERADIUS的协议处理部分,但是完全改写了数据源部分。让FREERADIUS 只处理协议,数据源单独来处理。
那么这套系统和业务系统如何进行集成呢?下面就这个问题做一个简要的说明。
一般的计费系统,都会包括用户管理、套餐管理、账单管理这几个部分。那么计费系统要做的就是,根据各个套餐计算出一个最终的结果。这个结果包括用户名、密码、到期日期、带宽等一系列的参数。这时候,只要通过高性能RADIUS接口,就可以把这些数据完全的写入到数据库中。那么,NAS用户就会通过访问RADIUS而进行AAA了。
如果你有一个现成的用户系统。包括很多的用户,而这些用户只有用户名和密码参数。这时候,只需要规定一个默认套餐应该使用的一些列技术参数。就可以很容易把这些用户导入到RADIUS的数据库中。数据一经导入,就可以被NAS设备使用了。
在发布引擎的同时,我们还发布了一套接口的说明文档:《蓝海卓越高性能Radius接口描述-V1.0》。这样可以帮助大家尽快的进行二次开发。