使用Go与redis构建有趣的应用- 在构建程序的时候一定要确保程序的正确性和安全性,虽然为了保证这两点常常会使得程序变得复杂,但有时候工具本身也会提供一些鱼和熊掌兼得的方案。 ## 总结 - Go 和 Redis 都是简单且强大的工具,组合使用它们能够轻而易举地解决很多过去非常难以实现或者需要很多代码才能实现的特性(又黑我大 JAVA,放学别走!)。 - 在构建程序的时候一定要确保程序的正确性和安全性,虽然为了保证这两点常常会 Go 和 Redis 都是简单且强大的工具,组合使用它们能够轻而易举地解决很多过去非常难以实现或者需要很多代码才能实现的特性(又黑我大 JAVA,放学别走!)。 - 在构建程序的时候一定要确保程序的正确性和安全性,虽然为了保证这两点常常会使得程序变得复杂,但有时候工具本身也会提供一些鱼和熊掌兼得的方案。 - 解决一个问题通常会有很多不同的方式可选,但我们必须对正在使用的工具足够熟悉,才能找到这些方法。0 码力 | 176 页 | 2.34 MB | 2 年前3
1.1.4 谈谈 Go 服务稳定性建设可用性 正确性 延迟 ’ alt=‘OCR图片’/> Go 服务稳定性手段 需求合理性 技术方案简洁性 code review 单元测试 自动化回归 稳定性手段 正确性(涉及到钱的服务) 幂等 至少一次 保序 浮点精度 (decimal) 正确性校验机制 稳定性度量 可用性 时间纬度 请求成功率 稳定性度量 正确性(涉及到钱的服务)0 码力 | 18 页 | 1.58 MB | 1 月前3
Back to Basics: Designing Classes (part 2 of 2)0 码力 | 76 页 | 2.60 MB | 1 年前3
Apache ShardingSphere 中文文档 5.0.0-alphaOR 等。 SQL 路由 根据解析上下文匹配用户配置的分片策略,并生成路由路径。目前支持分片路由和广播路由。 SQL 改写 将 SQL 改写为在真实数据库中可以正确执行的语句。SQL 改写分为正确性改写和优化改写。 SQL 执行 通过多线程执行器异步执行。 结果归并 将多个执行结果集归并以便于通过统一的 JDBC 接口输出。结果归并包括流式归并、内存归并和使用装饰者模式的追加归并这几种方式。 jpg) ## 改写引擎 工程师面向逻辑库与逻辑表书写的 SQL,并不能够直接在真实的数据库中执行,SQL 改写用于将逻辑 SQL 改写为在真实数据库中可以正确执行的 SQL。它包括正确性改写和优化改写两部分。 ## 正确性改写 在包含分表的场景中,需要将分表配置中的逻辑表名称改写为路由之后所获取的真实表名称。仅分库则不需要表名称的改写。除此之外,还包括补列和分页信息修正等内容。 ## 标识符改写 FROM t_order_1 WHERE order_id IN (1, 2, 3); 虽然 SQL 的执行结果是正确的,但并未达到最优的查询效率。 ## 优化改写 优化改写的目的是在不影响查询正确性的情况下,对性能进行提升的有效手段。它分为单节点优化和流式归并优化。 ## 单节点优化 路由至单节点的 SQL,则无需优化改写。当获得一次查询的路由结果后,如果是路由至唯一的数据节点,则无需涉及0 码力 | 301 页 | 3.44 MB | 2 年前3
Rust分布式账务系统 - 胡宇||Fintech|互联网| |---|---|---| |正确性|bug= 资讯|bug 不可怕,快速迭代| |可靠性|丢数据 = 资讯|允许数据丢失| |性能|超低延迟 + 高吞吐|超高吞吐| |交易日志|审计,监管|调试使用| ## 分布式账务系统 需求分析 支付处理: ● 转账 ● 冻资 / 解资 ● 账户限额 ● 批处理事务 正确性:无双花或少付 审计监管:交易日志不可篡改,交易历史可回溯 Sourcing ● 针对读场景,写场景分别优化 ## API 解耦 ● 稳定的底层 API ● 灵活的顶层 API ## 层级账号 ● 树状结构 ● 聚合查询 ## Rust ● 正确性:内存安全,线程安全 ● 可靠性:Raft 共识算法 raft-rs 高性能:关键路径无锁单线程 ## 分布式账务系统 Gateway 副本1 Gateway 副本 2 Gateway0 码力 | 27 页 | 12.60 MB | 2 年前3
声明式自愈系统——高可用分布式系统的设计之道-王昕\wedge $ [][Next]_vars Termination == <>pc = "Done" ## TLA+的应用场景——验证系统设计的正确性 ## TLA+工具会遍历所有可能的状态验证系统的正确性 Specify the values of declared constants. NUMBER_RANGE 100..100 ## What is the model 注意设置超时 尽量避免用全局事物 注意慢操作可能造成的客户端冲突问题 ## 最佳实践分享 ## 有关缓存的使用 ➢ 缓存的内容:服务发现应答,DNS 结果,元数据,数据,之前的请求 逻辑正确性不能依赖缓存,写操作服务端必须有校验而且幂等,没有缓存情况下系统仍可服务 ➢ 错误回复缓存,过期时间不能太长,而且有清晰的修复建议 数据库更新与缓存失效的策略 ## 最佳实践分享 有关配置文件0 码力 | 44 页 | 2.47 MB | 2 年前3
Apache ShardingSphere 中文文档 5.0.0SQL 解析引擎 ..... 226 7.1.8 路由引擎 ..... 230 分片路由 ..... 230 广播路由 ..... 232 7.1.9 改写引擎 ..... 234 正确性改写 ..... 234 优化改写 ..... 239 7.1.10 执行引擎 ..... 240 连接模式 ..... 240 自动化执行引擎 ..... 241 7.1.11 |---| 这句 SQL 会使得 MySQL 在无法利用索引的情况下跳过 1,000,000 条记录后,再获取 10 条记录,其性能可想而知。而在分库分表的情况下(假设分为 2 个库),为了保证数据的正确性,SQL 会改写为: SELECT * FROM t_order ORDER BY id LIMIT 0, 1000010 即将偏移量前的记录全部取出,并仅获取排序后的最后10条记录。这会在数据库 时间复杂度仅为 $ O(n\log n) $ ,性能损耗很小。 其次,ShardingSphere 对仅落至单分片的查询进行进一步优化。落至单分片查询的请求并不需要改写 SQL 也可以保证记录的正确性,因此在此种情况下,ShardingSphere 并未进行 SQL 改写,从而达到节省带宽的目的。 ## 分页方案优化 由于 LIMIT 并不能通过索引查询数据,因此如果可以保证 ID 的连续性,通过0 码力 | 385 页 | 4.26 MB | 2 年前3
Hello 算法 1.0.0b5 JavaScript版。但这个估算结果并不准确,因为我们没有考虑到二叉树底层节点数量远多于顶层节点的性质。 接下来我们来进行更为准确的计算。为了减小计算难度,假设给定一个节点数量为 n,高度为 h 的“完美二叉树”,该假设不会影响计算结果的正确性。  图 8-5 完美二叉树的各层节点数量 问题分析:梳理与理解问题特性,包括状态定义、优化目标和约束条件等。这一步在回溯和动态规划中都有涉及。 2. 确定贪心策略:确定如何在每一步中做出贪心选择。这个策略能够在每一步减小问题的规模,并最终能解决整个问题。 3. 正确性证明:通常需要证明问题具有贪心选择性质和最优子结构。这个步骤可能需要使用到数学证明,例如归纳法或反证法等。 确定贪心策略是求解问题的核心步骤,但实施起来可能并不容易,主要包含以下原因。 不同问题 心策略,写出解题代码并提交运行,很可能发现部分测试样例无法通过。这是因为设计的贪心策略只是“部分正确”的,上文介绍的零钱兑换就是个典型案例。 为了保证正确性,我们应该对贪心策略进行严谨的数学证明,通常需要用到反证法或数学归纳法。 然而,正确性证明也很可能不是一件易事。如若没有头绪,我们通常会选择面向测试用例进行 Debug,一步步修改与验证贪心策略。 #### 15.1.4 贪心典型例题0 码力 | 375 页 | 30.68 MB | 2 年前3
Hello 算法 1.0.0b5 Swift版。但这个估算结果并不准确,因为我们没有考虑到二叉树底层节点数量远多于顶层节点的性质。 接下来我们来进行更为准确的计算。为了减小计算难度,假设给定一个节点数量为 n,高度为 h 的“完美二叉树”,该假设不会影响计算结果的正确性。  图 8-5 完美二叉树的各层节点数量 问题分析:梳理与理解问题特性,包括状态定义、优化目标和约束条件等。这一步在回溯和动态规划中都有涉及。 2. 确定贪心策略:确定如何在每一步中做出贪心选择。这个策略能够在每一步减小问题的规模,并最终能解决整个问题。 3. 正确性证明:通常需要证明问题具有贪心选择性质和最优子结构。这个步骤可能需要使用到数学证明,例如归纳法或反证法等。 确定贪心策略是求解问题的核心步骤,但实施起来可能并不容易,主要包含以下原因。 不同问题 心策略,写出解题代码并提交运行,很可能发现部分测试样例无法通过。这是因为设计的贪心策略只是“部分正确”的,上文介绍的零钱兑换就是个典型案例。 为了保证正确性,我们应该对贪心策略进行严谨的数学证明,通常需要用到反证法或数学归纳法。 然而,正确性证明也很可能不是一件易事。如若没有头绪,我们通常会选择面向测试用例进行 Debug,一步步修改与验证贪心策略。 #### 15.1.4 贪心典型例题0 码力 | 376 页 | 30.70 MB | 2 年前3
Hello 算法 1.0.0b5 Python版。但这个估算结果并不准确,因为我们没有考虑到二叉树底层节点数量远多于顶层节点的性质。 接下来我们来进行更为准确的计算。为了减小计算难度,假设给定一个节点数量为 n,高度为 h 的“完美二叉树”,该假设不会影响计算结果的正确性。  图 8-5 完美二叉树的各层节点数量 问题分析:梳理与理解问题特性,包括状态定义、优化目标和约束条件等。这一步在回溯和动态规划中都有涉及。 2. 确定贪心策略:确定如何在每一步中做出贪心选择。这个策略能够在每一步减小问题的规模,并最终能解决整个问题。 3. 正确性证明:通常需要证明问题具有贪心选择性质和最优子结构。这个步骤可能需要使用到数学证明,例如归纳法或反证法等。 确定贪心策略是求解问题的核心步骤,但实施起来可能并不容易,主要包含以下原因。 不同问题 心策略,写出解题代码并提交运行,很可能发现部分测试样例无法通过。这是因为设计的贪心策略只是“部分正确”的,上文介绍的零钱兑换就是个典型案例。 为了保证正确性,我们应该对贪心策略进行严谨的数学证明,通常需要用到反证法或数学归纳法。 然而,正确性证明也很可能不是一件易事。如若没有头绪,我们通常会选择面向测试用例进行 Debug,一步步修改与验证贪心策略。 #### 15.1.4 贪心典型例题0 码力 | 361 页 | 30.64 MB | 2 年前3
共 245 条
- 1
- 2
- 3
- 4
- 5
- 6
- 25













