Golang在接入层长连接服务中的实践-黄欣
Golang 在接入层长连接服务中的实践 黄欣 基础平台-架构部 目录 • 背景 • 架构 • 心得 目录 • 架构 • 心得 背景—why 长连接? • 业务场景 – 大量实时计算 • 司机乘客撮合 • 实时计价 – 高频度的数据交互 • 坐标数据 • 计价数据 – App和服务端双向可达 • 上行(抢单) • 下行(派单) 背景—why golang? • 开发效率0 码力 | 31 页 | 1.67 MB | 1 年前3go-zero开源项目的成长史
0 码力 | 31 页 | 4.83 MB | 9 月前3张波-虎牙直播在微服务改造中的实践
Meetup #6 广州站 微服务改造事项 DNS-F在数据 库场景的落地 名字服务在负 载均衡场景的 落地 DNS-F在微服 务场景的落地 应用层探活 数据库故障 恢复时间长 服务故障牵 引慢,流量 接入生效时 间长 DNS生效慢 内部服务无 就近接入能 力 服务性能下 降流量不摘 除 实 例 切 换 能 力 秒 级 流 量 牵 引 能 力 D N S 就 近 接 入 能 力 华中IDC 华北IDC Nginx Nginx Nginx Web server 专线 背景 负载均衡变更需要更新配置发布后 才能生效,节点扩缩容,屏蔽操作 需要人工参与,流量接入接出时间 长 目标 流量接入接出时长低于30秒 负载均衡配置下发无状态改造 虎牙负载均衡部署的机器数百,配置下发的可靠性保障,一致性保障要求特别严格, 如果出现配置下发不及时,或下发配置失败,极大可能出现故障,同时负载均衡服 客户端主动监听配置更新,配置秒 级生效,新扩容服务主动拉取全量 配置,流量接入时长缩短3分钟+ 配置名字服务 配置IP方式 服务端下发文件更新配置,更新配 置生效时间长,由于需要预先知道 负责均衡集群的机器信息,扩缩容 需要等元信息同步以后才能接入流 量,扩容流量接入时间长 负载均衡节点对接名字服务 虎牙负载均衡部署的机器一台机器上可能存在数百的配置,每次节点生效需要重新 reload配置,且节点新增或删除需人工上系统操作配置,配置生效对服务会有中断0 码力 | 27 页 | 1.03 MB | 1 年前3Nacos架构&原理
规模:十万级服务/配置,百万级连接,具备强大扩展性。 15 > 简介 Nacos 生态 Nacos 几乎支持所有主流语言,其中 Java/Golang/Python 已经支持 Nacos 2.0 长链接协议,能 最大限度发挥 Nacos 性能。阿里微服务 DNS(Dubbo+Nacos+Spring-cloud-alibaba/Seata/ Sentinel)最佳实践,是 Java 微服务生态最佳解决方案;除此之外,Nacos 与存储、Server 间、Server 与 SDK 间高效通信问题。 容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性。 流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制。 缓存机制:容灾目录,本地缓存,Server 缓存机制,是 Nacos 高可用的关键。 启动模式:按照单机模式,配置模式,服务模式,DNS 模式模式,启动不同的模块。 Nacos 架构 1. Nacos 提供可视化的控制台,可以对配置进行发布、更新、删除、灰度、版本管理等功能。 2. SDK 可以提供发布配置、更新配置、监听配置等功能。 3. SDK 通过 GRPC 长连接监听配置变更,Server 端对比 Client 端配置的 MD5 和本地 MD5 是否相等,不相等推送配置变更。 4. SDK 会保存配置的快照,当服务端出现问题的时候从本地获取。 配置资源模型0 码力 | 326 页 | 12.83 MB | 9 月前3Rust 程序设计语言 简体中文版 1.85.0
guess).expect("Failed to read line"); 不过,过长的代码行难以阅读,所以最好拆开来写。通常来说,当使用 .method_name() 语法 调用方法时引入换行符和空格将长的代码行拆开是明智的。现在来看看这行代码干了什么。 之前提到了 read_line 会将用户输入附加到传递给它的字符串中,不过它也会返回一个类型为 Result 的值。Result 是一种枚举类型,通常也写作 从分配器总共获取了多少 字节的内存。长度与容量的区别是很重要的,不过在当前上下文中并不重要,所以现在可以忽 略容量。 当我们将 s1 赋值给 s2,String 的数据被复制了,这意味着我们从栈上拷贝了它的指针、长 度和容量。我们并没有复制指针指向的堆上数据。换句话说,内存中数据的表现如图 4-2 所 示。 72/562Rust 程序设计语言 简体中文版 s1 name value ptr len 5 ,应当在声明时 使用 pub mod 替代 mod。为了使一个公用模块内部的成员公用,应当在声明前使用pub。 • use 关键字: 在一个作用域内,use关键字创建了一个项的快捷方式,用来减少长路径的重 复。在任何可以引用 crate::garden::vegetables::Asparagus 的作用域,你可以通过 use crate::garden::vegetables::Asparagus;0 码力 | 562 页 | 3.23 MB | 8 天前3Python 标准库参考指南 3.7.13
序列保留在未来使用,会被当作错误来处理。 八进制转义包含为一个有限形式。如果首位数字是 0,或者有三个八进制数位,那么就认为它是八进制 转义。其他的情况,就看作是组引用。对于字符串文本,八进制转义最多有三个数位长。 在 3.3 版更改: 增加了 '\u' 和 '\U' 转义序列。 在 3.6 版更改: 由 '\' 和一个 ASCII 字符组成的未知转义会被看成错误。 100 Chapter 6. 文本处理服务 ASCII 字符和 4 个额外的非 ASCII 字符:’İ’ (U+0130, 拉丁大写的 I 带个点在上面), ’ı’ (U+0131, 拉 丁小写没有点的 I ), ’ſ’ (U+017F, 拉丁小写长 s) and ’K’ (U+212A, 开尔文符号). 如果使用ASCII 标记, 就只匹配’a’ 到’z’ 和’A’ 到’Z’ 。 re.L re.LOCALE 由当前语言区域决定 \w, \W 实例不会被重用,因此对于要使用wrap() 和/或fill() 来处理许多文本字符串的应用来说,创建你自 己的TextWrapper 对象可能会更有效率。 文本最好在空白符位置自动换行,包括带连字符单词的连字符之后;长单词仅在必要时会被拆分,除 非TextWrapper.break_long_words 被设为假值。 class textwrap.TextWrapper(**kwargs) TextWrapper0 码力 | 1846 页 | 9.09 MB | 9 月前3简谈 Rust 与国密 TLS - 王江桐
证码生成及验证、随机数生成、 密钥扩充 Sm4 GM/T 0002-2012 ISO/IEC WD1 18033- 3/AMD2 分组加解密 分组加 密 128 AES128,但 是更多次轮询 是 TLCP、消息加解密,用于替代 DES/AES 等国际算法 Sm7 / 分组加解密 分组加 密 128 否,仅以 IP 核的形 式存在于芯片中 卡证类、票务类、支付与通卡类 应用 Introduction of SM1 Rust China Conf 2022 – 2023, Shanghai, China • SM1 是分组加密算法,实现对称加密,分组长度和密钥长度都为 128 位,对长消息进行加解密时, 若消息长度过长,需要进行分组,如果消息长度不足,则要进行填充。 • 保证数据机密性。 • 算法安全保密强度及相关软硬件实现性能与 AES 相当,该算法不公开,仅以 IP 核的形式存在于芯片 Shanghai, China • SM4 为无线局域网标准,是分组加密算法,实现对称加密,用于替代 DES/AES 等国际算法, SM4 算法与 AES 算法具有相同的密钥长度和分组长度,均为 128 位。对长消息进行加解密 时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。 • 加密算法与密钥扩展算法都采用 32 轮非线性迭代结构,解密算法与加密算法的结构相同,只 是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。0 码力 | 44 页 | 3.70 MB | 1 年前3Python 标准库参考指南 3.7.13
保留在未来使用,会被当作错误来处理。 八进制转义包含为一个有限形式。如果首位数字是 0,或者有三个八进制数位,那么就认为它是八进制转义。 其他的情况,就看作是组引用。对于字符串文本,八进制转义最多有三个数位长。 在 3.3 版更改: 增加了 '\u' 和 '\U' 转义序列。 6.2. re --- 正则表达式操作 105 The Python Library Reference, 发布 3.7.13 ASCII 字符和 4 个额外的非 ASCII 字符:’İ’ (U+0130, 拉丁大写的 I 带个点在上面), ’ı’ (U+0131, 拉丁小 写没有点的 I ), ’ſ’ (U+017F, 拉丁小写长 s) and ’K’ (U+212A, 开尔文符号). 如果使用ASCII 标记,就只匹 配’a’ 到’z’ 和’A’ 到’Z’ 。 re.L re.LOCALE 由当前语言区域决定 \w, \W 实例不会被重用,因此对于要使用wrap() 和/或fill() 来处理许多文本字符串的应用来说,创建你自己 的TextWrapper 对象可能会更有效率。 文本最好在空白符位置自动换行,包括带连字符单词的连字符之后;长单词仅在必要时会被拆分,除 非TextWrapper.break_long_words 被设为假值。 class textwrap.TextWrapper(**kwargs) TextWrapper0 码力 | 1961 页 | 9.14 MB | 9 月前3Python 标准库参考指南 3.10.15
. . . . . . . . . . . . . . 972 18.4.1 /dev/poll 轮询对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 18.4.2 边缘触发和水平触发的轮询 (epoll) 对象 . . . . . . . . . . . . . . . . . . . . string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。 CPython 实 现 细 节: len 对 于 大 于sys.maxsize 的 长 度 如range(2 ** 100) 会 引 发OverflowError。 class list([iterable]) 虽然被称为函数,list 实际上是一种可变序列类型,详情请参阅列表 和序列类型 strict=True 参数,所有导致可迭代对象长度不同的错误都会被抑制,这可能 会在程序的其他地方表现为难以发现的错误。 • 为 了 让 所 有 的 可 迭 代 对 象 具 有 相 同 的 长 度, 长 度 较 短 的 可 用 常 量 进 行 填 充。 这 可 由itertools.zip_longest() 来完成。 极端例子是只有一个可迭代对象参数,zip() 会返回一个一元组的迭代器。如果未给出参数,则0 码力 | 2072 页 | 10.39 MB | 9 月前3Python 标准库参考指南 3.10.15
. . . . . . . . . . . . . 1043 18.4.1 /dev/poll 轮询对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044 18.4.2 边缘触发和水平触发的轮询 (epoll) 对象 . . . . . . . . . . . . . . . . . . . string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。 CPython 实 现 细 节: len 对 于 大 于sys.maxsize 的 长 度 如range(2 ** 100) 会 引 发OverflowError。 class list([iterable]) 虽然被称为函数,list 实际上是一种可变序列类型,详情请参阅列表 和序列类型 除 外)。 3.10.7 新版功能. 警告: 设置较低的限制值 可能导致问题。虽然不常见,但还是会有在其源代码中包含超出最小阈值的十 进制整数常量的代码存在。设置此限制的一个后果将是包含比此限制长的十进制整数字面值的 Python 源 代码将在解析期间遇到错误,通常是在启动时或导入时甚至是在安装时——只要对于某个代码还不存在 已更新的 .pyc 就会发生。一种在包含此类大数值常量的源代码中绕过该问题的办法是将它们转换为不0 码力 | 2207 页 | 10.45 MB | 9 月前3
共 316 条
- 1
- 2
- 3
- 4
- 5
- 6
- 32