概述
网关服务设计
second60 20180408
1 什么是网关服务
通常情况,服务内部的各个进程是独立的,如果外部服务需要访问内部的服务,就必须通过网关服务(gateway service)。
1.1 网关的作用
网关服务,通常是外部访问的唯一接口,访问内部的所有服务都必须先经过网关服务。网关服务的主要功能是消息解析过滤,路由,转发等。
1.2 网关的目的
a)统一性:网关可以使外接服务调用统一接口,而无须知道内部具体实现
b)无状态:网关是状态无关,所以外部服务可连到任何一个网关处理服务
c)扩展性:网关可无限扩展的,分布到不同机器,不同地域,实现不同地区跨服处理
d)安全性网关使内部服务更加安全,当某一网关受到攻击或coredump,可以切换到其他服处理
1.3 通用网关服务图
1.4 网关服务流程
外部服务连接网关,要进行服务处理,必先把消息发送到网关,然后网关再解析后转发到相关服务进行处理,处理完后再发送消息给外部服务。
流程分解:
a) 外部服务发送消息到网关
b) 网关对消息进行(部份)解析和过滤
c) 网关转发到指定服务处理
d) 指定服务转发结果给网关服
e) 网关服再转发给外部服务
2 网关服的功能分析
网关服务的主要功能是消息解析过滤,路由,转发等。下面将分析三个主要功能和实现。
2.1 消息解析过滤
在外部服务发送消息到网关服务后,网关服务第一部要做的就是消息处理。消息处理包括:协议解析,协议过滤,协议分发
假设,定义的协议格式为:
长度字段 | 命令 | 子命令 | 加密消息内容 |
其中:
长度:为两个字节,是整个消息的长度(字段+命令+子命令+加密消息内容)
命令:一字节,是大协议命令
子命令:为命令的子命令(可有可无)
加密消息内容:为加密后的消息内容
(当然还可以加一些加密的密钥信息,及携带信息uid等,这里只介绍最常用的处理方法)
2.1.1 协议解析
协议解析通常是协议头的解析。协议解析,可以分两种:部份解析,全部解析。
部份解析:即只解析协议头部,如上面协议为:长度,命令,子命令。消息内容的加密解析由处理的服务去解析。
优点是:节省解密处理时间
缺点是:内部每个服务都进行解密处理。
全部解析:把整个消息都解析,解密。
优点是:统一解密处理,内部服务可以无须再解密,还有及时处理解密错误
缺点是:网关服务效率会有降低
2.1.2 消息过滤
在TCP层收到一条消息后,协议格式错误,命令字错误,长度不正确,或解密不正确等消息,将会进行过滤处理,并记录。同时,也可对非法用户,非法IP等在网关服务层进行过滤处理,从而增强了内部服务的安全性,大大减轻内部服务的压力。
过滤条件:
a) 协议格式错误
b) 命令字未定义
c) 长度不正确
d) 解密不正确
e) 黑名单用户
d) 黑名单IP
过滤条件,根据实际需求增减。
2.2 路由
路由,简单地说,是就找一个从源到目的最优路径。网关服务,也会维护一份路由表。
2.2.1 路由表
路由表的维护分两种:静态路由表和动态路由表。
静态路由表:是本地的,可以设定一些默认的路由服务到本地文件。当服务启动时,先加载本地路由表进行服务互连。
动态路由表:是服务启动后,启定时器定时去读取动态路由的信息,新增或修改路由后都能及时感知。
例如,路由表定义如下:
服务id | 服务角色 | 服务IP地址 | 服务端口号 | 其他 |
1 | serviceA | 127.0.0.1 | 5001 |
|
2 | serviceA | 127.0.0.1 | 5002 |
|
3 | serviceB | 127.0.0.1 | 5003 |
|
4 | serviceB | 127.0.0.1 | 5004 |
|
5 | serviceC | 127.0.0.1 | 5005 |
|
路由表还可以加其他信息,如跨地区,跨服,分服,分组等。具体看需求。
动态路由的获取方法:
a) 采用http方法读取(建议)
b) 路由表存在数据库中
c) 路由表存在本地
采用http方法是最常用的方法之一。
2.2.2 路由表的维护
在2.2.1中,虽然读取了路由表,但并不等于服务都是存在的,可能会存在服务未启动,或服务不存在等。所以网关服务要和其他服务定时试探并互联。
网关服务,会每隔一段时间,对路由表中的其他服务进行试探,如果没有连接,会试探连接。
连接状态如下:
a) 未连接
b) 连接中
c) 连接成功
d) 连接断开
e) 退休中
路由表流程:
a) 服务开启,读取本地路由配置
b) 服务开启后,定时(每隔一分钟),读取动态路由配置
c) 对读取的路由配置中的服务进行试探并连接
d) 重启路由表服务状态
参考:
map[“service_id”] = 1
map[“service_role”] = serviceA
map[“service_ip”] = 127.0.0.1
map[“service_port”] = 5001
map[“service_state”] = EService_Connect;
map[“service_zone”] = zone1 (可用集群用)
map[“service_region”]=region1(分区分服)
map[“service_cmd”]=cmd1,cmd2,cmd3,cmd4
2.3 转发
转发,即把正常解析后的消息,根据路由规则,转发到相关的服务。
转发的流程为:
a) 可根据服务命令字cmd查找到可用的某个对应最优服务
b) 把正确解析消息转发到相关服务进行处理
转发规则:规则有很多,可以按命令字转发,也可以按角色进行转发,规则是死的,人是活的。具体的规则按需求定义。
参考:
为从map中,查找一个最优的,存活的服务进行处理。
3. 其他
此文只介绍和网关的大体原理和功能,里面有很多细节,后面再补充,如怎么样去负载均衡,怎么样去找一个最优的网关服务,怎么加解密等。原理懂了,代码不是问题。
最后
以上就是鳗鱼电脑为你收集整理的[架构]网关服务设计网关服务设计1 什么是网关服务2 网关服的功能分析3. 其他的全部内容,希望文章能够帮你解决[架构]网关服务设计网关服务设计1 什么是网关服务2 网关服的功能分析3. 其他所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复