最近在公司进行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. sql2005性能优化(在32位系统上突破2G内存使用量的方法) .

    转载自http://blog.csdn.net/soldierluo/article/details/6589743 服务器磁盘为(SAS)IBM组成RAID0+1,SQL2K5只识别4G内存,实际只 ...

  2. php服务器---IIS一些问题

    配置网上很多博客都介绍过..这里不作详细说明了..将PHP目录(D:\PHP\PHP)下的php.ini-recommended或者php.ini-dist改名为php.ini,并找到extensio ...

  3. TCP的11种状态(转载)

    TCP的11种状态 TCP三次握手建立连接 Tcp头部 六个标志位中,我们要用到三个: SYN:SYN= 1 表示这是一个连接请求或连接接受报文.在建立连接时用来进行同步序号(个人理解是,在建立连接的 ...

  4. Django的学习(三)————models

    models采用的的是类的方式,一个类对应一张表,在django中只需要对类的操作就可以完成数据表的操作,这种方式可以省去写sql语句,完成了sql语句的封装,被叫做 ORM(object relat ...

  5. rails 表单中默认值

    在表单中加入默认提示值,如(email@email.com): <div class="field"> <%= form.label :email,"E ...

  6. SpringMVC作用域传值几种方式

    一.SpringMVC 作用域传值的几种方式 1  使用原生Servlet 1.1 在 HandlerMethod 参数中添加作用域对象 1.1.1 ServletContext不能在方法参数中获取, ...

  7. springboot 碰到的问题

    1.在springboot 启动报错 ** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentS ...

  8. vue的cli中自定义router

    1.安装router npm install vue-router 2.为了方便管理在components同级创建router文件夹 3.在文件夹中创建index.js文件,就是router文件 im ...

  9. php,合并数组,合并一维数组,合并二维数组,合并多维数组

    合并数组 例子1: <?php $msg = [ "code" => "0", "msg" => "" ...

  10. 反射List<M> To DataTable|反射IList To DataTable|反射 DataTable To List<M>

    将DataTable集合反射获取 List<M> /// <summary> /// 根据DataTable集合反射获取 List<M> /// </summ ...