开启云原生 MOSN 新篇章 — 融合 Envoy 和 GoLang 生态

Envoy架构理解--理解xDS/Listener/Cluster/Router/Filter Envoy 是一个开源的边缘服务代理,也是 Istio Service Mesh 默认的数据平面,专为云原生应用程序设计。 阅读详情

注:本文是王发康(毅松)在 2021 GopherChina 上演讲的文字稿,相关分享 PPT 可自行到 MOSN meetup 下载。

MOSN meetup 地址:

https://github.com/mosn/meetup

MOSN 官方 Github 地址:

https://github.com/mosn/mosn

GitHub 地址:‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍https://github.com/sofastack‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

前言

MOSN 在 Service Mesh 领域作为东西向服务治理网络在蚂蚁集团双 11 、春节红包等活动及开源社区都得到了一定实践。为了能够让社区用户更好的享受到这一技术红利,MOSN 从 2018 年开源以来在社区开发者、用户的共同努力下,使得 MOSN 在云原生演进方面做了很多探索和实践。比如 Istio 下另一个数据面 — MOSN、WebAssembly 在 MOSN 中的探索与实践、MOSN 子项目 Layotto:开启服务网格+应用运行时新篇章、MOSN 基于 Sentinel 的限流实践、MOSN 中玩转 Dubbo-go 等周边生态展开合作。

Istio 下另一个数据面 — MOSN 文章链接:

https://istio.io/latest/blog/2020/mosn-proxy

MOSN 基于 Sentinel 的限流实践文章链接:

https://github.com/mosn/mosn/pull/1111

MOSN 中玩转 Dubbo-go 等周边生态展开合作文章链接:

https://mosn.io/blog/posts/mosn-dubbo-integrate/

2021 年为了更好的为业务提效,MOSN 开启了将云原生进行到底的决心。本文介绍了 MOSN 在网络扩展层的思考和技术选型,以及最终是如何通过使用 Envoy 作为 MOSN 的网络层扩展,从而实现 MOSN 和 Envoy 生态打通。使得网络层具备 C++ 高性能的同时,上层业务治理能力也能借助 GoLang 进行高效的定制化开发。

面临的问题及挑战

一、社区生态,如何最大化求同存异

最近几年 Service Mesh 技术在云原生社区也是百花齐放,虽然 MOSN 在开源社区也是备受开发者的关注,但是 Envoy 经过长久的发展其社区的活跃度和用户量的积累这点是不可忽略的。另外选择 MOSN 的用户都是看重其二次开发的便捷性以及 GoLang 的生态丰富,选择 Envoy 的用户主要是看重其高性能的网络处理能力及社区的活跃度。那我们是否能够通过技术的手段将其二者优势融为一体,发挥各自的特长,不要让用户顾此失彼。

二、单一的 Proxy,无法支撑其架构的演进

在 Proxy 层面,无论是 MOSN 还是 Envoy 都是在各自领域中发挥优势。随着云原生技术的快速发展和成熟以及业务的增长,既要 Proxy 能够具备高研发效能,还要具备高处理性能,而单一的 Proxy 已经无法满足当前业务架构上的持续演进。

  • 东西向和南北向数据面 Proxy 逐步统一:两套数据面定位不同但功能上存在一定重叠,导致维护成本高,未来需要逐步收敛。这就要求 Proxy 不仅具备易扩展性方便业务方扩展东西向业务上的流量治理能力,而且还要具备抗高并发的能力满足南北向高流量转发。

  • Service Mesh 部署形态逐步向 Node 化架构演进:Service Mesh 规模化后,由于多出的 Proxy 势必会导致一定资源上的浪费,那在中心化和 Mesh 化之间做一次折中,即通过 Node 化部署形态来解决。Node 化后就要求 Proxy 能够高效、稳定的承载多个 POD 的流量治理。

  • Service Mesh 需要同时具备 Application Runtime 能力:虽然 Service Mesh 解决了微服务治理的痛点,但在实际业务开发中,缓存、数据库、消息队列、配置管理等,仍然需要维护一套重量级的 SDK 并且侵入应用代码。目前业界的解决方案是在 Service Mesh 的基础上多引入一个 Proxy 如 Dapr 来解决,这就导致应用的 POD 需要维护多个容器,所以如何让 Service Mesh 的 Proxy 具备快速复用 Dapr 能力成为解决该问题的关键。

我们的思考

针对上述问题分析过后,其实背后的原因是有共性的。比如将其统一为一个 sidecar,如果单纯的从一个数据面改为另一个,那其中的改造成本是巨大的。那是否可以换个思路,为 MOSN 的网络层增加可扩展性,即可以让 MOSN 的网络处理直接下沉至 Envoy,同时将这个能力剥离出来成为 Envoy 在 GoLang 上的一个标准能力,这样就能够让 Envoy 和 MOSN 互相复用已有的能力。二者相互融合,各取所长,使其同时具备高研发效能和处理性能高,自然而然就解决上述“单一的 Proxy,无法支撑架构的演进”和“社区生态,如何最大化求同存异”所面临的问题。相互融合后,不仅融合了各种的优势,而且也能够把两边的生态打通,借此 MOSN 社区和 Envoy 社区能形成双赢的局面。

方案调研与分析

知道当前面临问题的原因后,便有了一个宏观的解决方向。于是就对此展开了相关调研,梳理了业界针对此问题的一些解决方案,综合各种方案的优劣势并结合蚂蚁业务现状以及开源社区用户的痛点进行了分析和评估。

扩展方案调研

扩展方案评估

通过上述方案优劣势的对比以及评估,MOE(MOSN on Envoy) 相比 ext-proc 无需跨进程 gRPC 通信,性能高,易管理;相比 Envoy WASM 扩展无需网络 IO 操作转换成本;相比 Lua 扩展生态好、能复用现有的 SDK,对于处理上层业务更合适。

同时我们将 Envoy 中增加 GoLang 扩展的这个方案也在 Envoy 社区进行了讨论,也得到了 Envoy 社区 Maintainer 的赞同。其中依赖的技术 CGO 是 GoLang 官方出品,该技术基本上在 GoLang 每个 release notes 中都有提到,说明也一直在维护的。另外业界也有很多项目在使用这项技术(比如:NanoVisor、Cilium、NginxUnit、Dragonboat、Badger、Go withOpenCV etc)其稳定性已经过一定的考验了,同时我们自己也测试了 CGO 自身的开销在 0.08 ~ 1.626 微秒,而且调用开销也是属于线性增长而非指数增长趋势。

所以综合稳定性、性能、改造成本以及社区生态等因素评估,MOE 解决方案无论在当前阶段还是未来都具备一定优势。

方案介绍

一、整体架构

如下是 MOE 的整体架构图,最下面是各种高性能数据面,目前我们主要适配的是 Envoy。在数据面之上剥离了一层 GoLang L7 extension filter 的抽象,用于和底层的数据面连通;然后在 MOSN 侧通过 GoLang L7 extension SDK 将 MOSN 连通;最后通过 CGO 这个通道将 Envoy 和 MOSN 打通。

整体架构如上图所示,其核心包括如下三部分组成:

  • GoLang L4/L7 extension filter

    使用 C++ 实现的 Envoy 侧的 GoLang L4/L7 filter ,该模块通过 CGO API 来调用 GoLang 实现的 L4/L7 extension filter。

  • GoLang L4/L7 extension SDK

    GoLang L4/L7 extension SDK 会导出一些 CGO API,用于 Golang L4/L7 extension filter 和 L4/L7 extension GoLang filter 交互。

  • L4/L7 extension filter via GoLang

    L4/L7 extension filter 是 GoLang 语言开发的,用于对 Envoy 的请求或者响应做一些处理,最终是运行在 Envoy 工作线程之中。

二、功能职责

通过上面对整体架构的介绍,应该对 MOE 有了一个宏观上的认识。接下来我们通过功能职责方面来介绍下 MOE 中 MOSN 和 Envoy 是如何各司其职的:整体思路就是充分发挥 GoLang 的高研发效能以及 Envoy 在网络层的高性能特性,所以在 MOSN 侧来扩展上层业务的服务治理能力,复用 Envoy 底层高效的 Eventloop 网络模型。

MOSN 侧做业务扩展:扩展非 xDS 服务发现、扩展 L4/L7 filter、扩展 Xprotocol 支持、Debug 及 Admin 管理、Metrics 监控统计;

Envoy 侧复用基础能力:复用高效 Eventloop 模型、复用 xDS 服务元数据通道、复用 L4/L7 filter、复用 Cluster LB、复用 State 统计。

三、工作流程

通过使用 GoLang 在 Envoy 中实现的“TraceID 事例”来介绍 Envoy GoLang extension 的工作流程:

1、请求/响应到达 Envoy 后,通过 GoLang L7 extension filter 将请求/响应信息通过 API 封装为特定格式;

2、然后将其封装后的结构体通过 CGO API 传递给 GoLang extension framework;

3、该框架收到数据后将会执行 Trace ID filter(GoLang 实现的 Filter,用于生成一个 trace id 请求 header);

4、当 GoLang filter 执行完成后,会把处理后的信息通过特定的结构体返回给 GoLang L7 extension filter;

5、GoLang L7 extension filter 收到返回的特定结构体信息后,将其操作生效到当前请求/响应。

其中在上述的(1、2、4、5)步骤中涉及到 Envoy 和 GoLang 的交互协议、(2、4)中涉及到 Envoy 和 GoLang 之间的内存如何管理、(2)中阻塞操作处理,接下来是这些问题的解决方案:

  • 交互协议(1、2、4、5)

    将 Envoy 的请求使用 GoLang L7 extension filter 的 proxy_golang API(GoLang L7 extension SDK)进行封装,然后通过 CGO 通知 GoLang 侧的 filter manager 进行处理,其流程如下图所示:

    当 Envoy 侧收到请求后,将请求的 header、body、trailer 封装为 CGO_Request 类型,然后调用 proxy_golang_on_request,GoLang filter 处理后的结果会封装为 CGO_Response 返回给 Envoy 继续处理。当 Envoy 侧收到响应后,将响应的 header、body、trailer 封装为 CGO_Resquest 类型,然后调用 proxy_golang_on_response,GoLang filter 处理后的结果会封装为 CGO_Response 返回给 Envoy 继续处理。同时我们也期望可以和 Envoy、Cilium、WASM 社区合作共建这套 API 规范,这样可以使得多个扩展方案底层依赖的 API 能够标准化。

  • 内存管理(2、4)

    请求链路(CGO Request)

    问题:将 Envoy 中的请求信息如何高效的传送给 GoLang,应该避免无效的内存拷贝操作。

    方案:将 GoLang 中使用的 header、body 等信息直接指向 Envoy 的请求 header、body 的指针,这样请求从 Envoy 到达 GoLang 就不需要拷贝。

    响应链路(CGO Response)

    问题:请求在 GoLang 侧执行完成后,将处理结果返回给 Envoy,如果直接使用 GoLang 返回的内存是不安全的,因为 GoLang 中的内存可能会被 GC。

    方案:把 GoLang 中生成的 CGO_Response 对象储到全局的 map 中,通过请求 id 进行映射,待 Envoy 使用完后,在将其对应的结构体从 map 中删除。

  • 阻塞处理(2)

    首先 Envoy 的事件模型是异步非阻塞的,如果 GoLang 实现的 HTTP filter 存在阻塞操作需要如何处理?

    对于纯计算(非阻塞)或请求链路中的旁路阻塞操作,按照正常流程执行即可。对于阻塞操作,通过 GoLang 的 goroutine(协程) 结合 Envoy 的 event loop callback 机制来解决:

    1、当请求传递到 GoLang 侧后,如果发现 GoLang 实现的 filter 中有阻塞操作;

    2、则 GoLang 侧会立刻启动一个 goroutine 用来执行阻塞操作,同时会立刻返回,并告知 Envoy 需要异步操作;

    3、Envoy 收到该消息后,则会停止该请求上的 filter 处理,然后继续处理其他的请求;

    4、当 Golang 侧的阻塞操作执行完成后,则会通过 dispatcher post 一个事件告诉 Envoy 继续处理该请求。

除了上述我们在 GoLang 侧自身程序出现同步导致的阻塞外,是否还有其他场景?

我们都知道 GoLang 程序是 GMP 模型的,CGO 也是要遵守的,当 Envoy 通过 CGO 执行 MOSN(GoLang),此时 P 的数量如何管理?M 从哪来?

M 的问题比较好解决,由于宿主程序是 C 系列的,所以会把当前 Envoy 线程通过 GoLang runtime 的 needm 来伪装成一个 M。其次就是 P 这个资源比较关键,如果此时没有空闲的 P 此时就会卡主 CGO 执行,虽然目前我们生产上还未出现该问题,但是还是有这个可能性的。所以目前我们想到的解决方案就是为 Envoy 每个 worker thread 都预留对应的 P,保证每次 CGO 的时候都可以找到 P 资源。

服务相关元数据如何管理

MOSN 和 Envoy 的相关服务元数据信息,是如何交互管理的?通过扩展 Envoy 中的 Admin API 使其支持 xDS 同等功能的 API, MOSN 集成的 Service Discovery 组件通过该 API(rest http) 和 Envoy 交互。使其 MOE 的服务发现能力也具备“双模”能力,可同时满足大规模及云原生的服务发现通道。

如何 Debug

MOSN 和 Envoy 相互融合后,在运行时变为一个进程了,那之前的可观测性以及调试如何保障?关于可观测性方面这块可以直接复用 MOSN 和 Envoy 自带 admin API 及 metrics 功能,关于两者之间的交互层我们增加了每次交互的耗时以及异常下的容灾保护。最后就是关于一个程序即有 C++ 又有 GoLang 如何便捷性调试的问题,对此我们调研了相关方案,通过 net/rpc 网络库模拟  CGO 的调用,使得用户调试 GoLang 侧和之前 Native GoLang 一样的方式调试即可。

方案总结

MOE 借助 CGO 通道不仅将 Envoy 和 MOSN 二者优势融为一体,而且将 GoLang 生态集成进 Envoy 变成了可能。在研发效能方面通过将 MOSN 作为 Envoy 的动态库,上层业务改动只需编译 GoLang 代码即可,极大的提升了编译速度,同时也增强了 Envoy 的自身扩展能力,使其能够方便复用 MOSN 中现有的服务治理能力。性能方面,MOE 复用 Envoy 的高效网络通道,之间的数据拷贝实现了 Zero Copy 可为 Dapr、Layotto 等提供高效网络通道,同时 Envoy 使用 C++/C 系可方便的集成硬件加速能力。关于在服务元数据通道方面,MOE 即可复用 Envoy 原生的 xDS 又可以方便的集成 GoLang Discovery SDK 实现多种服务元数据通道支持。最后 MOE 不仅单纯的将两个软件的优势做了加法,更重要的是使得 MOSN/GoLang 可以和 Envoy 生态拉通,实现多社区技术共享。

开源共建及展望

秉着借力开源,反哺开源的思路。当我们对 MOE 方案 POC 验证可行性后,我们也将这个思路在 MOSN 和 Envoy 社区展开了相关的 A proposal of high-performance L7 network GoLang extension for Envoy 讨论。在得到 Envoy maintainer 的认可后,我们也在主导关于使用 GoLang 来扩展 Envoy 的提案:Envoy's GoLang extension proposal ,欢迎大家参与进来讨论。

另外,近期我们也在设计 MOE 具备 L4 的 GoLang 扩展能力,这样可方便使得 Envoy 集成 Layotto 或 Dapr 能力,从而同一个 sidecar 可具备 Service Mesh 与 Application runtime 能力,解决一个应用部署多个 Sidecar 导致的运维复杂性问题。

方案实施效果

踩坑记录

前面我们对 MOE 从整体架构、功能职责以及工作流程做了详细的介绍,看似整体流程是可以跑通了。但是在我们落地实践的过程中也是遇到了不少问题。

下面这个列子就是在 MOE 工程中剥离出来的一个问题的最小复现场景,当时我们在 CGO 传递数据的过程中,为了方便我们直接在 C++ 侧通过指针来保存 header 的长度,当其传递到 GoLang 侧的时候,运行着运行着就 panic 掉了,如下所示:

通过分析后,发现是由于 GoLang 的函数栈在运行时触发了栈扩容操作,从而会触发 GoLang runtime 对当前函数栈上的指针做了一系列操作。对上述问题有影响的操作包括两个:其一是会对当前栈上的指针指向的地址做判断,检查是否是一个安全的地址;其二是判断当前栈上的指针指向的地址是否位于即将要扩容或者缩容的函数栈空间范围内,如果在该范围,则会根据扩缩容函数栈后的偏移量直接修改指针指向的地址。然而在我们的场景中,直接使用指针来存储长度,这将导致 runtime 中的第一个操作检查不通过,直接抛异常。虽然当时我们通过调整 GoLang runtime invalidPtr 来绕过第一个检查报错,但一旦我们所记录的长度正好和函数栈地址空间有交集的话,那对应长度的值也是会被修改的,所以也是不能满足的。最后通过修改了长度的传递存储方式来解决该问题。

由于篇幅有限,本文就不对所有问题进行展开了,整体来说遇到的问题还是非常有趣的,对此感兴趣或有疑问的欢迎找我们交流。

最佳实践

从 2021 年 1 月到 3 月期间我们进行了 MOE 的方案设计到编码实现,并在 2 月份在 gRPC 网关集群进行了小规模试点,各项指标都正常,MOE 雏形方案得到了线上真实流量的验证。于是 3 月份的时候我们就找到兄弟团队相关同学讨论:今年有一个目标需要全站资源成本优化,我们基础设施是不是可以做点什么?所以就顺利成章的引出了 MOE 合作契机,经过几轮讨论以及简单的 POC 验证后决定在经济体互通网关场景,将内部的一个 Native Go 实现的网关基于 MOE 架构来替代蚂蚁侧的互通网关。其部署架构如下图所示(目前互通网关蚂蚁侧已经在灰度中):

双方目标达成一致后,就准备开干了。虽然 MOE 雏形之前已经踩过一些坑了,但是在实际适配的过程中还是多多少少遇到了一些问题,那最终我们也赶在了 6.18 这个时间点前进行了灰度上线。如下引自第一个基于 MOE 架构来替换网关的实践 —《融合 Envoy 和 Go 语言生态打造高性能网关》,后续会有相关文章,敬请关注。

经过这样一番“折腾”,最终新版本基于 MOE 的网关在 6.18 活动前上线,并承担了总体流量的 10%,整体表现平稳,符合预期,现在逐步扩大引流中(截止 7 月 2 号引进引流到 30% 左右)。从我们的压测数据上看,相较于老版本,CPU 使用率和请求 RT 都有显著下降,在TCP 连接数越高的场景,优势越明显,总体上能够取得 2.6~4.3 倍的 QPS 性能提升。

总结

MOE 技术方案使得 MOSN/GoLang 和 Envoy 相互融合成为了可能,打破了 MOSN/GoLang 和 Envoy 割裂的社区生态现状,为将来 Proxy 的持续演进奠定了坚实的技术基础。随着在经济体互通蚂蚁侧网关的落地实践,其 MOE 技术方案的稳定性、可靠性、易用性等方面都得到了一定的考验。同时秉着对技术的高标准要求以及能够更好的服务好我们的用户,我们也会持续探索和优化 MOE,如果该方案能也够解决你业务上遇到的问题,欢迎联系我们,最后感谢正在关注此项技术的用户,欢迎和我们交流和讨论!MOSN 用户交流群钉钉群号:33547952。

推荐阅读


基于Envoy构建的功能丰富,Kubernetes原生的下一代API网关-Golang开发 Envoy驱动的API网关Gloo是功能丰富的Kubernetes原生入口控制器和下一代API网关。 Gloo在功能级别的路由方面表现出色。 它对遗留应用程序,微服务和服务的支持Envoy支持的API网关Gloo是功能丰富的Kubernetes本地入口控制器和下一代API网关。 Gloo在功能级别的路由方面表现出色。 对旧版应用程序,微服务和无服务器的支持; 它的发现能力; 它的众多功能; 并与领先的开源项目紧密集成。 Gloo的独特设计旨在支持混合应用程序,其中多种技术,体系结构,协议和云可以共存。 安装 立即下载

相关推荐

Go-MOSN是一款采用Golang开发的ServiceMesh数据平面代理功能和定位类似Envoy

MOSN是一款采用 Golang 开发的Service Mesh数据平面代理,功能和定位类似Envoy,旨在提供分布式,模块化,可观察,智能化的代理能力。MOSN支持Envoy和Istio的API,可以和Istio集成。Sofa Mesh中,我们使用MOSN替代Envoy。

MoE 系列(一)|如何使用 Golang 扩展 Envoy

文|朱德江(GitHub ID:doujiang24)MOSN 项目核心开发者蚂蚁集团技术专家专注于云原生网关研发的相关工作本文2680字 阅读 7分钟本文作为 MoE 系列第一篇,主要介绍用 Golang 扩展 Envoy 的极速开发体验。一、背景MoE(MOSN on Envoy)是 MOSN 团队提出的技术架构,经过近两年的发展,在蚂蚁内部已经得到了很好的验证;并且去年我们也将底层的 ...

金融级分布式架构 746

程序员实战:DINOv3 权重文件下载与本地化部署全流程指南

Meta开源的DINOv3视觉大模型凭借70亿参数和17亿图像训练,在语义分割、目标检测等任务表现优异。本文详解预训练权重的获取渠道、校验方法和加载实践。开发者可通过HuggingFace或GitHub获取不同版本权重,包括针对服务器端的ViT系列和边缘设备的ConvNeXt系列。文章提供MD5校验代码确保文件完整性,并给出PyTorch和Transformers两种加载方式。特别强调7B模型需16GB GPU内存,建议根据硬件条件选择合适版本,如边缘设备使用ConvNeXt-Tiny。最后指出DINOv3

xiugou3365的博客 5906

MOSN 多协议扩展开发实践

Service Mesh 是当今云原生的关键部分,蚂蚁已经在生产环境完成了大规模的落地,但是业界整体 Service Mesh 改造程度还不高。其中平稳的进行 Mesh 化改造是可以对已上...

金融级分布式架构 462

C++和蓝图1:Unreal Engine 中 C++ 与蓝图的桥梁

摘要: 本文介绍了Unreal Engine(UE)中C++与蓝图可视化脚本的结合机制,重点解析了宏系统(UCLASS、UPROPERTY、UFUNCTION)如何实现代码与蓝图的交互。相比Unity的纯C#脚本模式,UE的双轨制开发允许程序员用C++处理核心逻辑,同时通过蓝图让非程序员快速迭代。文章对比了两大引擎的编程范式差异,指出UE的反射系统和宏标记提供了更精细的控制,并给出了从Unity迁移到UE的具体思路。核心在于理解UE的混合编程优势:C++保证性能,蓝图提升开发效率,二者通过宏系统无缝协作。

qq_46348216的博客 1407

ROS2理论与实践_宇树机器人Go2开发指南(文字)

本文介绍了Unitree Go2机器人ROS2开发环境的安装与配置流程。主要内容包括:1)从GitHub克隆unitree_ros2仓库;2)安装ROS2 Foxy版本依赖项;3)编译特定版本的CycloneDDS(0.10.2);4)编译unitree_go和unitree_api功能包;5)网络配置,包括设置静态IP和修改环境变量脚本setup.sh以指定网络接口。文章还提供了本地回环测试的替代方案,并建议配置完成后重启电脑。整个流程涉及ROS2环境切换、网络适配和编译安装等多个技术环节。

Li_Dongyi的博客 4205

Traefik:云原生的边缘路由器1:概要介绍

Traefik是一个Go语言开发的边缘路由器,可以用作HTTP反向代理或者负载均衡等。Traefik明确将自身定位为云原生的边缘路由器,这篇文章将对Traefik的特性进行介绍。

知行合一 止于至善 2330

软件项目质量管理

识别项目中涉及质量管理的不同角色,如项目经理、质量经理、测试人员等,明确每个角色的职责和任务,包括负责哪些质量管理活动和决策。1、编制软件项目的质量管理计划,包括确定项目的质量标准和要求,以及制定质量控制和质量保证策略等。2、编制软件项目的质量管理计划,包括确定项目的质量标准和要求,以及制定质量控制和质量保证策略等。测试用例表是质量控制过程中的关键工具,确保所有功能和场景都被验证,减少项目中的缺陷。1、理解项目质量管理的基本过程,包括质量计划、质量保证、质量控制和质量改进;明确质量管理活动中的角色和职责。

weixin_51996255的博客 1259

使用 Golang 扩展 Envoy 代理 - WASM 过滤器

Envoy 是一个开源的服务代理,Envoy 专为云原生应用而设计。 Envoy具有很多的特性,如连接池、重试机制、TLS 管理、压缩、健康检查、故障注入、速率限制、授权等。而这些功能都是通过内置的http 过滤器实现的。现在,我们我们介绍一个特殊的过滤器 - WASM 过滤器。 这篇文章不会解释什么是 WASM,所以对 WASM 不做过多的介绍,而是在文章末尾添加相关资源链接。 为什么使用 WASM 过滤器 在 Trendyol 科技公司。...

tanjunchen的博客 2311

【遥感数字图像处理(朱文泉)】第四章 变换域处理方法

变换域的处理方法

甜子yu的博客 4311

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2886

开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态

注:本文是王发康(毅松)在 2021 GopherChina 上演讲的文字稿,相关分享 PPT 可自行到 MOSN meetup 下载。MOSN meetup 地址:https://git...

梦醒人间 1007

广义S变换在MATLAB中的仿真

广义S变换是对信号进行时频分析的一种方法,它基于短时傅里叶变换(Short-Time Fourier Transform,STFT)和小波变换(Wavelet Transform)。广义S变换将信号分解成时频平面上的一系列矩形框,每个框内的数值表示相应时刻和频率下信号的能量。本文将介绍如何使用MATLAB进行广义S变换的仿真,并提供相应的源代码。函数,我们可以方便地计算信号的广义S变换,并获取时频平面上的时域和频域信息。广义S变换在信号处理和相关领域中具有广泛的应用,可以用于分析和处理各种类型的信号。

CodeNexus的博客 1119

MOSN 发布 v1.0 版本!

MOSN(Modular Open Smart Network)是一款主要使用 Go 语言开发的云原生网络代理平台,由蚂蚁集团开源并经过双 11 大促几十万容器的生产级验证。经过 4 年的蓬勃发展,在 11 位 Commiter、100 多位Contributor 和整个社区的共同努力下,经历 27 个小版本的迭代...现在 MOSN 1.0 版本正式发布了!一个足够...

金融级分布式架构 423

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MOSN 社区「田阳」在“2021 OSCAR 开源产业大会” 进行精彩演讲

MOSN 受邀出席本届OSCAR 开源产业大会的开源社会治理与运营论坛。蚂蚁集团的高级技术专家「田阳」,从 MOSN 的开源历程出发,对未来开源社区的发展进行探讨与展望。OSCAR - ...

金融级分布式架构 172

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

实现端到端跟踪的三种方法 | Gopher Daily (2021.07.08) ʕ◔ϖ◔ʔ

每日一谚:Go offer enough sugar to be productive, but not too much.Go技术生态端到端跟踪的三种方法 - https://rakyl...

TonyBai 227

2024 开源之夏|Hi 同学,快来认领你的开源任务!

????这个夏天,SOFAStack 和 MOSN 又双叒叕参加了开源之夏,带着 6 个项目任务与大家见面啦!活动简介开源之夏是由中国科学院软件研究所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区的蓬勃发展,助力开源软件供应链建设。在开源之夏的活动中,学生们能够利用暑期时间参与到开源项目的建设,提高...

金融级分布式架构 937

HTNN 开源 - MOSN 社区新网络产品

HTNN 是 MOSN 社区基于 MoE(MOSN on Envoy)架构开源的新产品,我们将通过系列文章来展开介绍,本文作为第一篇,先简要的概览介绍,欢迎大家一起进群交流。GitHub:https://github.com/mosn/htnn1HTNN 是什么HTNN(Hyper Trust-Native Network)是一款基于云原生技术的 L3 & L4 & L7 Cro...

金融级分布式架构 387

Go语言的Envoy与API网关

1.背景介绍 1. 背景介绍 Go语言的Envoy与API网关是一种高性能、可扩展的网络代理和API管理解决方案。Envoy是一个由LinkedIn开发的开源项目,旨在提供一种可插拔的、高性能的网络代理层,用于支持服务到服务的通信。API网关则是一种用于管理、安全化和路由API请求的解决方案。 在微服务架构中,服务之间需要通过网络进行通信。这种通信需要处理的问题包括负载均衡、故障转移、安全性...

AI天才研究院 1537

MOSN(Modular Open Smart Network)-06-MOSN 多协议机制解析

云原生网络代理 MOSN 定位是一个全栈的网络代理,支持包括网络接入层(Ingress)、API Gateway、Service Mesh 等场景,目前在蚂蚁集团内部的核心业务集群已经实现全面落地,并经受了 2019 年双十一大促的考验。今天要向大家介绍的是云原生网络代理 MOSN 核心特性之一的多协议扩展机制,目前已经支持了包括 SOFABolt、Dubbo、TARS 等多个协议的快速接入。

1157

Golang云原生基础

容器是一种轻量级的虚拟化技术,它能够隔离应用程序和其依赖的库和环境,使得应用程序可以在不同的平台上运行。Golang的语法简洁,性能优异,同时具备高并发处理和内存管理的能力,因此在云原生应用开发中越来越受欢迎。云原生技术是一种基于云计算的理念,它将应用程序打包为独立的容器,并通过自动化的方式进行部署和管理。未来,随着云原生技术的快速发展,Golang必将在这个领域中扮演更加重要的角色。以上是一个简单的基于Golang的云原生应用程序和Dockerfile示例,开发者可以结合自己的需求进行修改和扩展。

SMILY12138的博客 967

云原生系列Go语言篇-Go的环境配置

本文来自正在规划的,欢迎关注后续文章。每种编程语言都需要有开发环境,Go自然也不例外。如果读者之前已经写过Go程序,那么一定已经有环境了,但可能会漏掉一些最新技术和工具。如果是第一次在电脑上配置Go,也不必担心,Go及其支持工具非常简单。在配置好环境并验证后,我们会构建一个简单程序,学习几种构建和运行Go的方式,然后涉足一些简化Go开发的工具和技巧。

AlanHou的博客 640

云原生:01_Golang_day1

模块一:Go语言特性 统一思想-12 factors I. 基准代码 一份基准代码,多份部署 II. 依赖 显式声明依赖关系 III. 配置 在环境中存储配置 IV. 后端服务 把后端服务当作附加资源 V. 构建,发布,运行 严格分离构建和运行 VI. 进程 以一个或多个无状态进程运行应用 VII. 端口绑定 通过端口绑定提供服务 VIII. 并发 通过进程模型进行扩展 IX. 易处理 快速启动和优雅终止可最大化健壮性 X. 开发环境与线上环境等价

Diligent_ten的博客 911

# Envoy + Go:构建高性能微服务网关的实践与创新设计在现代云原生架构中,**Envoy** 作为一款开源的边缘和

本文展示了如何利用 Go 编写高效的 Envoy 自定义过滤器,并通过 WASM 方式无缝集成进现有网关体系。整个过程无需复杂依赖,仅靠 Go 的标准库即可完成核心逻辑开发,且具有极高的性能表现。微服务之间的 API 网关;多租户环境下的请求隔离;快速实现限流、熔断、日志埋点等通用功能。📌 最佳实践提示:每个插件应尽量保持职责单一;利用 Envoy 的 stats 和 tracing 功能进行监控;生产环境务必启用 TLS 和身份认证!

taozodew123的博客 289
上一篇: 【活动报名】SOFAMeetup#7 合肥站-SOFA 微服务架构技术生态与实践
下一篇: RFC8998+BabaSSL---让国密驶向更远的星辰大海
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值