分布式异地多活架构实践之路讯飞输入法异地多活架构实践之路 凌 军 自我介绍 • 凌军 • 2010年加入科大讯飞 • 讯飞输入法、灵犀语音助手等产品服务端架构负责人 • 科大讯飞消费者BG基础平台架构负责人 产品介绍 • 稳居国内输入法第一阵营 • 2010-10~至今 • 4亿用户 • 1.1亿月活 来自:中国科学院《互联网周刊》 大纲 • 产品发展中遇到的问题 • 异地多活存在哪些挑战 • • 讯飞输入法异地多活解决方案 • 实际应用效果 • 未来规划 单机房遇到的问题 可用性低 响应时间慢 系统扩容难 可用性低 响应时间慢 系统扩容难 大纲 • 产品发展中遇到的问题 • 异地多活存在哪些技术挑战 • 讯飞输入法解决方案 • 实际应用效果 • 后续规划 技术挑战 几十毫秒的延迟; 跨机房性能较慢 机房天然延迟 专线费用高; 专线不稳定 跨机房专线问题 • 产品发展中遇到的问题 • 异地多活存在哪些技术挑战 • 讯飞输入法异地多活解决方案 • 实际应用效果 • 未来规划 业务特点分析 业务分类 业务举例 业务特点 场景归类 核心业务 皮肤、表情、资源、广告、应用墙译等 读多写少 主从模式 (单点写,多点读) 用户个性化数据同步、账号等 读写均衡 多主模式 (多点读写) 分布式日志收集等 写多读少 汇聚模式 (多点写,单点读)0 码力 | 36 页 | 1.66 MB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第四课 多元组, 结构体,枚举类型现代编程思想 多元组,结构体与枚举类型 Hongbo Zhang 1 基础数据类型:多元组与结构体 2 回顾:多元组 多元组:固定⻓度的不同类型数据的集合 定义: (<表达式>, <表达式>, ...) 类型: (<表达式类型>, <表达式类型>, ...) 例如: 身份信息: ("Bob", 2023, 10, 24): (String, Int, Int, Int) 成员访问: 成员访问: <多元组>.<索引> : (2023, 10, 24).0 == 2023 列表:任意⻓度的相同类型数据的集合 例如: 字符的序列: Cons('H', Cons('i', Cons('!', Nil))) Cons : construct 的缩写 3 笛卡尔积 ⼀个多元组类型的元素即是每个组成类型的元素构成的有序元素组 集合的笛卡尔积,⼜称积类型 例:扑克牌的所有花⾊:{ 例:扑克牌的所有花⾊:{ } 4 结构体 元组的问题在于,难以理解其所代表的数据 (String, Int) :⼀个⼈的姓名和年龄?姓名和⼿机号?地址和邮编? 结构体允许我们赋予名称 struct PersonalInfo { name: String; age: Int } struct ContactInfo { name: String; telephone: Int } struct AddressInfo0 码力 | 26 页 | 435.86 KB | 1 年前3
Rust 程序设计语言简体中文版Rust 能让你在更为广泛的编程领域走得更远,写出自信。(这一点并不显而易见) 举例来说,那些“系统层面”的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来 看,这是一个神秘的编程领域,只为浸润多年的极少数人所触及,也只有他们能避开那些臭名 昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这些障碍:它消除了旧的陷阱,并提供了伴你一路同行的友好、精良的工具。想 要 abstractions)—— 将高级语言特性编 译成底层代码,并且与手写的代码运行速度同样快。Rust 努力确保代码又安全又快速。 这里提到的只是几个较大的受益群体,Rust 语言也希望能支持更多其他用户。总的来说, Rust 最重要的目标是消除数十年来程序员习以为常的取舍,让安全和高效、速度和易读易用 可以兼得。试试看 Rust,说不定它的选择就适合你。 本书适合哪些人 本书假设你已经有其 ” 程序,以及如何使用 Rust 的包管理 器和构建工具 Cargo。第 2 章是一个编写 Rust 语言的实战介绍,我们会构建一个猜数字游 戏。我们会站在较高的层次介绍一些概念,而后续章节将提供更多细节。如果你希望立刻就动 手实践一下,第 2 章是开始的好地方。第 3 章介绍 Rust 中类似其他编程语言的特性,第 4 章 会学习 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在进入下一环节之前学习0 码力 | 600 页 | 12.99 MB | 1 年前3
Nim 2.0.2 中文手册"⽂档注释"以两个 ## 开头,⽂档注释是 Token 标记,它们属于语法树,只允许在源⽂件的特定语法位 置出现。 多⾏注释 从语⾔的 0.13.0 版本开始, Nim ⽀持多⾏注释。如下: 多⾏注释⽀持嵌套: 还有多⾏⽂档注释,同样⽀持嵌套: i = 0 # 这是⼀个多⾏注释。 # 词法分析器将这两部分合并在⼀起。 # 注释在这⾥继续。 #[Comment here. Multiple commented out code. ]# proc p[T](x: T) = discard ]# 你也可以使⽤ discard 语句与 三引号字符串字⾯量⼀起创建多⾏注释: 这是 0.13.0 版本之前创建多⾏注释的⽅法,并且⽤于为单元测试 (testament.html#writing-unitests)框架提供规格说明。 标识符和关键字 Nim 中的标识符可以是任何字⺟、数字和下划线组成的字符串,但有以下限制: `var` + `let` == 50 const `assert` = true assert `assert` 字符串字⾯值也可以⽤三个双引号 """ ... """ 来分隔,这种形式⽀持多⾏,可以包含 " ,并且不解释任何转义字符,为了⽅便, 开头 """ 后⾯换⾏符以及空格并不包括在字符串中,字符串的结尾定义为 """[^"] 模式,如下: 产⽣: 原始字符串字⾯值 语法中的终结符号:0 码力 | 127 页 | 7.05 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20. . . . . . . . . . . . . . . . . . . 48 4.3 元组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 元组基本操作 . . . . . . . . . . . . . . . . . . . . . 运行期索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 元组合并与遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 总结 . . . . . . . . . . . . . . . . 83 6 序言 序言 引言 C++ 是一个用户群体相当大的语言。从 C++98 的出现到 C++11 的正式定稿经历了长达十年多之 久的积累。C++14/17 则是作为对 C++11 的重要补充和优化,C++20 则将这门语言领进了现代化的大 门,所有这些新标准中扩充的特性,给 C++ 这门语言注入了新的活力。那些还在坚持使用传统0 码力 | 83 页 | 2.42 MB | 1 年前3
Python 标准库参考指南 3.8.20 enumerate(iterable, start=0) 返回一个枚举对象。iterable 必须是一个序列,或iterator,或其他支持迭代的对象。enumerate() 返回的迭代器的__next__() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0) 和通过迭代 iterable 获得的值。 >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] True。如果 object 不是给定类型的对象,函数将总是返回 False。如果 classinfo 是类型对象元组(或由其他此类元组 递归组成的元组),那么如果 object 是其中任何一个类型的实例就返回 True。如果 classinfo 既不是 类型,也不是类型元组或类型元组的元组,则将引发TypeError 异常。 issubclass(class, classinfo) 如果 class class 是 classinfo 的 (直接、间接或虚拟) 子类则返回 True。类会被视作其自身的子类。classinfo 也以是类对象的元组,在此情况下 classinfo 中的每个条目都将被检查。在任何其他情况下,都将引 发TypeError 异常。 iter(object[, sentinel]) 返回一个iterator 对象。根据是否存在第二个实参,第一个实参的解释是非常不同的。如果没有第0 码力 | 1927 页 | 9.69 MB | 9 月前3
Python 标准库参考指南 3.8.20 enumerate(iterable, start=0) 返回一个枚举对象。iterable 必须是一个序列,或iterator,或其他支持迭代的对象。enumerate() 返回的迭代器的__next__() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0) 和通过迭代 iterable 获得的值。 >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] True。如果 object 不是给定类型的对象,函数将总是返回 False。如果 classinfo 是类型对象元组(或由其他此类元组 递归组成的元组),那么如果 object 是其中任何一个类型的实例就返回 True。如果 classinfo 既不是 类型,也不是类型元组或类型元组的元组,则将引发TypeError 异常。 issubclass(class, classinfo) 如果 class class 是 classinfo 的 (直接、间接或虚拟) 子类则返回 True。类会被视作其自身的子类。classinfo 也以是类对象的元组,在此情况下 classinfo 中的每个条目都将被检查。在任何其他情况下,都将引 发TypeError 异常。 iter(object[, sentinel]) 返回一个iterator 对象。根据是否存在第二个实参,第一个实参的解释是非常不同的。如果没有第0 码力 | 1927 页 | 9.69 MB | 9 月前3
Rust 程序设计语言 简体中文版 1.85.0文本编辑器和集成开发环境(Integrated Development Environments, IDE) 本书不会假设你使用何种工具来编写 Rust 代码。几乎任何文本编辑器都可以搞定!然而,很 多文本编辑器和集成开发环境(IDE)内置了 Rust 支持。你总是可以在 Rust 官网的工具页面 找到很多相对流行的编辑器和 IDE 列表。 离线使用本书 在一些示例中,我们将会使用标准库之外的 Rust 表示这个参数是一个 引用(reference),它允许多处代码访问同一处数据,而无需在内存中 多次拷贝。引用是一个复杂的特性,Rust 的一个主要优势就是安全而简单的操纵引用。完成 当前程序并不需要了解如此多细节。现在,我们只需知道它像变量一样,默认是不可变的。因 此,需要写成 &mut guess 来使其可变,而不是 &guess。(第四章会更全面地讲解引用。) 使用 Result 类型来处理潜在的错误 build 时,Cargo 会更新可用 crate 的 registry,并根据你指定的新版本重 新评估 rand 的要求。 第十四章会讲到 Cargo 及其生态系统 的更多内容,不过目前你只需要了解这么多。通过 Cargo 复用库文件非常容易,因此 Rustacean 能够编写出由很多包组装而成的更轻巧的项目。 生成一个随机数 让我们开始使用 rand 来生成一个要猜测的数字。下一步是更新 src/main0 码力 | 562 页 | 3.23 MB | 28 天前3
Python 标准库参考指南 3.9.20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.6.5 元组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.6.6 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 8.4.5 namedtuple() 命名元组的工厂函数 . . . . . . . . . . . . . . . . . . . . . . . . . 219 8.4.6 OrderedDict 对象 . . . . . . . . . enumerate(iterable, start=0) 返回一个枚举对象。iterable 必须是一个序列,或iterator,或其他支持迭代的对象。enumerate() 返回的迭代器的__next__() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0) 和通过迭代 iterable 获得的值。 >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']0 码力 | 2015 页 | 10.12 MB | 9 月前3
Python 标准库参考指南 3.8.20 Python 一同发行的标准库。它 还描述了通常包含在 Python 发行版中的一些可选组件。 Python 标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的。这个库包含了多 个内置模块 (以 C 编写),Python 程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Python 编写的模块,提供了日常编程中许多问题的标准解决方案。其中有些模块经过专门设计,通过将特定 必须是一个序列,或iterator,或其他支持迭代的对象。enumerate() 返回 9 The Python Library Reference, 发布 3.8.20 的迭代器的__next__() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0)和通过 迭代 iterable 获得的值。 >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] True。如果 object 不 是给定类型的对象,函数将总是返回 False。如果 classinfo 是类型对象元组(或由其他此类元组递归 组成的元组),那么如果 object 是其中任何一个类型的实例就返回 True。如果 classinfo 既不是类型,也 不是类型元组或类型元组的元组,则将引发TypeError 异常。 issubclass(class, classinfo) 如果 class0 码力 | 2052 页 | 9.74 MB | 9 月前3
共 458 条
- 1
- 2
- 3
- 4
- 5
- 6
- 46













