干货 | 使用TLA+和PlusCal增强产品的可靠性
数治时代,计算机替代人脑成为数据分析、流程处理、场景模拟的信息处理中心,这对数据库及相关软件的可靠性提出了较高要求。尤其在航天、金融等行业,更是对软件可靠性有更为严格的标准。
一、软件可靠性的重要性
高并发系统和分布式系统面临的软件可靠性挑战在软件工程中有很多原则、方法和经验都可以辅助解决,但在很多场景下产品需要实现具备很高复杂度的软件模块。例如:
- 并发的共享资源访问,尤其是lock free的并发访问,多个进程/线程会在程序的任意状态下进入访问共享资源。
- 分布式系统在各个计算任务协同过程中的超时、故障甚至错误的输出,不受控的故障程序恢复重新加入都会加剧系统的复杂度。
在上述情况下,软件的正确性将会受到影响,进而影响到软件的可靠性。相较于实际使用场景的复杂性,工程性测试只能保证程序在某些情况下按预期运行,这只占全部状态的1/10甚至更少。
在工程实践中,一般单元测试要求路径覆盖达到一定比率,用以产生大量的测试用例。如果把一段代码的执行看成是一个有限状态机,那么状态的数量在并发(造成多个资源的访问顺序组合)、分布式(造成很多代码片段都可能被执行或不执行)情景下将会呈指数级增长。
例如,AWS DynamoDB的一个BUG需要35个步骤构建,这类问题在各类测试中很难通过系统性检查被发现,甚至连复现也很难做到。如下图所示,一段3进程并发的的简单算法会产生5000多种状态组合,几乎无法通过测试覆盖。
二、KingbaseES开发过程实践
数据库管理系统KingbaseES就包括了高并发处理和分布式的实现。如何保障处理的正确性,例如在分布式系统中,保障预期外行为不会发生(safety)、预期的行为一定发生(liveness),是保证产品可靠性的关键之一。
解决这个问题我们需要:
1、能够生成并处理海量状态空间的方法
2、实现这个方法的工具
1、关于TLA+和PlusCal
业界的大神们已经在理论和支持工具上解决了这个问题。1977年,Amir Pnueli(96年图灵奖获得者)把时序逻辑(temporal logic)引入计算机科学用于描述随时间变化的属性,例如FSM。1980年代,Leslie Lamport(13年图灵奖获得者)发明了TLA(temporal logical of actions),使用数理逻辑来描述系统的时序状态,并验证程序的正确性。TLA+就是TLA的script形式语言。
TLA+是一种为软件建模的语言,模型的校验工具最常用的是TLC。TLA+使用基于数学的形式化描述来建模,对通过代码描述软件执行逻辑的程序员来说是另一种思维,所以学习会有些困难。
PlusCal是基于TLA+的用于描述算法的语言,语言特别支持了并发和分布式系统中的语义支持,并且支持将描述转译成TLA+并使用TLA+的模型验证。PlusCal的形式更贴近程序语言(虽然还不完全一样,例如描述遍历除了本进程对应的blocksRead,是否全部其他进程对应的blocksRead中message都是2的形式是:\A blk \in blocksRead \ {Blocks[self]} : blk.message = 2),更适合程序员来使用。
TLA+在数据库的并发和分布式模块的开发过程中可以帮助使用者:
1、在建模的过程中清晰化的思考能匹配预期效果的软件行为
2、通过工具验证系统行为的正确性程度,增加系统的可靠性
2、使用TLA+和PlusCal增强KES可靠性
KingbaseES的开发过程中也是选择了使用PlusCal来描述关键算法和模块。TLA+还提供了IDE工具TLA+ Toolbox,提供集成了从建模到验证的全部工具。
在对系统做了建模描述后(TLA+里的specification)可以通过创建model(可以理解为一个specification的一个实例,包含对specification中CONSTANT的初始赋值和behavior的指定)完成对系统的验证,model在运行过程中可以完成指定的check,如下图,设置了死锁检测、全部状态中的表达式检测、是否在全部情况下spec都会会终止。
KingbaseES在产品开发过程中使用了TLA+/PlusCal来做部分模块算法的验证,例如高可用的故障处理模块、集群的成员管理模块、事务的并发控制模块用于有效提升系统的可靠性,为产品实现高并发、分布式环境、复杂故障下的可靠处理提供有力的技术保障。当然对算法的验证只是KingbaseES开发流程中可靠性和质量保障的一个环节,除此之外还有涵盖需求、设计、实现、测试各个环节的保障方法和技术,这些方法也会在后续分享。
三、更可靠的KES:技术可靠,系统稳定
金仓数据库通过数据级和实例级实时冗余备份,打造多种容灾方案,应对各种随时可能发生的计划外故障;通过联机补丁、滚动升级、联机重定义库表结构等机制,应对各种计划内的设计变更与系统升级;通过页面完整性校验、系统健康状态检查、运行状态可视化分析等机制,提前发现和隔离风险。
通过覆盖各种停机及数据丢失风险的全面高可用方案,确保数据不丢失、服务不中断、错误不蔓延,可支撑6级灾难恢复能力等级要求,为客户规避数据丢失带来的潜在风险损失。目前,已在电力、金融、电信行业核心业务系统得到验证。
金仓数据库通过覆盖各种停机及数据丢失风险的全面高可用方案,确保数据不丢失、服务不中断、错误不蔓延,可支撑6级灾难恢复能力等级要求,为客户规避数据丢失带来的潜在风险损失。目前,已在电力、金融、电信行业核心业务系统得到验证。
干货 | 使用TLA+和PlusCal增强产品的可靠性相关推荐
- 2021.10.15市场分析9月中旬以来,私募量化产品业绩普遍回撤,而指数增强产品回调更为突出。针对量化私募产品业绩流言不断,为切实保护投资者合法权益,包括灵均、九坤投资、因诺、卓识、天算量化、时代复
疫情以来,美国史无前例的大放水的始作俑者除了美联储,还有美国财政部,其通过 TGA(美国财政部一般账户)压降(放缓债券发行速度并减少现金储备)向市场投放了大量的流动性.从今年2月开始,财政部从其在美联 ...
- 8000字干货 | 教你打造电商产品的用户体系
本文由作者 书丰 发布于社区 对于任何电商产品来说,没有用户的产品是没有未来的,拥有用户但却不懂用户的产品也是没有未来的.产品经理需要从心理上去理解用户.预判用户的行为,在现实中挖掘用户的需求,从行动 ...
- 【干货】从用户体验谈产品经理如何提升团队协作能力
送给真正的互联网人一顿干货早餐 [小咖导读]让团队成员尽量理解自己的想法是产品经理的必备技能,沟通好了得到大家的认可进度也快.有些东西团队里的人不怎么了解,比如说用户体验,这就考验我们应变能力了了.下 ...
- 【干货】理发师都知道的产品经理最容易犯的几个错误
首先自我介绍下,楼主我是混迹在互联网挨踢圈8年的产品经理一枚,没车没房没存款,资深屌丝假一赔命.今天跟大家分享的这个话题,确实很奇特.很多人包括我在内之前也从来没有想过理发师和产品经理会有什么交集?直 ...
- 【干货】打造优秀B端产品需求分析流程要点
本文探讨的需求分析环节指识别用户需求,确定产品功能的过程,仅探讨绘制产品原型之前的需求分析环节. 一.需求分析总体流程 1. 第一步:收集需求,寻找产品/功能目标 无论是日常工作还是需求分析,先明确宏 ...
- 干货丨语雀Baklib在产品帮助手册制作过程中的实际亲测
在互联网时代,很多软件都把用户习惯培养起来了.用户对大部分软件的使用都有一种"无师自通"的感觉.但是在To B软件面前,尤其是业务复杂且深入的大型To B软件,用户会显得有些束手无 ...
- 如何才能增强产品的黏性?
老板:"小王,为什么我们的产品在百度竞价和各大网站推广时才会有流量,一旦停止推广,马上就没有流量了,为什么呢?" 小王:"是啊,我们的产品在前期做了大量的用户调研工作,而 ...
- 运营干货 | 如何高效引导,使产品达成自传播增长模式
作为增长部门的一员,观察产品运营数据时发现,持续十来天用户日均增量不超过50? 半月前新版上线跟某平台合作进行宣传推广,在复盘过程中却发现该渠道过来的用户7日留存率不足5%? 作为一款社交软件,产品目 ...
- 【干货】深入B端SaaS产品设计核心理念
本文讨论"为什么采用SaaS模式"."SaaS产品有哪些"以及"如何做好SaaS产品设计"三个话题,核心是产品设计,主要从需求定义.方案设计 ...
最新文章
- ieee期刊_IEEE期刊的双栏排版中的图片位置问题
- 前端每日实战:142# 视频演示如何用 CSS 的 Grid 布局创作一枚小鸡邮票
- Hadoop之企业案例分析
- MySQL-02:“数据库”操作基本命令及权限笔记
- 【转】Linux终端下 dstat 监控工具
- 【mysql】全文索引match多列报错
- python标准库os.path中_Python零基础入门学习19:常用标准库之os.path子库
- 大数据分析有什么特点
- 八、Python 之内置函数(。。。)
- html+placeholder+兼容问题,placeholder属性做兼容性处理
- HTML5 简介与安装
- 腾讯云即时通讯IM_ 小贴士
- virtualbox 靶机无法获取IP地址
- HTML 表单发送邮件
- linux生成xorg,生成xorg.conf文件
- 透过脉脉的新闻“线”场看职场
- SCU 4438 Censo (字符串hash)
- 第三十届香港金像奖(转)
- 用Tagxedo制作文字云
- 【哈夫曼树】创建哈夫曼树