ocs计费项目重要点,使用分布式dubbo架构
宗旨是保证用户权益,可以适当损失公司部分利益。
一、安全性、可靠性
1、过载保护,当队列数量达到一定阈值,将数据保存到mongodb中,等到服务器压力降下来后去数据库捞。
2、使用redis分布式锁保证数据的安全性。
3、redis分布式锁不能保证长处理流程,比如调到其他服务器,其他服务器重复批价、或同时批价流量,此时要做重复判断,并使用redis事物实现幂等,不允许重复
4、redis哨兵模式,保证主服务器挂掉后备用服务器顶上
5、异常处理逻辑考虑全面,分布式调用失败,查询接口默认使用上次数据,修改数据异常做回滚处理
6、一些非正常未处理数据走cafka保存到磁盘。
7、使用计数器保证用户数据处理完毕。
8、task任务清理redis过期数据,使用redis积分制,将过期数据转移到临时区域,保证异常情况下将未处理数据处理掉。
- 9、返回错误码,使用信用额度
- 10、其他组定义了断路由,使用hytrix(有误)
- 11、数据库备份,集群。
12、保证线程数量,当有线程挂掉了要重启新的线程。
13、连接风暴预防,启动服务时加载一些缓存数据,进行缓存预热,不同业务缓存失效时间不同,防止应用同一时间大量访问数据库
二、高吞吐量
1、使用自定义负载均衡,将同一用户路由到同一服务器,入同一个队列,同一个线程处理。减少分布式锁的使用,提高cpu的利用率。
2、使用流量池,累计一定的流量或达到时间阈值再去批价,保证大部分流量数据很快处理掉。最好做到快慢分离。
3、能用缓存的尽量使用缓存,不变的数据永远保持在缓存中,周期改变的数据使用ecache本地缓存。
4、redis按业务分区,保证访问redis高效性
5、使用不同的数据保存不同数据,详单读从库,写主库
三、可移植性、可扩展性
1、根据业务、通用专业原则定义接口、模块、服务,比如从GCBU版本升级到流量预授权版本,将批价从cm服务转移到engine服务
2、使用java设计模式,如责任链模式、状态模式等,可扩展性好。