自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 APISIX源码解析-插件-代理重写-【proxy-rewrite】

apisix proxy-rewrite

2022-12-26 18:02:02 1230 1

原创 APISIX源码解析-服务发现-discover【kubernetes】

摘要当业务量发生变化时,需要对上游服务进行扩缩容,或者因服务器硬件故障需要更换服务器。如果网关是通过配置来维护上游服务信息,在微服务架构模式下,其带来的维护成本可想而知。再者因不能及时更新这些信息,也会对业务带来一定的影响,还有人为误操作带来的影响也不可忽视,所以网关非常必要通过服务注册中心动态获取最新的服务实例信息。架构图如下所示:服务启动时将自身的一些信息,比如服务名、IP、端口等信息上报到注册中心;各个服务与注册中心使用一定机制(例如心跳)通信,如果注册中心与服务长时间无法通信,就会注销该实例;

2022-03-29 11:27:21 2244

原创 APISIX源码解析-服务发现-discover【dns】

摘要当业务量发生变化时,需要对上游服务进行扩缩容,或者因服务器硬件故障需要更换服务器。如果网关是通过配置来维护上游服务信息,在微服务架构模式下,其带来的维护成本可想而知。再者因不能及时更新这些信息,也会对业务带来一定的影响,还有人为误操作带来的影响也不可忽视,所以网关非常必要通过服务注册中心动态获取最新的服务实例信息。架构图如下所示:服务启动时将自身的一些信息,比如服务名、IP、端口等信息上报到注册中心;各个服务与注册中心使用一定机制(例如心跳)通信,如果注册中心与服务长时间无法通信,就会注销该实例;

2022-03-28 14:50:21 2891

原创 APISIX源码解析-插件-外部认证【forward-auth】

forward-auth 外部认证关键属性源码实现function _M.access(conf, ctx) -- 固定传递给authorization服务的请求头 local auth_headers = { ["X-Forwarded-Proto"] = core.request.get_scheme(ctx), ["X-Forwarded-Method"] = core.request.get_method(), ["X-Forw

2022-03-26 17:09:56 1598

转载 APISIX源码解析-热更新-动态reload机制

热更新-动态reload机制转载自 https://www.sohu.com/a/516320573_121126896为什么新配置不 reload 就可以生效?apisix可以通过内部的 的/apisix/admin/接口修改配置,请求执行完 Nginx Worker 进程可以立刻生效开源版 Nginx 的请求匹配是基于 3 种不同的容器进行的:将静态哈希表中的 server_name 配置与请求的 Host 域名匹配;其次将静态 Trie 前缀树中的 location 配置与请求的

2022-02-02 17:53:27 1165

转载 APISIX源码解析-ETCD-watch配置机制

ETCD-watch配置机制转载自 https://www.sohu.com/a/516320573_121126896基于 etcd watch 机制的配置同步方案管理集群必须依赖中心化的配置,etcd 就是这样一个数据库。APISIX 没有选择关系型数据库作为配置中心,是因为 etcd 具有以下 2 个优点:etcd 采用类 Paxos 的 Raft 协议保障了数据一致性,它是去中心化的分布式数据库,可靠性高于关系数据库;etcd 的 watch 机制允许客户端监控某个 key 的变动,即,若

2022-02-02 17:26:34 2838

原创 APISIX源码解析-ETCD-new方法

方法介绍 local user_routes, err = core.config.new("/routes", { automatic = true, item_schema = core.schema.route, checker = check_route, filter = filter, }) if not user_routes then error("

2022-01-31 16:19:32 1648

原创 APISIX源码解析-插件-客户端IP【real-ip】

real-ip 客户端IP插件。关键属性源码解析real-ip 插件用于动态改变传递到 APISIX 的客户端的 IP 和端口。

2022-01-30 23:36:25 4218

原创 APISIX源码解析-插件-mqtt协议代理【mqtt-proxy】

mqtt-proxy 固定窗口限速插件关键属性mqtt协议MQTT v3.1.1详细参考 https://www.cnblogs.com/hayasi/p/7743356.htmlMQTT v5.0详细参考 https://www.zybuluo.com/khan-lau/note/1325300源码实现与解析local function parse_mqtt(data) local res = {} -- 返回第一个字节,一个字符一个字节,第一个字节包含连接标志(Co

2022-01-17 15:21:23 3399

原创 APISIX源码解析-执行阶段【stream_init_worker】

APISIX源码解析-执行阶段【stream_init_worker】ngx_lua 模块执行顺序与阶段stream_init_worker()1、插件初始化function _M.init_worker() -- some plugins need to be initialized in init* phases -- 获取当前请求的Nginx子环境(http或stream)。如果在http模块下,就返回字符串http;如果在stream模块下,则返回字符串stream。

2022-01-13 20:50:41 1336

原创 APISIX源码解析-最全最完整

APISIX源码解析APISIX源码解析-env.luaAPISIX源码解析-启动篇【ops.lua - start】APISIX源码解析-执行阶段【init】APISIX源码解析-执行阶段【init_worker】APISIX源码解析-执行阶段【http_access_phase】APISIX源码解析-执行阶段【http_header_filter_phase、http_body_filter_phase、http_log_phase、http_balancer_phase】APISIX源码

2022-01-11 21:09:37 2609

原创 APISIX源码解析-插件-API 熔断【api-breaker】

api-breaker API 熔断插件。关键属性熔断超时逻辑由代码逻辑自动按触发不健康状态的次数递增运算:每当上游服务返回unhealthy.http_statuses配置中的状态码(比如:500),达到unhealthy.failures次时(比如:3 次),认为上游服务处于不健康状态。第一次触发不健康状态,熔断 2 秒。然后,2 秒过后重新开始转发请求到上游服务,如果继续返回unhealthy.http_statuses状态码,记数再次达到unhealthy.failures次时,熔断

2022-01-11 00:23:20 1575

原创 APISIX源码解析-插件-漏桶算法限速【limit-req】

limit-req 漏桶算法限速插件关键属性源码实现local function create_limit_obj(conf) core.log.info("create new limit-req plugin instance") return limit_req_new("plugin-limit-req", conf.rate, conf.burst)endfunction _M.access(conf, ctx) local lim, err = core.

2022-01-09 17:01:25 1333

原创 APISIX源码解析-插件-固定窗口限速【limit-count】

limit-conn 限速插件关键属性local function create_limit_obj(conf) core.log.info("create new limit-count plugin instance") if not conf.policy or conf.policy == "local" then return limit_local_new("plugin-" .. plugin_name, conf.count,

2022-01-08 23:29:48 1866

原创 APISIX源码解析-插件-并发限制【limit-conn】

limit-conn 并发限制插件属性local limit_conn_new = require("resty.limit.conn").newlocal function create_limit_obj(conf) core.log.info("create new limit-conn plugin instance") return limit_conn_new("plugin-limit-conn", conf.conn, conf.burst,

2022-01-06 21:30:49 1627

原创 APISIX源码解析-执行阶段【http_header_filter_phase、http_body_filter_phase、http_log_phase、http_balancer_phase】

http_header_filter_phasefunction _M.http_header_filter_phase() if ngx_var.ctx_ref ~= '' then -- prevent for the table leak local stash_ctx = fetch_ctx() -- internal redirect, so we should apply the ctx if ngx_var.from.

2022-01-04 18:28:31 1906

原创 APISIX源码解析-执行阶段【http_access_phase】

http_access_phase该阶段将rewirte和access阶段合为一体进行处理1、验证client tls2、设置上下文api_ctx.var : cache & request3、route_uri移除末尾的 “/”4、route_uri移除末尾的 “/”api_ctx.var.uri = str_sub(api_ctx.var.uri, 1, #uri - 1)5、 路径以“/apisix”开头的api被视为内部api,匹配uriglobal_rule_skip_.

2022-01-04 17:26:10 2178

原创 APISIX源码解析-执行阶段【init_worker】

APISIX源码解析-执行阶段【init】ngx_lua 模块执行顺序与阶段init_worker()1、初始化woker.eventlocal ok, err = we.configure({shm = "worker-events", interval = 0.1})2、初始化注册中心local ok, err = we.configure({shm = "worker-events", interval = 0.1})注册中心支持:consul、dns、eureka、nacose

2021-12-31 19:05:23 1143

原创 APISIX源码解析-执行阶段【init】

APISIX源码解析-执行阶段【init】ngx_lua 模块执行顺序与阶段ngx_lua属于nginx的一部分,采用插拔式架构,插入式运行在nginx的11个步骤之中了,不过ngx_lua并不是所有阶段都会运行的;另外指令可以在http、server、server if、location、location if几个范围进行配置:http_init()1、根据配置文件设置dns_resolver2、设置apisix实例id,用户可以使用有意义的自定义ID来代替实例idlocal uid_fi

2021-12-07 16:16:00 1152

原创 APISIX源码解析-启动篇【ops.lua - start】

APISIX源码解析-启动篇【ops.lua - start】命令开始入口ops.execute(env, arg) 命令参数校验目前仅支持:help、version、init、init_etcd、start、stop、quit、restart、reloadlocal action = { help = help, version = version, init = init, init_etcd = etcd.init, start = start,

2021-11-28 22:51:08 1361

原创 APISIX源码解析-env.lua

APISIX源码解析-env.luaenv.luaenv.lua源码说明阅读return function (apisix_home, pkg_cpath_org, pkg_path_org) -- only for developer, use current folder as working space local is_root_path = false local script_path = arg[0] if script_path:sub(1, 2) ==

2021-11-28 17:01:02 1261

原创 Guava之Cache使用-Cache&LoadingCache

Guava之Cache使用-Cache&LocalManualCache在使用本地缓存时,我们经常使用ConcurrentMap来实现,但是有时我们会存在一些需求,希望本地缓存数据能够自动过期释放等,在不引入第三方缓存插件(例如:ehcache)下,guava中的cache是一个不二之选Cache&LoadingCaheCache:当不需要自动加载数据时,可直接使用Cache,返回的是LocalCache中的静态类LocalManualCacheLoadingCache:当需要自动加

2021-02-24 21:26:06 1301

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除