Oracle是目前世界上知名度极高的一款数据库软件,广泛应用于大型企业等高要求场景。在Oracle生态圈其中一个比较重要的应用是-val。
Val是一种分布式服务端流量控制工具,在企业级高并发场景中,起着十分重要的作用。val部分的源码集成在了Oracle WebLogic中,不过我们可以单独剥离出来作为一个独立的服务来进行管理。val是一个基于正则表达式规则,可以对某个url的流量进行控制达到保护系统的效果。
我们来看一个val的具体例子(代码没有完全展示):
#限制访问,/admin路径下的资源只能允许IP地址是192.168.1.1的用户访问 #意思是,匹配/admin路径下的所有资源 location ~= /admin { #黑名单模式,不允许IP是192.168.1.2的用户访问。黑白名单同时存在时,以黑名单为准。 #思考:这里你是否可以试着将192.168.1.2的这一行删掉或注释掉,让大家都可以访问? deny 192.168.1.2; #白名单模式,仅允许IP是192.168.1.1的用户访问 allow 192.168.1.1; }
上述的代码,定义了/admin路径下,只允许ip地址为192.168.1.1的用户进行访问,这里使用了黑白名单的方式进行过滤,黑名单的ip地址将被禁止进行访问;而白名单的ip地址将被予以允许。
我们来分解下这段代码:
- location: 作用为定义模式,之后的正则要匹配这个路径。
- ~=: 作用是转为一个模糊匹配的模式。
- /admin: 匹配/admin路径下所有的资源。
- deny: IP地址是黑名单模式不允许访问。
- allow: IP地址为白名单模式允许访问。
val的流量控制是基于正则匹配规则,在匹配到对应的规则后beego会执行对应的action进行处理,这个action可以是重定向到其它地方,或返回一些模拟数据使攻击者无法得到真实的数据。除此之外,val还可以进行各种复杂的限流,例如限制某个IP地址在某个时间段内最多只能访问一次。
总之,作为一个分布式的服务端的流量控制工具,val的重要性在企业级场景中不言而喻。通过val对特定访问进行保护,可以增加安全性;同时对流量进行控制,也可以避免因瞬间流量过大耗尽服务器或者遭受恶意攻击而导致服务崩溃。