APISIX学习笔记

名词概念

Apache APISIX

https://github.com/apache/apisix

The Cloud-Native API Gateway

Apache APISIX is a dynamic, real-time, high-performance API Gateway.

APISIX API Gateway provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.

You can use APISIX API Gateway to handle traditional north-south traffic, as well as east-west traffic between services. It can also be used as a k8s ingress controller.

archtecture

技术栈

Lua + NGINX
插件开发:Java、Golang、Node.js、Python 等语言

EIP

EIP(Elastic IP)即弹性公网 IP,是一种可以独立购买和持有的公网 IP 地址资源。它具有以下特点:

  • 独立购买与持有:您可以单独持有一个 EIP,作为账户下的一个独立资源存在,无需与其他计算资源或存储资源绑定购买。
  • 弹性绑定:您可以在需要时将 EIP 绑定到需要的资源上;在不需要时,将之解绑并释放,避免不必要的计费。
  • 可配置的网络能力:您可以根据需要随时调整 EIP 的带宽值,带宽的修改即时生效。
  • 多种计费策略:EIP 支持多种计费策略,包括按需、按带宽、按流量计费,包年包月价格更优惠。EIP 可以加入共享带宽,降低带宽使用成本。
  • 技术实现:EIP 的实现依赖于云服务提供商的网络基础设施。在实际应用中,EIP 通常被绑定到一个虚拟私有云(VPC)上,通过 NAT(网络地址转换)方式映射到被绑定的资源上。这种映射方式使得被绑定的云资源可以通过 EIP 与公网进行通信。
  • 应用场景:EIP 具有高度的灵活性和可扩展性,它在许多场景中都有广泛的应用,如动态网站、云计算服务、软件开发和测试以及网络安全等。

EIP 的主要优势在于其灵活性和可扩展性,使得用户可以根据业务需求随时调整资源的网络配置,提高云服务的灵活性和可扩展性。

etcd

etcd 是一个开源的分布式键值存储系统,它被设计用于分布式系统中的配置管理、服务发现和协调任务。以下是 etcd 的一些核心特性和用途:

  • 高可用性:etcd 通过多节点集群和自动故障转移机制,确保即使部分节点出现故障,系统仍然能够保持服务的持续可用。
  • 强一致性:etcd 使用 Raft 协议来确保集群内的数据一致性,任何时候都能保证数据的准确性和可靠性。
  • 简单的 API:etcd 提供了简单易用的 HTTP/JSON API,使得开发者能够方便地进行集成和操作。
  • 可靠的持久化:etcd 使用高效的存储机制,确保数据的持久化和快速恢复能力。
  • 监控与通知:支持键值的监控和变更通知,方便实现动态配置和事件驱动的应用逻辑。
  • 应用场景:etcd 在稳定性、可靠性和可伸缩性上表现极佳,同时也为云原生应用系统提供了协调机制。它经常用于服务注册与发现的场景,此外还有键值对存储、消息发布与订阅、分布式锁等场景。
  • 配置管理:etcd 可以集中存储和管理应用程序的配置参数,支持动态更新和实时推送,确保所有节点获取到最新的配置信息。
  • 服务注册与发现:基于 Raft 算法,能够有力地保证分布式场景中的一致性。各个服务启动时注册到 etcd 上,同时为这些服务配置键的 TTL 时间。注册到 etcd 上面的各个服务实例通过心跳的方式定期续租,实现服务实例的状态监控。
  • 数据持久化:etcd 将数据持久化到磁盘,保证了数据的可靠存储和持久化。同时,通过数据备份和恢复机制,实现了故障转移和数据高可用。
  • 快速读写:etcd 提供了高性能的读写操作,支持每秒数千次写入。这使得 etcd 能满足大规模分布式系统的需求,为微服务架构、容器编排等应用提供了强大的支持。

etcd 是许多其他项目的核心组件,最值得注意的是,它是 Kubernetes 的首要数据存储,也是容器编排的实际标准系统。使用 etcd,云原生应用可以保持更为一致的运行时间,而且在个别服务器发生故障时也能正常工作。

TTL

TTL(Time To Live),即“生存时间”,是一个网络术语,用于描述数据包(如 IP 数据包)在网络中可以经过的最大路由器数量,或者数据在网络中可以存在的时间。TTL 有两个主要的含义:

  • IP 数据包的生存时间:
    在网络协议中,TTL 是一个字段,用于限制数据包在到达目的地之前可以经过的最大路由器(或节点)数量。每经过一个路由器,TTL 值就会减 1,当 TTL 值减到 0 时,数据包将被丢弃,并且发送源会收到一个 ICMP“超时”消息。这个机制可以防止数据包在网络中无限循环,有助于网络的稳定性和效率。

  • 数据存储的生存时间:
    在数据库和缓存系统中,TTL 用于定义数据项在被自动删除之前可以存储的时间长度。例如,在键值存储系统(如 Redis、Memcached)中,可以为每个键值对设置一个 TTL 值,当数据存储到系统中后,会开始一个倒计时,一旦达到设定的时间,数据就会被自动删除。这有助于管理内存或存储空间,确保旧数据不会无限期占用资源。

HxApisix

项目基于 apache apisix(The Cloud-Native API Gateway) 2.13.0 版本进行二次开发

解析流程

User->问财 Nginx->我的 apisix->我的容器

资料

有了 NGINX 和 Kong,为什么还需要 Apache APISIX:
https://www.apiseven.com/blog/why-we-need-apache-apisix

内部资料

使用文档

概念