2.2.6 字节跳动在 Go 网络库上的实践字节跳动在 Go 网络库上的实践 何晨 字节跳动 基础架构 – 研发 应用层 Netpoll – 面向 RPC 场景的网络库 Go net Netpoll 网络层 RPC 框架 HTTP 框架 KiteX Hertz Netpoll – 性能表现 Environment CPU: 4 cores Memory: 8GB Go: 1.15.4 Netpoll0 码力 | 42 页 | 3.19 MB | 1 年前3
Go Web编程支持。 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。 Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打 算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻 量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生 了。 你应当把它作为 最后的手段来使用,也就是说,你的代码中应当没有,或者很少有panic的东西。这是个强大的工具,请明智地使用 它。那么,我们应该如何使用它呢? Panic 是一个内建函数,可以中断原有的控制流程,进入一个令人恐慌的流程中。当函数F调用panic,函数F的执行被中 断,但是F中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方,F的行为就像调用了panic。这一 过程 URL和DNS解析 85 我们浏览网页都是通过URL访问的,那么URL到底是怎么样的呢? URL(Uniform Resource Locator)是“统一资源定位符”的英文缩写,用于描述一个网络上的资源, 基本格式如下 schema://host[:port#]/path/.../[?query-string][#anchor] scheme 指定低层使用的协议(例如:http0 码力 | 295 页 | 5.91 MB | 1 年前3
Go基础语法宝典应当把它作为最后的手段来使用,也就是说,代码中应当没有,或者很少有 panic 的东西。这是个强大 的工具,请明智地使用它。 Panic 是一个内建函数,可以中断原有的控制流程,进入一个 panic 状态中。当函数 F 调用 panic ,函数F的 执行被中断,但是 F 中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方, F 的行为就 像调用了 panic 。这一过程继续向上,直到发生 panic 上面例子简单的演示了如何自定义Error类型。但是如果还需要更复杂的错误处理呢?此时,来参考一下 net包采用的方法: 在调用的地方,通过类型断言 err 是不是 net.Error ,来细化错误的处理,例如下面的例子,如果一个 网络发生临时性错误,那么将会sleep 1秒之后重试: 错误处理 Go在错误处理上采用了与C类似的检查返回值的方式,而不是其他多数主流语言采用的异常方式,这造 成了代码编写上的一个很大的缺点:0 码力 | 47 页 | 1020.34 KB | 1 年前3
Go 入门指南(The way to Go)产环境与软件开发之间的主要矛盾,并尝试设计一门全新的编程语言来解决这些问题。 以下就是他们讨论得出的对编程语言的设计要求: 能够以更快的速度开发软件 开发出的软件能够很好地在现代的多核计算机上工作 开发出的软件能够很好地在网络环境下工作 使人们能够享受软件开发的过程 Go 语言就在这样的环境下诞生了,它让人感觉像是 Python 或 Ruby 这样的动态语言,但却又拥有像 C 或者 Java 这类语言的高性能和安全性。 Go 语言中最值得称赞的设计 goroutine 和 channel 进行并发 和多核应用的基本技巧的讲解(第 14 章)。最后,我们会讨论如何将 Go 语言应用到分布式和 Web 应用 中的相关网络技巧(第 15 章)。 我们会在本书的第四部分向你展示许多 Go 语言的开发模式和一些编码规范,以及一些非常有用的代码片 段(第 18 章)。在前面章节完成对所有的 Go 语言技巧的学习之后,你将会学习如何构造一个完整 衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。 因此,Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进 行指针运算。 Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多 核的计算机,这一点对于谷歌内部的使用来说就非常重要了。设计者通过 goroutine 这种轻量级线程的概 念来实现这个目标,然后通过0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)通道、超时和计时器(Ticker) 14.6 协程和恢复(recover) 14.7 新旧模型对比:任务和worker 14.8 惰性生成器的实现 14.9 实现 Futures 模式 第 15 章 网络,模板和网页应用 15.1 tcp服务器 15.2 一个简单的网页服务器 15.3 访问并读取页面 15.4 写一个简单的网页应用 第 16章 常见的陷阱与错误 16.1 误用短声明导致变量覆盖 字符串 18.2 数组和切片 18.3 映射 18.4 结构体 18.5 接口 18.6 函数 18.7 文件 18.8 协程(goroutine)与通道(channel) 18.9 网络和网页应用 18.10 其他 18.11 出于性能考虑的最佳实践和建议 - 6 - 本文档使用 书栈(BookStack.CN) 构建 致谢 当前文档 《Go入门指南》 由 进击的皇虫 使用 试设计一门全新的编程语言 来解决这些问题。 以下就是他们讨论得出的对编程语言的设计要求: 能够以更快的速度开发软件 开发出的软件能够很好地在现代的多核计算机上工作 开发出的软件能够很好地在网络环境下工作 使人们能够享受软件开发的过程 Go 语言就在这样的环境下诞生了,它让人感觉像是 Python 或 Ruby 这样的动态语言,但却又拥有像 C 或者 Java 这类语言的高性能和安全性。0 码力 | 466 页 | 4.44 MB | 1 年前3
2.1.3 如何用Go模拟CPU模拟目标 – MOS 6502 • 诞生于1975年 • MOS 6502应用范围广 • 资料多且易获得 • 简单、容易实现的现代CPU MOS 6502简介 • 8位,变长ISA(CISC) • 中断(NMI,IRQ) • 寄存器 • 1个累加寄存器(Accumulator) • 2个地址索引寄存器(X,Y) • 1个状态寄存器(PS) • 1个16位程序指针寄存器(PC) • 1个栈寄存器(SP) SP跟常见的栈指针一样,压栈SP则减掉对应字长 • 栈最大0xFF,咦……stackoverflow? • ZeroPage因为电路原因,寻址速度比一般指令快 • 中断与向量 • IRQ = 可忽略的中断 = 水平触发 = 读取0xFFFC里的绝对地址 • NMI = 不可忽略的中断 = 上沿触发 = 读取0xFFFE里的绝对地址 • Reset = 重置 = 读取0xFFFA 里的地址 Go模拟6502控制单元 总共100行左右 检查完成把电脑规格写入内存指定区域 • 一直循环monitor 函数 • 直到有NMI/IRQ中断 • 还是不懂…… • 就来个键盘敲下,到显示的全流程? Go模拟Apple II 按下键盘 硬件触发IRQ 键值写入0xC000 读取0xC000 并unmask 再读取0xC010 硬件终止中断 存入 当前光标处 Go模拟Apple II 光标处0x400 直通显卡 通过硬件转码变0 码力 | 42 页 | 7.10 MB | 1 年前3
Go在工程实践的错误处理为什么定位慢?-- 分布式错误 发现核心错误后,应该让系统直接Panic。 • 必要的错误信息,让我们知道是在哪个地方报错,哪个微服务有问题。 • 错误信息高亮,显示红色让错误更加明显。 • 核心错误中断系统启动,让错误显示在最后一行。 • 不让报错传递到别的服务 TraceId 分布式信息 错误尽早失败 串联信息 Fail Fast 为什么定位慢?-- 分布式错误 TraceId0 码力 | 30 页 | 3.11 MB | 1 年前3
03. Golang 在隐私计算平台建设中的实践 - 刘敬分释放数据价值 02 隐私计算平台 架构 趣链科技版权所有©2016 – 2021 9 平台体系 • 区块链协同层 数据共享⽬目录,数据确权授 权、追溯审计以及联盟治理理 • 隐私计算⽹网络 多节点通过p2p组⽹网,并基于安 全多⽅方计算、联邦学习、可信执 ⾏行行环境按照数据隐私密级进⾏行行价 值共享 • 业务应⽤用层 基于SDK接⼊入上层业务系统 趣链科技版权所有©2016 doubleEncrypt edDatasetA) 对应 同步写法存在问题 算法效率低下 计算逻辑和⽹网络io是串串⾏行行的,不不相关 的计算逻辑和⽹网络io本可以并⾏行行,以 提⾼高效率 算法逻辑和⽹网络逻辑耦合 有⼤大量量的数据序列列化以及异步转同步 的⽹网络流程代码,算法本身不不应该关 注⽹网络相关逻辑 嵌套调⽤用其他算法复杂 在需要调⽤用其他算法时(OT,SS 等),都需要⼿手动编写⼀一遍类似的流 趣链科技版权所有©2016 – 2021 15 嵌套调⽤用其他算法 同步写法存在问题 算法效率低下 计算逻辑和⽹网络io是串串⾏行行的,不不相关 的计算逻辑和⽹网络io本可以并⾏行行,以 提⾼高效率 算法逻辑和⽹网络逻辑耦合 有⼤大量量的数据序列列化以及异步转同步 的⽹网络流程代码,算法本身不不应该关 注⽹网络相关逻辑 嵌套调⽤用其他算法复杂 在需要调⽤用其他算法时(OT,SS 等),都需要⼿手动编写⼀一遍类似的流0 码力 | 37 页 | 6.20 MB | 1 年前3
大规模高性能区块链架构设计模式与测试框架-李世敬版权所有 ©2016-2021 ⼤�模⾼性能区��架构⾯�的�� 大规模高性能 区块链架构设计 网络连通问题 数据孤岛问题 异构部署问题 性能扩展问题 之困局 ? n 机构间数据难打通,不愿打通 n 公网内网、网关网闸情况复杂 n 业务组织形式不同,异构链/系统难适配 n 数据量、网络复杂度指数上升,架构难扩展 16 趣链科技 版权所有 ©2016-2021 主链 节点 节点 锚节点 18 趣链科技 版权所有 ©2016-2021 18 趣链科技 版权所有 ©2016-2021 18 趣链科技 版权所有 ©2016-2021 18 不同分区(Namespace)间共识、执行、存储、网络完全独立;借助分区,一方面可实现业务隔离,保障 数据隐私安全;另一方面可实现交易并行处理,提升系统整体性能。 功 能 特 性 分区机制 业务分区而治 • 通过Namespace进行业务划分 双向通信 ⽹络⾃发现 ⾃适应路由 跨域转发 • 简化配置 • 动态调整 • 跨域通信 全连接转发策略 ⾃发现转发策略 区块链平台关键技术-自发现网络 21 趣链科技 版权所有 ©2016-2021 区块链平台关键技术-网络流控 提供交易拦截、消息分发、带宽限流等多维度⽹络流量控制服务,在请求激增场景下保证系统的稳定运⾏, 提⾼系统可⽤性 功 能 特 性 多维⽹络流控 节点⼊⼝0 码力 | 39 页 | 56.58 MB | 1 年前3
1.5 Go 语言构建高并发分布式系统实践性能满⾜足需要: 线上单机最⾼高160w⻓长连接 (24核 E5-2630 @ 2.30GHz 64G内存 ) qps在2~5w(取决于协议版本,业务逻辑,接⼊入端⺴⽹网络状况) 测试环境,可以通过300w⻓长连接压测(⺴⽹网络,连接稳定,⽆无带宽限制,实际可以更⾼高 ,决定于⼲⼴广播时候业务内存开销的cpu消耗带来的⼼心跳或者业务延时能否接受) 以360消息推送系统为例 ⾼高并发、通信交互复杂 Flash Iframe for ever 消息系统简要架构 单实例,单端⼝口,多协议复⽤用 全双⼯工,单客户端,多app复⽤用服务单通道 适⽤用于复杂环境下的⺴⽹网络的接⼊入策略 协议完备、简单、数据安全、可扩展、省流量 接⼊入层 ���� DES+RSA/ ECC+AES/ crossdomain.xml/ � ������/ ������ buffer和 对象不复⽤用 问题与瓶颈 问题与瓶颈 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 奔放的协程使⽤用 ⺴⽹网络环境不好 引起激增 问题与瓶颈 2~3s的GC 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 奔放的协程使⽤用 接⼝口响应速度0 码力 | 39 页 | 5.23 MB | 1 年前3
共 44 条
- 1
- 2
- 3
- 4
- 5













