全部博文(12)
分类: C/C++
2013-09-10 13:55:08
在这次项目中,从性能上考虑,将代理注册机制提升到代理服务器来完成,同时对SBC的探测和中继的各类保活仍然是在媒体服务器来完成的。在媒体服务器处理呼叫的时候,需要对每个注册账号的注册的SBC地址等信息,进行获取,以便获取到对应的呼叫目标地址。在后续,分机的注册信息,分机的补充业务信息等内容,都需要在代理服务器、媒体服务器甚至于Web服务器之间进行共享。为了解决程序之间数据访问的问题,同时又兼顾性能问题,采用Redis可以极大程度上解决这个问题。
关于代理注册部分:
代理注册进程中,对于注册结果,都动态的更新到Redis中。同时,设置注册结果的有效时间。每次注册刷新的时候,都将结果刷新到Redis中。
媒体服务器在进行呼出的时候,判断如果是到IMS侧的呼叫,需要获取对应代理注册账号的注册信息,获取到对应的SBC的地址,然后将其添加到呼出请求的Route头域。
对于IPPBX阶段的扩展:
需要考虑的,分机号码、分机业务开关、分机业务信息、性能优化
分机号码:将所有的分机号码,以集合的形式存储到Redis中,便于判断某个号码是否内部分机。
分机业务开关:某个分机的业务开关,以及对应的业务数据,可以预先加载到内存中。
性能优化:对于代理服务器,要处理下挂分机的注册信息,并且要对呼叫进行认证,这些过程都需要与数据库MySQL交互。为了提高性能,支持高并发,对于分机的注册信息,写入到数据库MySQL的同时,缓存一份到Redis,每次进行认证检查的时候,先查缓存,缓存不存在的时候,再从数据库里获取。提高性能的幅度会极大,夸张到95%。http://www.opensips.org/Documentation/Tutorials-MemoryCaching