最近在公司进行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

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

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

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

、Nginx解压安装:
$ tar -zxvf nginx-1.13..tar.gz -C ./ 、预先安装
$ yum -y install gcc gcc-c++ ncurses-devel perl pcre pcre-devel zlib gzip zlib-devel 、Nginx编译
$ ./configure --prefix=/usr/local/nginx 、安装Nginx:
安装命令:make & make install 、查看安装路径
$ cd /usr/local/nginx
$ ll
conf 存放配置文件
html 网页文件
logs 存放日志
sbin shell启动、停止等脚本 、启动nginx
$ cd sbin
$ ./nginx 、浏览器,访问ip地址,默认80端口 、停止nginx
$ ps -ef | grep nginx 执行命令:$ kill –INT 进程号
$ kill -INT $ ./nginx -s stop 、重新读取配置文件
$ nginx -s reload 、检查配置文件是否正确
$ ./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进程号

API网关【gateway 】- 1的更多相关文章

  1. SpringCloud系列之API网关(Gateway)服务Zuul

    1.什么是API网关 API网关是所有请求的入口,承载了所有的流量,API Gateway是一个门户一样,也可以说是进入系统的唯一节点.这跟面向对象设计模式中的Facet模式很像.API Gatewa ...

  2. SpringCloud微服务项目实战 - API网关Gateway详解实现

    前面讲过zuul的网关实现,那为什么今天又要讲Spring Cloud Gateway呢?原因很简单.就是Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用 ...

  3. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

  4. 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析

    API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题 ...

  5. 微服务中的 API 网关(API Gateway)

    API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...

  6. API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd API 网关出现的原因

    API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd http://www.infoq.com/cn/articles/compa ...

  7. 服务中的 API 网关(API Gateway)

    我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...

  8. Spring Cloud 微服务三: API网关Spring cloud gateway

    前言:前面介绍了一款API网关组件zuul,不过发现spring cloud自己开发了一个新网关gateway,貌似要取代zuul,spring官网上也已经没有zuul的组件了(虽然在仓库中可以更新到 ...

  9. .net core 微服务之Api网关(Api Gateway)

    原文:.net core 微服务之Api网关(Api Gateway) 微服务网关目录 1. 微服务引子 2.使用Nginx作为api网关 3.自创api网关(重复轮子) 3.1.构建初始化 3.2. ...

  10. API网关spring cloud gateway和负载均衡框架ribbon实战

    通常我们如果有一个服务,会部署到多台服务器上,这些微服务如果都暴露给客户,是非常难以管理的,我们系统需要有一个唯一的出口,API网关是一个服务,是系统的唯一出口.API网关封装了系统内部的微服务,为客 ...

随机推荐

  1. javabean为什么需要序列化

    无论用hibernate或者mybatis结合spring做开发还是其他,系统里持久类往往要实现序列化, implements Serializable.我还是比较好奇,为什么要这样做呢?一直只知道个 ...

  2. 利用 FFmpeg 将 MP4 转成 FLV

    最近做一个小项目,要在线播放录制的 MP4 视频,想开源的 flash player 或 html 5 可以播放.可,虽然 MP4 是 H.264 编码,但就是播放不了.可能是封装方式(PS 方式)不 ...

  3. JWT-Token登陆校验

    JWT:就是靠给客户端(浏览器)一个规范凭证(签名),然后服务器解析签名,代替原有的session存值. 不带refreshToken的JWT例子:https://blog.csdn.net/u011 ...

  4. HDU 6129 Just do it

    题意:给你一个包含n个数的序列A和一个数m,序列B中的数是序列A经过异或得到的,比如:b[i]=a[1]^a[2]^…..^a[i].现在让你求经过m次异或后,序列B的值.  思路:这题其实和杨辉三角 ...

  5. 43.Charles抓包(iOS的http/https请求)

    Charles安装 HTTP抓包 HTTPS抓包     1. Charles安装 官网下载安装Charles: https://www.charlesproxy.com/download/ 2. H ...

  6. 2018.11.06 NOIP训练 简单的计数问题(计数dp)

    传送门 直接f[i][j]f[i][j]f[i][j]表示已经到第iii个位置已经找到jjj个的方案数. 简单转移一下就行了. 代码

  7. 2.7 Sobel导数

    OpenCV函数 Sobel(src_gray,grad_x/grad_y,ddepth,x_order,y_order,scale,delta,BORDER_DEFAULT ) Scharr( ) ...

  8. Java翻转数组的方法

    java的api没用翻转数组的工具类,只能自己写了. int [] testIntArr = {1,2,3}; //翻转数组 for (int i = 0; i < testIntArr.len ...

  9. 微信官方api & 非官方api

    1.微信公众平台开发者文档 http://mp.weixin.qq.com/wiki/home/index.html 2.微信公众平台 https://mp.weixin.qq.com/ 3.第三方a ...

  10. java基础-day33

    第10天 Transaction事务 今日内容介绍 u 事务管理 u 转账案例 u 事务总结 第1章   事务管理 1.1  事务概述 l  事务指的是逻辑上的一组操作,组成这组操作的各个单元要么全都 ...