2021看看 *** 系统的流行架构,包括WAF,安全网关、负载均衡等。
系统的质量属性应满足客户的需求,因此架构的之一个起点也是需求。
有偏好的需求构成场景,结构的选择是基于应用场景的偏好。
管道中 *** 系统的位置大致分为两类:
傻快型
内容无感知,主要是交换和路由。如各种交换机、路由器等设备,主要依靠硬件。
纯软件实现的需求主要是牺牲一些硬件的高性能,换取管理和维护的便利性和统一性,如SDN,NFV。
目前,硬件和软件一般用于集成x86高速可编程架构的架构NIC和转发芯片(如支持)P4)。
获得性能和管理的双重优势。
但本质上还是矛盾的,硬件的特殊化会带来管理的特殊化,具体问题需要具体讨论和解决。
智慧型
内容感知,主要是业务驱动的负载平衡和网关系统。如负载平衡,API网关等,主要靠软件。
今日重点介绍2021年软件上的流行架构。
由于两种类型之间没有明显的界限,但有一些内容感知,业务驱动的 *** 系统在互联网行业有很大的需求。
因此, *** 基础设施软件化不仅是一个统一的管理问题,而且在通用设备很难完美解决具体的业务问题。
虽然软件实现的性能不好,但其灵活性和解偶硬件带来的收入大于性能收入,其横向扩展能力也弥补了整体性能。收入主要体现在快速迭代(满足需求的速度)、硬件统一、部署灵活、操作和维护简单。因此,引入硬件解决单点性能问题是第二个考虑因素。
我们一层一层地说。
eBPF - Passthrough
2021年eBPF打底应该没有争议。eBPF实现的XDP与DPDK,结合我们刚才提到的问题。DPDK还是有Intel,DPDK网卡的硬件约束eBPF系统约束较小,Kernel > 4.8可以。虽然性能稍弱,但可以纯Linux在用户态和内核态对接中灵活运行,需求迭代速度也远高DPDK。所以软件上做傻快型可以选择DPDK,但智慧型XDP更适合。
以此为基础的项目有k8s *** 组件Cilium,Facebook均衡的业务负荷Katran。
Cilium - Network
迭代和硬件完成后,让我们来看看部署:盒子、私人系统和各种云。相应的是Metal,VM,容器等eBPF没有操作系统的约束Rare Metal不在讨论范围内,更适合傻快的方案。
可以在各种部署下运行的 *** 是用户态 *** 。XDP只要内核满足Linux,Cilium已证明与容器结合,DPDK更费力。所以还是eBPF更有优势。基于此的软件系统可以安装在任何地方Linux,VM,Docker上,实现各种环境的架构统一。
未来应该还有其他 *** 层XDP如果不需要路由交换的 *** 功能,可以直接与应用程序结合,如Katran。
Envoy - Gateway
Cilium解决 *** 问题,路由交换,简单策略。但是业务感知需要灵活的网关,我之前研究过网关的选择。
https://donge.org/posts/envoy-vs-traefik/
如果选择这里的 *** Cilium(主要是容器场景),所以更好。Envoy,Evony在业务感知、业务路由和网关四层,战略配置驱动和插件机制强,也是快速迭代的首选。
虽然这里有一个K8S中CNI的图,但Cilium也可作为具有 *** 路由功能的用户态协议栈使用,也可省略。
Golang - Plugins
具体业务由通用网关驱动,插件或二次开发无法绕过,平衡性能和迭代速度,Golang比C ,Lua,JavaScript,Rust都稍微占一些优势。因为开发效率和不俗的性能。Envoy是C ,有开发门槛,但插件系统相对完善,Cilium是Golang。
WA *** 插件也是一个强有力的方案,但今年优势早,得不偿失。Golang也不冲突,Envoy同时也支持WA *** 和LUA。
但只要不是每天变化的逻辑,Golang中庸综合实例略胜一筹。
未来Rust with WA *** 很有想象力。
全家福
为什么叫2021流行架构,因为过几年可能会有更好的选择,就像XDP对比DPDK优点,符合一些DPDK出生时没有的潮流,比如容器化。
最后牺牲这张原创全家福,欢迎抄袭。
在此基础上,包括业务路由(负载均衡)在内的大多数 *** 系统都能快速满足,WAF,API网关、单点认证、日志、QoS,跟踪系统等。无硬件依赖环境,如单机、私有化、混合云环境等。
虽然性能在第二梯队,但是XDP,Golang这种选择也是第二梯队之王。 *** 性能的热点更有可能在IO,并发(锁),加解密/压缩反压缩(计算),他们的解决方案从来都不是什么语言,有机会再讨论。
P.S. K3S是轻量级K8S,适用于小系统部署。
参考文档:
- http://arthurchiao.art/blog/transparent-chaos-testing-with-envoy-cilium-ebpf-zh/
- https://gitlab.com/gitlab-org/gitlab/-/issues/205129
- https://github.com/zoidbergwill/awesome-ebpf