[架构]网关服务设计

网关服务设计

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. 其他

此文只介绍和网关的大体原理和功能,里面有很多细节,后面再补充,如怎么样去负载均衡,怎么样去找一个最优的网关服务,怎么加解密等。原理懂了,代码不是问题。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值