选型:使用orange系统
orange与kong的比较
1.kong整体代码上较凌乱, orange相对较有条理
2.kong本身不支持后台管理页面,只能通过api方式增,删,改plugin, orange支持页面操作(至少其模板,js 可以直接拿来使用)
3.功能上两者相近
orange系统流程
1)首先明确的是orange本身没有MVC框架, 对于数据库的引用也只是简单的require, 其结构比较简单,在实际开发中可能遇到的问题并不会很多, openrest本向就是以简单为主,涉及复杂的MVC框架反而可能会影响其速度。
2)后台管理使用的是lua的lor框架, 使用了rest full接口,框架本身较复杂, 在开发中可能会出现意想不到的问题,(比如框架本身的问题),为不牵扯太多时间,考虑使用php重新开发
3)orange执行流程比较鲜明, 在nginx不同阶段,调用不同的插件, 过滤用户行为
在nginx启动时, 加载orange conf, mysql, plugins
当url进入nginx时,执行指令access_by_lua_block中r的access()方法,该方法遍历plugin, 执行每个plugin中的access()方法
例如限流:
www.xueersi.com/1.php
在进入nginx后, 执行到限流插件时,从共享内存中取出相应的规则,如果满足规则,则保存计数的值, 并放行, 否则禁止通过
目前选型已完成, 需要做的事情如下
一.后台管理系统重写(PHP语言)
1)去掉后台管理系统中保存数据到mysql的逻辑,改为保存到配置中心(需要提供若干个api接口), 再由配置中心通知各个服务器来取最新数据,同时写到nginx的共享内存中
2)该后台管理系统所的服务器也是配置中心下面的一个节点,也会pull最新的数据,并放到本地文件中
3)在后台管理系统中有增,删,改操作的时候,把数据放到上面本地文件中合适位置,再将此文件的内容全部发送给配置中心
4)本地文件中的内容格式为json, 数据基本参考orange中的数据
二. 配置中心:
增加接收后台管理系统产生数据的api接口
三. 类似频控计数:
计数统计的操作,由存储在mysql,改为在redis中保存
四. 逐步完成的功能
鉴权功能:将其逻辑修改为plugin形式
频控功能
降级功能
告警功能:
通过api层次的统计: 成功次数,错误次数,异常次数
通过系统层次的统计: 内存、磁盘、CPU等指标
通过nginx层次的统计: 502 505
AB测试
降权功能
数据合并功能