基于 Apache APISIX 的服务网格方案

服务网格(ServiceMesh)是处理服务间通信的基础设施层 。 它负责构成现代云原生应用程序的复杂服务拓扑来可靠地交付请求 。 通常会为每个服务实例提供一个“边车”(sidecar)代理实例 。 边车会处理服务间的通信、监控和安全相关的问题 , 以及任何可以从各服务中抽象出来的逻辑 。
本文将从四个方面介绍 , 首先简单介绍下ApacheAPISIX 。 第二 , 当ApacheAPISIX在服务网格方案中作为数据面时会遇到哪些问题?我们怎么解决这些问题?第三 , ApacheAPISIX作为网格的sidecar时有哪些优势 。 最后 , 介绍基于ApacheAPISIX的服务网格的规划和发展方向 。
1.ApacheAPISIX简介
ApacheAPISIX是一个动态、实时、高性能的API网关 , 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能 。
1.1功能亮点
下面列举出ApacheAPISIX的部分功能亮点 , 更多功能特性请访问Github仓库主页 。
全动态
ApacheAPISIX是全动态的云原生API网关 , 上游、SSL证书、路由、插件等所有功能 , 都支持动态更新 , 不需要reload就能实时生效 , 不会产生断连的情况 。
丰富的负载均衡策略
ApacheAPISIX支持比较多的负载均衡策略 , 如:最常用的带权轮询、一致性hash、EWMA算法(指数加权移动平均法) 。
支持服务发现、服务治理
ApahceAPISIX提供服务发现的功能 , 如:可以和Consul和Nacos的组件对接 , 实现服务发现的功能 。 同时也支持服务治理相关的功能 , 如:限流、限速、熔断等 。
扩展能力强
ApacheAPISIX是完全基于插件进行扩展的 , 二次开发难度比较低 , 而且还能通过Lua、Java、Go和WASM等来开发自定义插件 。 借助灵活的插件机制 , 可针对内部业务完成功能定制 。
1.2架构
基于 Apache APISIX 的服务网格方案
文章图片
ApacheAPISIX的架构图
这是ApacheAPISIX的架构图 , 左边是数据面(DataPlane) , 右边是管理面(ControlPlane) , 配置中心选择了当下最成熟的基础设施:etcd , 通过watchetcd , 拿到路由、上游等数据 。
在这个架构里面 , 找不到一个单点 , 其中任何一个服务出现异常宕机等事故 , 都不会影响APISIX正常对外提供服务的能力 。 当整体架构中的每一个点都支持高可用时 , 用户生产系统的高稳定性就非常容易实现 。
1.3活跃的社区
基于 Apache APISIX 的服务网格方案
文章图片
ApacheAPISIX有一个活跃健康的社区 , 截止到目前(主仓库)已经有200多个贡献者 , 和ApacheAPISIX相关的项目贡献者有近300人 。 ApacheAPISIX自从2019年6月份开源以来 , 截止目前一共收到了2200多个PR;坚持每个月发布一个版本 , 至今已经发布了27个版本 。
2.ApacheAPISIX服务网格方案
2.1为什么要使用服务网格?
各公司技术团队引入服务网格有各自的原因 , 如:公司里技术栈比较分散 , 需要在不同技术栈内完成同样的服务治理;需要维护多个版本 , 不同版本由不同团队维护 , 沟通成本比较高 , 这可能会带来一些差异性 , 可能引发一些故障 。
服务网格有一个非常重要的一个特性 , 就是服务治理 。 把限流限速、服务发现、服务注册、熔断等功能通过服务网格的方式下沉到基础组件 , 使业务研发人员不需要去关注服务治理 , 全神贯注实现业务层的开发 , 效率会提高 , 同时服务的稳定性也会提升 。 这是引入服务网格可能会带来的一些好处 。
2.2API网关的优势
API网关是API管理这个范畴的一个工具 , 除了把服务所提供的API暴露出来 , 供其他服务调用以外 , 也有一些和服务网格重叠的特性 , 如:服务治理——服务发现、限流限速、熔断 。 通过还会在API网关层做认证、授权 。 这是API网关的一些优势 。