zoukankan      html  css  js  c++  java
  • 后端系统开发之白名单机制

    前言

    后端系统中经常会听到“某某白名单”的名字,为什么要有白名单呢?使用白名单机制有什么好处? 在大型后端系统中,白名单机制是必不可少的

    概念

    白名单的概念与“黑名单”相对应。

    白名单是设置能通过的用户,白名单以外的用户都不能通过。

    黑名单是设置不能通过的用户,黑名单以外的用户都能通过。

    所以一般情况下白名单比黑名单限制的用户要更多一些。

    实际用途

    用途一:

    黑名单的对立面这是白名单最明显的应用场景,例如微信朋友圈禁止抖音、快手等平台的短视频分享,但是微信、QQ等APP拍摄的小视频是可以分享的,所以这里有一个“短视频分享白名单”在起

    作用。 

    用途二:

    测试帐号我们在测试新功能的时候,刚开始不想对所有用户都生效,可以通过白名单机制限制生效范围,利用白名单的思想可以对账号进行分类,只有在白名单中的测试帐号才能体验新功能,不在

    白名单中的账号则完全无感知。 

    用途三:

    上线控制举个例子:A公司的产品有PC、APP、微信、小程序等4个客户端,现在由于公司业务发展,需要紧急上线某个功能,由于各客户端的开发任务都很重,只有APP和微信顺利完成开发,PC

    和小程序要延期上线,这时后端系统显然不能对所有客户端渠道都开放新功能,可以通过新增一个该功能的白名单配置,控制上线节奏。示意如下:

    X功能上线范围 = APP,Weixin,有了这个白名单,就可以玩出花样来:PC、小程序上线,可以修改白名单,增加配置;后端系统发现该功能的一个BUG,该BUG只影响APP,而不影响微信,可以修

    改白名单配置,让APP的功能紧急下线处理,但是微信仍然保留,待BUG解决后再对APP上线。

    用途四:

    限制范围。严格来说特权账号、测试帐号和上线控制都是限制范围的例子,所以说限制范围其实是最能体现后端系统中白名单机制威力的场景,工程师们可以利用各种白名单机制缩小某个功能的生效

    范围,从而实现系统自我保护。写到这里的时候,不禁想起刚刚过去没有多久的拼多多一张测试优惠券跑到线上的严重BUG,后端系统一定要通过设置各种限制条件,防止此类悲剧的发生。

    实现

    白名单如何实现:白名单实现非常简单,配置文件、数据库中的表都可以用来实现白名单。白名单一般最终会加载到内存中,通常用set或者map存储,以方便快速查找。

    分类

    线上白名单;在线上和灰度测试阶段使用

    预发白名单:在功能测试和回归测试阶段使用

    实战理解

    配置中心

    乐高:两套系统,分线上和预发

    zookeeper:两套系统,分线上和预发

    实际使用

    总的来说系统分为两部分,一部分是代码,一部分是zk配置

    需要两部分都同时是预发或者线上才能正常访问,但是严格来说,预发环境和线上环境从数据源来说是同一套,只是数据库跟测试环境不同,所以理论上来说,回归主干时如果给预发环境环境部署上线的代码并且配置线上的配置,那么预

    发机器的效果就跟线上机器是一模一样的,这个情况也就是下面说的“切线上环境”

    预发白名单

    我们都知道不同的需求需要不同的环境和配置,为了配合测试只能搞个白名单来配合所有需求

    不同的机器虽然部署的代码可以是不一样的,但是读取的配置是同一套,所以在测试不同需求的时候,就需要不同的配置

    比如一个修改文案的需求,主干和线上一致,但测试的预发机器是需要不同的,这个时候是根据zookeeper的配置中心来读取不同的配置来实现的,也就是说如果有跟配置相关的需求在测试的时候都是需要加白名单的

    线上白名单

    情况一:在灰度机发布,测试灰度的时候使用

    情况二:上线之后,如果没有打开开关或者放量,测试或者业务想要看某个需求也要加白名单

    情况三:在回归主干的时候切线上环境,避免灰度机有问题再审批,但此时读取的是线上的配置,如果需求有配置的更改,需要改线上的配置,不过要加白名单,这是唯一的风险点

    总结

    一句话总结:白名单机制是一种简单易用的技术手段,利用白名单机制方便测试和上线控制,实现各类功能限制,保护系统安全和工程师职业生涯。

     

  • 相关阅读:
    字符串(url)拼接变量
    elementUI table数据显示效果(二)
    异常(转)
    PHP 的异常处理、错误的抛出及错误回调函数 (转)
    详细解读PHP类的封装 (转)
    什么是抽象类
    什么是类,什么是对象,类和对象之间的关系
    魔术方法
    类的声名
    self
  • 原文地址:https://www.cnblogs.com/kunmomo/p/11540248.html
Copyright © 2011-2022 走看看