MoE 系列(五)|Envoy Go 扩展之内存安全

弹簧管压力表设计报告 精密机械课程设计 弹簧管压力表设计报告 2020年5月1日 目 录 第一章 设计任务概述... 3 1.1 课程设计目的... 3 1.2 设计任务... 3 1.3 技术指标... 3 第二章 压力表概述... 4 2.1 机械式压力表的组成部分... 4 2.2 工作原理... 4 第三章 压力表设计... 5 3.1 弹簧管参数设计... 5 3.2 曲柄滑块机构设计... ... 阅读详情

前面几篇介绍了 Envoy Go 扩展的基本用法,接下来几篇将介绍实现机制和原理。

Envoy 是 C++ 实现的,那 Envoy Go 扩展,本质上就相当于把 Go 语言嵌入 C++ 里了。

在 Go 圈里,将 Go 当做嵌入式语言来用的,貌似并不太多见,这里面细节还是比较多的。比如:

  1. Envoy 有一套自己的内存管理机制,而 Go 又是一门自带 GC 的语言。
  2. Envoy 是基于 libevent 封装的事件驱动,而 Go 又是包含了抢占式的协程调度。

为了降低用户开发时的心智负担,我们提供了三种安全保障。有了这三层保障,用户写 Go 来扩展 Envoy 的时候,就可以像平常写 Go 代码一样简单,而不必关心这些底层细节。

三种安全

1. 内存安全

用户通过 API 获取到的内存对象,可以当做普通的 Go 对象来使用。

比如,通过 Headers.Get 得到的字符串,在请求结束之后还可以使用,而不用担心请求已经在 Envoy 侧结束了,导致这个字符串被提前释放了。

2. 并发安全

当启用协程的时候,我们的 Go 代码将会运行在另外的 Go 线程上,而不是在当前的 Envoy worker 线程上,此时对于同一个请求,则存在 Envoy worker 线程和 Go 线程的并发。

但是,用户并不需要关心这个细节,我们提供的 API 都是并发安全的,用户可以不感知并发的存在。

3. 沙箱安全

这一条是针对宿主 Envoy 的保障,因为我们并不希望某一个 Go 扩展的异常,把整个 Envoy 进程搞崩溃。

目前我们提供的是,Go Runtime 可以 recover 的有限沙箱安全,这通常也足够了。

更深度的,Runtime 不能 recover 的,比如 Map 并发访问,则只能将 Go So 重载,重建整个 Go Runtime 了,这个后续也可以加上。

内存安全实现机制

要提供安全的内存机制,最简单的办法,也是 (几乎) 唯一的办法,就是复制。但是,什么时候复制、怎么复制,还是有一些讲究的。这里权衡的目标是降低复制的开销,提升性能。

这里讲的内存安全,还不涉及并发时的内存安全,只是 Envoy (C++) 和 Go 这两个语言运行时之间的差异。

PS:以前用 OpenResty 的时候,也是复制的玩法,只是有一点区别是,Lua String 的 Internal 归一化在大内存场景下,会有相对较大的开销;Go String 则没有这一层开销,只有 Memory Copy + GC 的开销。

复制时机

首先是复制时机,我们选择了按需复制,比如 Header,Body Data 并不是一开始就复制到 Go 里面,只有在对应的 API 调用时,才会真的去 Envoy 侧获取&复制。

如果没有被真实需要,则并不会产生复制,这个优化对于 Header 这种常用的,效果倒是不太明显,对于 Body 这种经常不需要获取内容的,效果则会比较的明显。

复制方式

另一个则是复制方式,比如 Header 获取上,我们采用的是在 Go 侧预先申请内存,在 C++ 侧完成赋值的方式,这样我们只需要一次内存赋值即可完成。

这里值得一提的是,因为我们在进入 Go 的时候,已经把 Header 的大小传给了 Go,所以我们可以在 Go 侧预先分配好需要的内存。

不过呢,这个玩法确实有点 tricky,并不是 Go 文档上注明推荐的用法,但是也确实是我们发现的最优的解法了。

如果按照 Go 常规的玩法,我们可能需要一次半或两次内存拷贝,才能保证安全,这里有个半次的差异,就是我们下回要说的并发造成的。

另外,在 API 实现上,我们并不是每次获取一个 Header,而是直接一次性把所有的 Header 全复制过来,在 Go 侧缓存了。这是因为大多数场景下,我们需要获取的 Header 数量会有多个,在权衡了 CGO 的调用开销和内存拷贝的开销之后,我们认为一次性全拷贝是更优的选择。

最后

相对来说,不考虑并发的内存安全,还是比较简单的,只有复制最安全,需要权衡考虑的则更多是优化的事情了。

比较复杂的还是并发时的安全处理,这个我们下回再聊。

MOSN Star 一下✨:

https://github.com/mosn/mosn

推荐阅读

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

MoE 系列(二)|Golang 扩展从 Envoy 接收配置

MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置

MoE 系列(四)|Go 扩展的异步模式

用 SAP ABAP ALV 重塑 SM30:可扩展的自定义表维护视图与自动传输实践 文章摘要: 本文提出了一种基于ALV Grid的动态表维护框架,用于替代传统SM30维护视图。该方案通过输入表名自动生成维护界面,支持动态筛选、批量操作和自动传输管理。核心设计包括:利用BAdI实现扩展点、通过行状态字段简化数据变更跟踪、使用Style Table控制单元格编辑权限、集成CTS实现自动传输。相比SM30标准维护,该框架显著提升了交互体验(支持ALV排序/过滤/汇总)和业务扩展性(统一校验与权限控制),同时解决了"维护+传输"流程割裂的问题。文中详细阐述了技术实现方案,并提 阅读详情

相关推荐

基于Meteoinfo与TrajStat的后向轨迹聚类分析实战:从数据准备到可视化制图

本文详细介绍了基于Meteoinfo与TrajStat进行后向轨迹聚类分析的完整实战流程。从Java环境配置、Meteoinfo软件与TrajStat插件安装,到精准获取NOAA气象数据、设置参数进行批量轨迹计算,再到利用聚类分析提炼主要气流路径,并最终完成专业地图可视化与制图。文章旨在帮助环境与气象研究者快速掌握从数据准备到成果输出的全链路操作。

p4q5r6s7t的博客 804

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

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

金融级分布式架构 746

Ai数字人直播系统源码部署

虚拟形象定制,直播内容智能生成,多语言支持,智能互动,声音克隆,24 小时不间断直播,多平台直播,智能数据分析,实时情感识别,视频合成,Ai数字人直播系统源码出售,Ai数字人直播系统源码部署实现 AI 数字人 24 小时不间断直播功能是一个较为复杂的任务,涉及到多个方面,如直播流的推送、内容的持续生成、系统的稳定性保障等。以下为你提供一个简化的实现思路和示例代码,借助 Python 结合 FFmpeg 工具来模拟 24 小时不间断直播。

weixin_ggwwsscc的博客 1256

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

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

tanjunchen的博客 2311

ET篇:Google.Protobuf的学习(理解基本的使用流程)

据我目前所知,ET使用的数据交换协议是Google.Protobuf,所以今天就来学习一下,但是网上许多人都是以高下立判的方式讲解的,对新手小白很不友好,所以我今天就以纯小白的视角和大家一起学习 学习环境: .NET Core2.2 .NET Framework 4.7.2 Rider protobuf-csharp-3.7.0-rc-2 Google.Protobuf简介 prot...

设计师养成记 3564

音频功放电路大全

作为硬件工程师,特别是做纯粹模拟电路、应用于音频功放的工程师,对于A类,B类,AB类,D类,G类,H类,T类功放应该特别熟悉。大多数工程师或许只知道其中的一部分、或者知道大概,为了让更多的工程师掌握更加详尽的音频功放知识,下文对以上说的音频功放做详细的说明。 功放,顾名思义,就是功率放大的缩写。与电压或者电流放大来说,功放要求获得一定的、不失真的功率,一般在大信号状态下工作,因此,功放电路一般包含电压放大或者电流放大电路没有的特殊问题,具体表现在:①输出功率尽可能大;②通常在大信号状态下工作;③非线性失真突

ltqdxl的博客 6595

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

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

金融级分布式架构 581

【MATLAB/Simulink】从模型到飞行:基于PX4与Rflysim的无人机MBD实战指南

本文详细介绍了基于MATLAB/Simulink与PX4、Rflysim的无人机模型开发与飞行控制实战指南。通过MBD(基于模型设计)方法,从建模、仿真到代码生成与硬件部署,实现无人机开发的高效闭环。文章涵盖开发环境搭建、动力学建模、控制算法实现及测试验证全流程,为无人机开发者提供实用技巧与优化建议。

weixin_30181209的博客 410

Istio Proxy【Envoy扩展】详解

[TOC] Istio Proxy【Envoy扩展】详解 源码工程和基本介绍 istio proxy工程概要 istio官方源码中有说明,istio项目的仓库除了istio本身外,还有istio proxy这个仓库,istio proxy官方源码和Envoy一样,采用C++编写,注意,这里的编译方式,不再是Makefile,也不是CMake,是Google出品的bazel。bazel可以直接在编译...

weixin_33835103的博客 825

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

XSS漏洞之PDF生成:从XSS到服务端任意文件读取

XSS是最为常见的Web漏洞之一,多年来连续入选OWASP TOP10,相信大家都耳熟能详。 它是一种代码注入类的攻击,是一种客户端侧的攻击,攻击者通过在Web应用中注入恶意JavaScript代码,通过点击URL,最终在受害者浏览器端执行的一种漏洞。主要有反射型XSS、存储型XSS、基于DOM的XSS三类。XSS一些比较常规的危害大概有:重定向浏览器、窃取Cookie、浏览器劫持等。本文章侧重于发现XSS后的进一步利用。 主要介绍在某次实际测试过程中,发现XSS漏洞之后,如何进一步的利用,最终通过XSS达

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3780

MoE 系列(二)|Golang 扩展从 Envoy 接收配置

上一篇我们用一个简单的示例,体验了用 Golang 扩展 Envoy 的极速上手。这次我们再通过一个示例,来体验 Golang 扩展的一个强大的特性:从 Envoy 接收配置。

金融级分布式架构 583

微信小程序 - {errCode: 10008, errno: 1500104, errMsg: “writeBLECharacteristicValue:fail write characteris

微信小程序errCode: 10008, errno: 1500104, errMsg: "writeBLECharacteristicValue:fail write characteristics error. 10008, errMsg=The value's length is invalid.",uni-app微信小程序报错,uniApp小程序调用蓝牙api报错,向低功耗蓝牙设备的某个特征写入数据时错误,UniApp微信小程序蓝牙API调用报错10008解决方案,蓝牙设备进行通信时,向设备写入数据

🏆 前端领域优质创作者 4431

MoE 系列(七)| Envoy Go 扩展之沙箱安全

文|朱德江(GitHub ID:doujiang24)MOSN 项目核心开发者蚂蚁集团技术专家专注于云原生网关研发的相关工作本文707字 阅读3分钟在本系列的第 5 篇《MoE 系列(五)|Envoy Go 扩展之内存安全》中我们介绍了内存安全如何实现。第 6 篇《MoE 系列(六)| Envoy Go 扩展之并发安全》又谈到了并发场景下的内存安全。今天,我们来到了安全性的最后一篇:...

金融级分布式架构 224

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MoE 系列(四)|Go 扩展的异步模式

文|朱德江(GitHub ID:doujiang24)MOSN 项目核心开发者蚂蚁集团技术专家专注于云原生网关研发的相关工作本文3085字 阅读8分钟在《MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置》中我们体验了用 Istio 做控制面,给 Go 扩展推送配置,这次我们来体验一下,在 Go 扩展的异步模式下,对 Goroutine 等全部 Go 特性的支持。异步模式之前,...

金融级分布式架构 277

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MoE 系列[六] - Envoy Go 扩展之并发安全

文|朱德江(GitHub ID:doujiang24)MOSN 项目核心开发者蚂蚁集团技术专家专注于云原生网关研发的相关工作本文1313字 阅读4分钟前一篇介绍了 Envoy Go 扩展的内存安全,相对来说,还是比较好理解的,主要是 Envoy C++ 和 Go GC 都有自己一套的内存对象的生命周期管理。这篇聊的并发安全,则是专注在并发场景下的内存安全,相对来说会复杂一些。并发的原因首先...

金融级分布式架构 178

MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置

Istio 提供了 EnvoyFilter CRD,所以,用 Istio 来配置 Go 扩展也比较方便,apply 这段配置,Basic Auth 就开启了。下一篇,我们将介绍,如何在 Go 扩展中使用异步协程。至此,我们已经体验了整个 Envoy Go 的开发&使用流程,在云原生时代,人均 Golang 的背景下,相信可以很好的完成网关场景的各种定制需求。之前我们介绍过,Go 扩展是单独编译为 so 文件的,所以,我们需要把 so 文件,挂载到 Ingress Gateway 中。

金融级分布式架构 1060

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

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

梦醒人间 1007

SOFA Weekly|SOFAArk 会议预告、社区本周贡献 & issue 精选

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 501

SOFA Weekly|SOFA 聊天室、issue 精选

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 178

【开源之夏 2023】欢迎报名 MOSN 社区项目!

MOSN 为服务提供多协议、模块化、智能化、安全的代理能力,融合了大量云原生通用组件,同时也可以集成 Envoy 作为网络库,具备高性能、易扩展的特点。开源之夏是由“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展,培养和发掘更多优秀的开发者。Envoy 是当前最流行的网络代理之一,Go 扩展是 MOSN 社区为 Envoy 增加的 Go 生态基础,也是 MOSN 社区 MoE 框架的基础。(分支、版本、合并请求等)

金融级分布式架构 268

MOSN 发布 v1.0 版本!

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

金融级分布式架构 423

SOFA Weekly|SOFA 大事记、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 616

MOSN 1.0 发布,开启新架构演进

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

蚂蚁金服技术团队 590

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

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

金融级分布式架构 387
上一篇: MoE 系列(五)|Envoy Go 扩展之内存安全
下一篇: SOFA Weekly|SOFAArk 社区会议预告、Layotto 社区会议回顾与预告、社区本周贡献
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值