首页 > 其他分享 >API网关【gateway 】- 1

API网关【gateway 】- 1

时间:2022-11-30 12:05:46浏览次数:47  
标签:网关 代理服务器 nginx API usr local gateway

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

网关的单节点场景:

API网关【gateway 】- 1_服务器

网关的多节点场景:

API网关【gateway 】- 1_nginx_02

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

网关的作用

* 统一入口

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

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

* 缓存:数据缓存

* 日志:日志记录

* 监控:记录请求响应数据,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进程号

 

源码面前,了无秘密



标签:网关,代理服务器,nginx,API,usr,local,gateway
From: https://blog.51cto.com/zhenghongxin/5898198

相关文章

  • API网关【gateway 】- 2
    最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析。由于采用了大量的nginx相关的东西,所以在此记录一下:......
  • UPEK API 代码
     UPEKAPI代码 usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text......
  • Spring Boot + @Async 太好用了,助你大大提升 API 并发能力!
    来源:https://developer.aliyun.com/article/694020异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是“异步调用”?“异步调用”对应的是“同步调用”,同步调用......
  • .net core .net6 webapi 连接mysql 8
    1.表结构:CREATETABLE`table2`(`id`BIGINTNOTNULLAUTO_INCREMENT,`myname`varchar(255)NOTNULL,`create_time`DATETIMENOTNULL,PRIMARYKEY(`......
  • EventTarget.addEventListener() - Web API 接口参考
    EventTarget.addEventListener()-WebAPI接口参考  https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener#%E8%AF%AD%E6%B3%95  <......
  • 三大实例带你搞定 Prometheus API 使用
    作为一位优秀的技术人员,往往能通过对数据的最大化利用来产生更多价值。而Prometheus的监控数据则是可以为我们所用的重要数据,它并不只能用于日常的监控和告警使用,也可以用......
  • 跨平台.NET应用UI组件DevExpress XAF v22.1 - 增强Web API Service
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpressXAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比......
  • ISAPI和CGI限制中没有ASP.NET v4.0
    文章来源:http://t.zoukankan.com/heyangyi-p-8515812.html[服务器搭建]ISAPI和CGI限制中没有ASP.NETv4.0解决方式:1.确保安装IIS时确实安装了ASP.NET,如果没有的话,勾上重......
  • 怎么给IIS添加ISAPI和CGI限制功能?
    https://www.aiufida.com/jcufida/616.html在IIS中添加ISAPI和CGI限制功能是非常必要的,因为如果在IIS中不添加添加ISAPI和CGI限制功能可能会引起软件运行过程中报错,或者直......
  • 使用 Hypercorn HTTP/2 ASGI 部署 FastAPI
    AnotherASGIwebserverthatsupportsHTTP/2andHTTP/3specifications我已经介绍了很多关于FastAPI的教程,其中服务器部署了Uvicorn,一个快速的ASGIWeb......