APISIX简介与应用 - 灰信网(软件开发博客聚合)


本站和网页 https://www.freesion.com/article/3858592230/ 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

APISIX简介与应用 - 灰信网(软件开发博客聚合)
首页
联系我们
版权申明
隐私政策
搜索
APISIX简介与应用
标签: Java 网关 APISIX
APISIX 是一个云原生、高性能、可扩展的微服务 API 开源网关,基于OpenResty(Nginx+Lua)和etcd来实现,对比传统的API网关,具有动态路由和热插件加载的特点。系统本身自带前端,可以手动配置路由、负载均衡、限速限流、身份验证等插件,操作方便。APISIX是用Lua语言开发,语言相对简单,容易上手,同时可以按自己的需求进行系统的二次开发以及开发自己的插件,目前APISIX已经发布到1.1版本。
本文将从APISIX功能,安装以及使用三个方面对APISIX进行介绍。
一、APISIX功能
APISIX的功能有很多,包括动态路由、url重写、动态上游、IP黑白名单、A/B测试、灰度发布、限速限流、监控报警、健康检查等等,本文只介绍几个比较常用的功能,其他功能具体可以查看APISIX的官方文档说明。
1.服务热启动功能
使用过Nginx的同学都会遇到过这种情况,在修改nginx.conf后需要重启nginx服务修改才会生效,重启时间虽然短暂,但难免会有一段服务不可用时间。当然,可以通过其他方式进行规避服务不可用。APISIX的服务热启动通过在路由、Service、Upstreams等插件中动态的修改配置即可,并不需要再重启APISIX服务来使修改生效。
2.热插件功能
不再需要在nginx.conf文件中编写复杂的规则代码来实现需求,通过使用自带的路由、Upstreams等插件,在前端页面中添加所需要的规则即可实现。下文应用会详细介绍。目前通过插件可以实现uri重写、根据请求信息中的内容实现路由跳转等等。也可以根据自己的需求开发符合自己需求的插件。
3.动态负载均衡
通过Upstreams插件,可以实现基于权重的roundrobin和chash负载均衡。
4.数据集群
APISIX支持etcd集群,通过etcd集群增强了系统的可用性,大大减小了故障损失。
5.监控
APISIX外接第三方prometheus监控系统,提供符合prometheus数据格式的监控指标数据。Prometheus 是由 SoundCloud 开源监控告警解决方案,已经比较成熟完善。
二、APISIX安装
1.安装OpenResty和etcd依赖
CentOS7
# install epel, `luarocks` need it.
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -ivh epel-release-latest-7.noarch.rpm
# add OpenResty source
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
# install OpenResty, etcd and some compilation tools
sudo yum install -y etcd openresty curl git gcc luarocks lua-devel
# start etcd server
sudo service etcd start
Ubuntu 16.04 & 18.04
# add OpenResty source
wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install software-properties-common
sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"
sudo apt-get update
# install OpenResty, etcd and some compilation tools
sudo apt-get install -y git etcd openresty curl luarocks
# start etcd server
sudo service etcd start
2.安装APISIX
通过源码包安装:
# 下载源码包
wget http://www.apache.org/dist/incubator/apisix/1.1/apache-apisix-1.1-incubating-src.tar.gz
tar zxvf apache-apisix-1.1-incubating-src.tar.gz
# 安装运行时依赖的Lua库
cd apache-apisix-1.1-incubating
make deps
3.安装控制台
确保你的运行环境中的 Node 版本 >= 8.12.0。
3.1 下载 Dashboard源码:
git clone https://github.com/apache/incubator-apisix-dashboard.git
3.2 安装依赖并构建
git checkout <v1.0> #这里的tag版本和你使用的apisix版本一致
yarn && yarn build:prod
3.3与 APISIX 集成
把编译后的在 /dist 目录下的所有文件,拷贝到 apisix/dashboard 目录下。 使用浏览器打开 http://127.0.0.1:9080/apisix/dashboard/ 即可使用, 不用填写用户名和密码,直接登录。
4.管理(启动、关闭)APISIX服务
# init nginx config file and etcd
make init
# start APISIX server
make run
# stop APISIX server
make stop
三、APISIX应用
配置一个可用的链路。
1.配置Upstream
创建Upstream界面中有Desc、Type、Key、Node。Type中根据需要选择roundrobin、chash两种方式,如果选择chash方式需要从下拉列表中选择合适的Key。Node节点根据实际需求可以添加多个,如下图:
2.配置Routes
创建Route界面中有Desc、URIs、Hosts、AddURI、Remote Address、Methods、Upstream、Service。在URIs中添加接收的请求uri,支持正则表达,例如:请求地址有http://ip:port/hello/world.jsp、http://ip:port/hello/apisix.do,这里的URIs可以添加/hello/*来匹配处理这类请求。在Upstream中选择刚才创建的upstream。其他选择可以默认不填,如下图:
3.配置完成
完成上述两步配置后,就可以通过client端请求APISIX实现路由跳转。
四、小结
综上,APISIX搭建比较简单,上手比较容易,能够满足日常的网关需求,同时也可以自己进行二次开发。当然,APISIX中也有其他功能,相关功能可以自己进行扩展研究。可以根据自己的实际需求,对APISIX功能进行适当的删减,符合自己的才是最重要的。
后期需要在监控方面进行二次开发,目前是外接三方Prometheus,Prometheus是一款比较成熟完善的监控系统,但是外接三方让系统看起来比较庞大,并不是那么的精简,后期可以参考Prometheus中监控指标进行二次开发。
版权声明:本文为manmanyao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/manmanyao/article/details/105845489
智能推荐
Python+Paddlehub相片人像抠图精简源码实例
Python+Paddlehub相片人像抠图实例 无需PS软件,手动制作自己的抠图工具,在只有一张图片,需要细致地抠出人物的情况下,能帮你减少抠图步骤;在有多张图片需要抠的情况下,能直接帮你输出这些人物的基本轮廓 准备相片: 安装相关的依赖包: 上传或拷贝需要抠图的图片和背景图片放到对应的文件夹中,并通过代码加载需要抠图的图片,进行展示: 加载预训练模型 运行效果展示: Python...
STL-vector
目录 1.包含头文件 2.vector创建与初始化 3.vector大小及容量 4.vector元素访问 5.添加、插入及删除元素 1.包含<vector>头文件 2.vector创建与初始化 vector<T> vect:创建一个空 vector,没有元素,故不分配内存 vector<T> vect {v0, v1, .....
Inteli IDEA Maven创建Mybatis项目
文章目录 Maven创建java项目 配置pom.xml MyBatis配置文件 1.在/src/main下创建resources文件夹 2.配置SqlMapConfig.xml 3.配置/mapper/UserMapper.xml 4.配置log4j.properties 实例测试 1.创建实体类User 2.创建会话工厂类 3.创建测试类 Maven创建java项目 cmd到目标目录下输入mv...
恢复不小心执行 rm -f 被删除的文件?
模拟场景 1. 删除 误删除服务器目录/root/selenium/Spider下的MySql.Data.dll文件: 2. 恢复 1.使用lsof命令查看当前是否有进程打开/root/selenium/Spider/MySql.Data.dll文件: 从上面可以看出,当前文件状态为已删除(deleted)。 2.查看是否存在恢复数据: /proc/13067/fd:进程操作的文件描述符目录。 8...
删除数组重复项
删除数组重复项 删除重复值 有一个整数数组, 去掉该数组中重复元素后排序打印, (相同的数字只保留一个, 禁止使用set和语言本身提供的函数) 输入: 第一行: 整数N 表示该数组的长度 第二行: 数组中每个元素的值An (0<N<10000, 0<An<1000) 输出: 去掉重复元素后的有序数组 样例输入: 11 1 3 4 2 6 2 6 2 8 2 6 样例输出: 1 2 3 4 6 8 ...
猜你喜欢
laravel框架接入图表Charts模块
laravel 图表Charts模版搭建 此功能用到了Charts模块 所以需要使用composer倒入相应的拓展包 开发环境申明 操作系统:Mac 开发环境:vagrant + Nginx -Tengine2.2 + MySQL 5.5 + PHP-7.1 集成环境:宝塔面板 搭建php+宝塔面板+vagrant+laravel+Mac+centos7.2+Composer开发环境 详细操作 打...
JAVA线程浅剖析
目录 什么是线程(百度百科) 操作系统(OS)线程状态 java创建线程的方法 JVM线程状态转换 线程数据结构 备注 什么是线程(百度百科) 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行...
过滤器过滤一个包内所有servlet
先看下文件的目录结构: 我们要做的就是用MyFirstFilter过滤servlet包内的所有servlet即DisplayHeader、HelloServlet、SecondServlet。 主要就是两个注意事项: 1: 这里一定要注意就是那个注释部分: 它原来的值是:@WebServlet(&ldquo;/HelloServlet&rdquo;),一定要改成上图所示的才可以 2.就是web.x...
【Write up】bugku--convert
下载附件1.txt,打开看到全是0、1 看到这么多0、1,第一想法就是进行进制转换,将二进制转成10进制或者16进制等,方便下一步操作,由于文件内容较多,在线工具没法转换,写个简单的python脚本跑一下吧: 转成16进制之后,删除开头的0x,然后在进行十六进制转ASCII码操作(可以直接用notepad++的插件) 转成ASCII码之后,看到开头Rar!,很明显的rar文件头,修改...
操作系统笔记之基础
1.进入操作系统 神秘的开机背景后面到底发生了什么? 打开电源,计算机就开始工作了,那计算机怎么工作? 冯。诺依曼存储程序思想:把程序和数据存放在计算机存储器中,计算机在程序的控制下一步一步执行。 设定一个程序指针PC指向指令,由PC指针从存储器中取出指令,交给运算器和控制器,程序指针PC自动指向下一个指令。 那么问题:打开电源以后,计算机执行的第一条指令是什么? x86pc,计算机刚打开时pc ...
灰信网(软件开发博客聚合)
程序员专属的优秀博客文章阅读平台
相关文章
APISIX
framebuffer简介与应用
Lombok简介与应用
framebuffer简介与应用
AsyncTask简介与实例应用
Expect简介与应用场景
Flyway简介与应用(SpringBoot整合Flyway)
Druid应用与简介(含源码)
Python之django-simple-captcha django简单验证码插件
uniapp省市区街道四级级联动选择器
热门文章
Dubbo/Dubbox的服务暴露(三)- 服务的注册
laravel框架中封装公共方法全局调用
【Rt-Thread】STM32输出PWM
操作系统(李治军) L12内核级线程的实现
课文果园机器人这篇课文什么的果子_温儒敏教授:对长课文、难课文教学的思考(文字+视频版)...
Python-Time库
Map集合之HashMap(二)
Web前端入门 HTML基础
kuangbin 简单搜索 - POJ 1321 (dfs模板题)
system 远程创建文件夹失败_macOS:使用Intellij IDEA远程连接Hadoop
推荐文章
sharding-jdbc系列之order by结果归并(八)
卜若的代码笔记-DJAngo系列-第七章:上传资源-后台的处理
String.intern()详解,关于String s2 = new String("ja") + new String("va"); s2.intern();
【达内课程】利用框架volley和gson展示百度音乐列表(上)
pyechart数据可视化11 双坐标轴丨2020年全球智能个人音频设备出货量及增长率
ThinkPHP 5如何接入支付宝支付功能
算法总结 - 爬楼梯问题逐步优化,斐波那契类似问题套路
利用Python与selenium自动化模拟登陆12306官网!
Android消息机制三剑客之Handler、Looper、Message源码分析(二)
Java 指定范围的链表反转
相关标签
nginx
lombok
javalombok
lombok用法
lombok注解
lombok介绍
android
asynctask
线程
异步
Copyright 2010-2022 - All Rights Reserved - www.freesion.com