码迷,mamicode.com
首页 > 其他好文 > 详细

大数据量下的高并发分布式访问控制(ACL)优化方案(一)

时间:2016-08-17 23:29:46      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:acl   访问控制   异步化   

  1. 目前的设计方案

    1.1.控制计数:

    在目前的项目中,有很多接口需要对访问方进行权限访问控制。目前设计方案是:利用redis集群来存储每个访问控制点的访问计数信息。Key值为=PlatformId(接入平台方)+InterfaceId(系统接口)+dayTime(日期时间),value值为当天每个时段的访问次数统计列表。

    1.2.控制规则:

    通过页面配置并制定控制规则、业务系统在启动时加载控制规则,并访问redis获取控制次数,然后在业务系统中做逻辑判断完成,ACL控制做请求拦截处理。

  2. 目前的痛点:

    2.1.在大数据量高并发时,由于业务系统是集的并且是并发处理,会出现瞬间redis单点的qps峰值达到13w/s。出现这种情况的原因是Platform+InterfaceId+Day作为key的设计,会造成一个接入方的请QPS过大时直接映射到后端的redis的单点请求上,没有利用到redis的集群效应。

    2.2.当前的访问控制功能和业务代码紧密耦合在一起,无法做到单独对访问控制功能进行水平扩展,造成管理与优化不便。

  3. 结构图:

    技术分享

  4. 初步解决思路:

    4.1. 减少redis的访问量、并将redis的key值做细分使其能均匀分布到所在redis集群上.

    4.2. 对ACL访问控制功能进行服务化处理,做成无状态支持水平扩展。

    4.3. 引入异步处理逻辑、将ACL服务与业务方分离。后续ACL服务的变动对业务系统无感知。

    4.4.实现预先计算功能,在做redis汇总统计时现在ACL系统中做分组预计算,减少更新redis的频率。

    4.5.延迟检测控制,ACL访问控制目的主要是对一些过量请求进行拦截处理,非一定要保证实时性和一致性。通过延迟统计策略实现高吞吐量的处理能力。

    4.6.通知拦截机制,业务方不需要做任何拦截控制统计和分析,只需要接受ACL系统通知并执行通知动作即可。

  5. 具体实施细则:

    5.1. 所有配置信息统一由配置中心管理,ACL和Service(服务系统)都到zk上注册和订阅服务。

    5.2. Service方发送统计消息到MQ上,ACL去订阅该TOPIC来消费

    5.3. ACL在自身内存中做初步预处理计算,并定时刷新到redis集群做聚合运算。

    5.4. 启动定时服务扫描所有控制规则,检测到需要拦截的规则后,创建广播消息,发送到MQ上。

    5.5. Service方订阅广播消息,发现消息后,解析并在内存中对满足规则的访问进行拦截控制。

    5.6. 配置中心信息变更时,通过广播推送给所有订阅方,订阅方获取消息后到服务提供方来拉取信息并更新自身内存信息。

  6. 结构图如下:

    技术分享

  7. 目前该项目的重构方案正在实施,后续实施效果待更新第二版。

本文出自 “海上雪鹰” 博客,请务必保留此出处http://mickelz.blog.51cto.com/4276333/1839565

大数据量下的高并发分布式访问控制(ACL)优化方案(一)

标签:acl   访问控制   异步化   

原文地址:http://mickelz.blog.51cto.com/4276333/1839565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!