API网关【gateway 】- 1

最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析。

网关的单节点场景:

网关的多节点场景:

这里的多节点是根据模块进行多节点分布,我们公司采用的是单模块多集群分布,没有进行多模块【模块越来越多会导致更加复杂】。

网关的作用

* 统一入口

* 安全:黑名单、权限身份认证

* 限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。

* 缓存:数据缓存

* 日志:日志记录

* 监控:记录请求响应数据,api耗时分析,性能监控

* 重试:异常重试

* 熔断: 降级

单纯来看,会感觉与微服务的特点相似

现有的框架:

Tyk:Tyk是一个开放源码的API网关,它是快速、可扩展和现代的。Tyk提供了一个API管理平台,其中包括API网关、API分析、开发人员门户和API管理面板。Trk 是一个基于Go实现的网关服务。

Kong:Kong是一个可扩展的开放源码API Layer(也称为API网关或API中间件)。Kong 在任何RESTful API的前面运行,通过插件扩展,它提供了超越核心平台的额外功能和服务。

Orange:和Kong类似也是基于OpenResty的一个API网关程序,是由国人开发的。

Netflix zuul:Zuul是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

apiaxle: Nodejs 实现的一个 API 网关。

api-umbrella: Ruby 实现的一个 API 网关。

技术选型

从我们公司一代网关选型来看,采用的Orange与Netflix zuul结合开发。

即外层为nginx,中间为zuul,最后为后台服务

首先安装nginx

网上很多资料,这里简单列一下步骤:

1、Nginx下载:nginx-1.13.0.tar.gz,下载到:/opt/softwares/

$ wget http://nginx.org/download/nginx-1.13.0.tar.gz

2、Nginx解压安装:
$ tar -zxvf nginx-1.13.0.tar.gz -C ./

3、预先安装
$ yum -y install gcc gcc-c++ ncurses-devel perl pcre pcre-devel zlib gzip zlib-devel

4、Nginx编译
$ ./configure --prefix=/usr/local/nginx

5、安装Nginx:
安装命令:make & make install

6、查看安装路径
$ cd /usr/local/nginx
$ ll
conf 存放配置文件
html 网页文件
logs 存放日志
sbin   shell启动、停止等脚本

7、启动nginx
$ cd sbin
$ ./nginx

8、浏览器,访问ip地址,默认80端口


9、停止nginx
$ ps -ef | grep nginx


执行命令:$ kill –INT 进程号
$ kill -INT 3844

$ ./nginx -s stop

10、重新读取配置文件
$ nginx -s reload

11、检查配置文件是否正确
$ ./nginx -t

问题报错:[error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
解决方案:
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
-c的命令是指定配置文件位置

正向代理与反向代理

正向代理

用户要访问服务器C,但因为网络原因无法访问;但服务器A可以访问服务器C。这样用户可以把服务器A设置为正向代理服务器。由服务器A去请求服务器C,然后服务器A把数据返回会用户。

反向代理

用户需要访问一些服务器应用,但对方不想把服务器应用地址暴露给用户,这样可以确保安全。那用户如果访问呢?可以通过反向代理服务器,用户只需要知道反向代理服务器地址就可以,最后由反向代理服务器去访问服务器的应用

总结:正向代理与反向代理的区别

1)正向代理 是需要 在用户的电脑上 配置正向代理服务器的;而反向代理不需要,因为用户是直接访问的反向代理服务器

2)正向代理的应用场景是 用户是知道目标服务器的地址,如:www.google.com,但不能直接访问,那么就需要在用户电脑配置一个正向代理服务器,用户再次访问的地址www.google.com。

而反向代理的应用场景是 用户本来就不知道 目标服务器的地址;而是由平台方提供一个反向代理服务器的地址,用户直接访问反向代理服务器的地址就行 www.a.com

不管目标服务器有多少,用户不需要关心,只要访问反向代理服务器就ok;由反向代理服务器去解析访问目标服务器

3)反向代理 极大的保护了应用的安全性,而且此结构可以很好的搭建负载均衡

 

nginx 信号控制

1)nginx启动
指令:nginx程序 -c nginx配置文件

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 

2)nginx重启

#cd /usr/local/nginx/sbin

##重启

# ./nginx -s reload

进入nginx可执行程序的目录

# cd /usr/local/nginx/sbin/

# ./nginx -s reload

nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"

重启是建立在nginx服务需要启动

3)nginx停止

# ./nginx -s stop 
# ./nginx -s quit

quit 是一个优雅的关闭方式,Nginx在退出前完成已经接受的连接请求

stop 是快速关闭,不管有没有正在处理的请求。

4)重新打开日志

# ./nginx -s reopen

5)nginx检查配置文件

检查配置文件是否正确

第一种

进入nginx可执行程序的目录
# cd /usr/local/nginx/sbin/
# ./nginx -t

第二种

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

二)nginx的信号控制

Nginx支持2种进程模型Single和Master-Worker

Single是单进程,一般不适用,

Master-Worker是主进程和工作进程模型运行,主进程对工作进程管理。

Nginx允许我们通过信号来控制主进程,用信号的方式可以达到不影响现有连接的目的。

信号类型

INT,TERM 快速关闭信号

QUIT 从容关闭信号

HUP 从容重启信号,一般用于修改配置文件后,重启

USR1 重读日志,一般用于日志的切割

USR2 平滑升级信号

WINCH 从容关闭旧进程

具体语法:
kill -信号选项 nginx的主进程号

例:

# kill -INT 26661

# kill -HUP 4873

1)nginx停止

# ps -ef | grep nginx 获得进程号

第1种从容“优雅”停止

# kill -QUIT master进程号

# Nginx服务可以正常地处理完当前所有请求再停止服务

# 步骤:首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

第2种快速停止

# kill -TERM master进程号

# kill -INT master进程号

# 快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。

第3种强制停止

# pkill -9 nginx

# 系统强杀nginx进程

2)重启nginx

# kill -HUP master进程号

 

posted @ 2019-04-11 10:31  hongxinerke  阅读(1212)  评论(0编辑  收藏  举报