本篇文章投稿后几个状态有几个字?

& 小明看一篇文章,这篇文章有50行,每行23个字,这篇文章一共
本题难度:0.65&&题型:解答题
小明看一篇文章,这篇文章有50行,每行23个字,这篇文章一共有多少个字?
来源:学年新人教版三年级(下)第一次月考数学试卷(8) | 【考点】整数的乘法及应用.
小明看一篇文章,这篇文章有50行,每行23个字,这篇文章一共有多少个字?
太阳帆是一种不带机械动力装置的轻便航天器,它像帆船利用风的压力前进一样,利用太阳光和太阳风的压力,作用在帆上来加速飞行.那么,光有压力吗?回答是肯定的.当彗星飞近太阳时,彗星上的部分物质升华和蒸发为气体,形成一条总是背向太阳的尾巴,就曾被认为是太阳光的压力作用的结果(后来弄清楚主要是太阳风作用的结果).从理论上来说,光是光子形成的,每个光子都有一定的能量.当光子撞在帆上被吸收时,这就是光的压力.如光子被反射,压力还会增加.当然,光压是非常小的.在地球上,一个绝对黑体,即光被完全吸收的物体,每平方米上大约只受到2.5×10-6N的光压.但在太空真空中,太阳光压仍能发挥作用.早在20世纪20年代,齐奥尔科夫斯基就提出了太阳帆的概念.光压虽然很小,但可以长期不间断地作用.理论研究表明,在进入太空的航天器上拉起一张巨大的帆,可为航天器提供足够的动力.如果帆面(看成正方形)边长300米,可使500千克的航天器从静止开始沿半椭圆轨道,经200天的加速飞到火星.如果帆面边长增大到2000米,则可使5吨的飞船飞离太阳系.?看完这篇文章,提起了小明的探究兴趣,小明想进一步研究力和运动之间的关系,于是他设计了如图的实验.用钩码通过细线去拉动小车,不断改变钩码的重量G和小车的质量m,来研究不同受力的情况下小车的运动状态改变的情况.图中打点计时器每隔0.02s在纸带上打一个,小明每次测出5个间隔内小车运动的距离,记录在表中.(不考虑小车与木板,绳与滑轮之间的摩擦)(1)将表中空白的地方填上数据
G=1N&&&&&&&&&m=1kg
G=2N&&&&&&&&&m=1kg
G=2N&&&&&&&&&m=2kg
(2)小明用钩码通过细线拉动小车,而不是使用弹簧测力计,这样做有什么好处?(3)根据文中的信息和小明实验的数据,计算边长为2000米,质量为5t的太阳帆航天器仅仅在光压的作用下从静止开始运动1天后,经过的总路程约是多少?(假设太阳帆为绝对黑体,且受到的太阳光压大小不变)
阅读下面的记叙文,回答下面各小题.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 五猖会&&& 孩子们所盼望的,过年过节之外,大概要数迎神赛会的时候了.但我家的所在很偏僻,待到赛会的行列经过时,一定已在下午,仪仗之类,也减而又减,所剩的极其寥寥.往往伸着颈子等候多时,却只见十几个人抬着一个金脸或蓝脸红脸的神像匆匆地跑过去.于是,完了.&&& 我常存着这样的一个希望:这一次所见的赛会,比前一次繁盛些.可是结果总是一个“差不多”;也总是只留下一个纪念品,就是当神像还未抬过之前,化一文钱买下的,用一点烂泥,一点颜色纸,一枝竹签和两三枝鸡毛所做的,吹起来会发出一种刺耳的声音的哨子,叫作“吹都都”的,吡吡地吹它两三天.现在看看《陶庵梦忆》,觉得那时的赛会,真是豪奢极了,虽然明人的文章,怕难免有些夸大.因为祷雨而迎龙王,现在也还有的,但办法却已经很简单,不过是十多人盘旋着一条龙,以及村童们扮些海鬼.那时却还要扮故事,而且实在奇拔得可观.他记扮《水浒传》中人物云:“…于是分头四出,寻黑矮汉,寻梢长大汉,寻头陀,寻胖大和尚,寻茁壮妇人,寻姣长妇人,寻青面,寻歪头,寻赤须,寻美髯,寻黑大汉,寻赤脸长须.大索城中;无,则之郭,之村,之山僻,之邻府州县.用重价聘之,得三十六人,梁山泊好汉,个个呵活,臻臻至至,人马称而行…”这样的白描的活古人,谁能不动一看的雅兴呢?可惜这种盛举,早已和明社一同消灭了.&&& 赛会虽然不象现在上海的旗袍,北京的谈国事,为当局所禁止,然而妇孺们是不许看的,读书人即所谓士子,也大抵不肯赶去看.只有游手好闲的闲人,这才跑到庙前或衙门前去看热闹;我关于赛会的知识,多半是从他们的叙述上得来的,并非考据家所贵重的“眼学”.然而记得有一回,也亲见过较盛的赛会.开首是一个孩子骑马先来,称为“塘报”;过了许久,“高照”到了,长竹竿揭起一条很长的旗,一个汗流浃背的胖大汉用两手托着;他高兴的时候,就肯将竿头放在头顶或牙齿上,甚而至于鼻尖.其次是所谓“高跷”、“抬阁”、“马头”了;还有扮犯人的,红衣枷锁,内中也有孩子.我那时觉得这些都是有光荣的事业,与闻其事的即全是大有运气的人,--大概羡慕他们的出风头罢.我想,我为什么不生一场重病,使我的母亲也好到庙里去许下一个“扮犯人”的心愿的呢?…然而我到现在终于没有和赛会发生关系过.要到东关看五猖会去了.这是我儿时所罕逢的一件盛事,因为那会是全县中最盛的会,东关又是离我家很远的地方,出城还有六十多里水路,在那里有两座特别的庙.一是梅姑庙,就是《聊斋志异》所记,室女守节,死后成神,却篡取别人的丈夫的;现在神座上确塑着一对少年男女,眉开眼笑,殊与“礼教”有妨.其一便是五猖庙了,名目就奇特.据有考据癖的人说:这就是五通神.然而也并无确据.神像是五个男人,也不见有什么猖獗之状;后面列坐着五位太太,却并不“分坐”,远不及北京戏园里界限之谨严.其实呢,这也是殊与“礼教”有妨的,--但他们既然是五猖,便也无法可想,而且自然也就“又作别论”了.&&& 因为东关离城远,大清早大家就起来.昨夜预定好的三道明瓦窗的大船,已经泊在河埠头,船椅、饭菜、茶炊、点心盒子,都在陆续搬下去了.我笑着跳着,催他们要搬得快.忽然,工人的脸色很谨肃了,我知道有些蹊跷,四面一看,父亲就站在我背后.“去拿你的书来.”他慢慢地说.&&& 这所谓“书”,是指我开蒙时候所读的《鉴略》.因为我再没有第二本了.我们那里上学的岁数是多拣单数的,所以这使我记住我其时是七岁.我忐忑着,拿了书来了.他使我同坐在堂中央的桌子前,教我一句一句地读下去.我担着心,一句一句地读下去.&& 两句一行,大约读了二三十行罢,他说:--“给我读熟.背不出,就不准去看会.”&& 他说完,便站起来,走进房里去了.&& 我似乎从头上浇了一盆冷水.但是,有什么法子呢?自然是读着,读着,强记着,而且要背出.&&&&&&&&&&&&&&&&&&&&&&& 粤有盘古,生于太荒,&&&&&&&&&&&&&&&&&&&&&&& 首出御世,肇开混茫.&&& 就是这样的书,我现在只记得前四句,别的都忘却了;那时所强记的二三十行,自然也一齐忘却在里面了.记得那时听人说,读《鉴略》比读《千字文》、《百家姓》有用得多,因为可以知道从古到今的大概.知道从古到今的大概,那当然是很好的,然而我一字也不懂.“粤自盘古”就是“粤自盘古”,读下去,记住它,“粤自盘古”呵!“生于太荒”呵!…&&& 应用的物件已经搬完,家中由忙乱转成静肃了.朝阳照着西墙,天气很清朗.母亲、工人、长妈妈即阿长,都无法营救,只默默地静候着我读熟,而且背出来.在百静中,我似乎头里要伸出许多铁钳,将什么“生于太荒”之流夹住;也听到自己急急诵读的声音发着抖,仿佛深秋的蟋蟀,在夜中鸣叫似的.他们都等候着;太阳也升得更高了.&&& 我忽然似乎已经很有把握,便即站了起来,拿书走进父亲的书房,一气背将下去,梦似的就背完了.“不错.去罢.”父亲点着头,说.&&& 大家同时活动起来,脸上都露出笑容,向河埠走去.工人将我高高地抱起,仿佛在祝贺我的成功一般,快步走在最前头.&&& 我却并没有他们那么高兴.开船以后,水路中的风景,盒子里的点心,以及到了东关的五猖会的热闹,对于我似乎都没有什么大意思.&&& 直到现在,别的完全忘却,不留一点痕迹了,只有背诵《鉴略》这一段,却还分明如昨日事.我至今一想起,还诧异我的父亲何以要在那时候叫我来背书.(1)选文出自《朝花夕拾》,请你再写出出自这本散文集的三篇文章的篇名.(2)选文题目的作用是什么?(3)说说你对选文结尾处加横线句子含义的理解.(4)结合具体语境,对选文中加波浪线句子作简要赏析.(5)选文运用了对比的写作方法,请找出一例,并作简要分析.
(2014o南京校级二模)阅读下列材料,回答下列问题南京市教育局和《金陵晚报》正在开展“汉字南京”系列活动,邀请你参与.材料一:关于“汉字南京”的说明& 由市教育局主办的“汉字南京”是一个旨在“从汉字的角度解读南京,以南京的文化诠释汉字”的系列活动,含时事南京、成语南京、诗词南京、名著南京、名胜南京、博览南京六个专题.星期一到星期六,《金陵晚报》都会选择一个专题,刊登一篇由说字、话词、链接三个板块组成的文章.材料二:“汉字南京”样稿& shū【说字--书】&&& 书是个会意字,在甲骨文中的字形是,由、、共同组成.表示抓的意思,像毛笔,像砚台.本义是用毛笔蘸着墨水写字,后引申为字体、文字的意思,再引申为著作、信件、公文的意思.【话词--书法】“书法”的意思是书写艺术,多指用毛笔写汉字的艺术.书法是中国的一种传统艺术,有篆书、隶书、行书、草书、楷书等不同书体.它以笔墨纸砚为工具,以汉字为载体,讲究点画的形态、偏旁的搭配、全文的布局等内容.【链接】&&& 南京历史上有一位著名的女书法家叫卫夫人.她很小的时候就十分爱好书法.曾拜大书法家钟繇为师,勤学苦练,终有所成.东晋大书法家王羲之还是她的徒弟呢.结合材料二,简要概括“汉字南京”栏目各板块的内容【说字】让我们了解汉字的&&&&等知识.【话词】让我们了解词的&&&&.【链接】让我们了解这个词背后有关南京的文化知识.(3)如图是【链接】中提到的卫夫人的一幅书法作品《古名姬帖》.下面各选项中的句子,均为古人对卫夫人书法作品所作点评的译文,你认为其中适合用来点评作品的一项是&&&&.A.这幅草书作品一气呵成,行笔潇洒飘逸,就像天上的浮云一样,笔力矫健就像腾飞的龙一样.B.这幅作品中,字的形态十分奇特,非常豪迈,随意而书,神韵自然,且用笔丰满、肥美、豪壮有力度,宽绰疏朗.C.这幅作品,线条清秀平和,娴雅婉丽.既像插花少女低头的模样,又像登上高台的女子对着水面欣赏自己的影子.D.这幅作品点、直、弧笔画粗细一致,起止都藏锋,向左撇出的地方并不用撇,向右用捺的地方也不出捺,一概是曲笔弧线结字形成很自然的椭圆形.(4)看了这期“汉字南京”后,小明同学觉得字不仅要写正确,更要写得美观,可他的字写得不好.请你在下面米字格中,用正楷字体,把他写的内容抄一遍让他模仿.
阅读下面一篇文章,完成各题.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 杏荫井台&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 杨闻宇& ①解放初年,村东,我家田地正中有一眼井,井台四周长着七株半搂粗的杏树.& ②杏花破蕾,窝了一冬的麦子才起身;起身的麦苗拔节很快.待麦梢孕穗时,杏树便裹着密匝匝的绿叶,风儿俏皮地拨开叶子,会露出毛茸茸的、一咬能酸掉牙的青杏.麦黄时节,杏儿也黄了;黄杏还掩映在绿叶里,麦浪却千顷万顷,将金色的波浪绵延不断地推向远方的地平线上.村庄里上下翻飞的黄鹂焦急地鸣唱着“算黄算割”,父兄们便提捏着镰把,投入了一年一度最紧张的“龙口夺食”的夏收季节.因为太忙,父母对我们这班七八岁的孩童的吃、穿、玩、睡,是顾不得关照了.村巷里,我们捏着弹弓子乱窜,鸡狗都不喜欢;到田地里捡拾遗落的麦穗儿去吧,身边没个伴,捡不了几穗,便在烈日下伸懒腰,打哈欠,瞌睡就漫上 来了.我排遣寂寞的地方,就是那井台上凉幽幽的杏荫之下.& ③水一样的杏荫下,绽开一领破草席,脱下已露大脚趾的布鞋一扣当枕头,仰面朝天就躺下了.南风习习,绿叶筛动散碎的光影,入梦是极容易的,想不到的是那些顾不上收摘的黄杏,动不动就“啪”地摔一个下来,大概要证明自己熟透了吧,一摔地就从棱界上裂开个娃嘴似的缝儿,半露出衔着的紫褐色的杏核(这类离核儿的白瓤儿是又脆又甜的).我肚皮朝天,睡姿不变,只需缓缓地伸开手去,就能从草席边捏一个搁进嘴里,美滋滋的味儿哟,简直没法形容.当然也偶有扫兴之时,倘是鼾声正匀,有某一个软杏“啪”地砸在脸颊上,那又当别论.总之,一觉醒来,周围三三两两,会跌落许多黄杏儿,小小的、黝黑的蚂蚁知道我也吃不进去了,于是就排成长队,以杏上的裂缝儿为大门,到那金黄色的宝库里尽兴地咂取享受…& & ④“腊炙羊肉嘞!羊肉腊炙的!”地头南边尘土飞扬的土路上,走着一个右臂携着平底筐的汉子,走几步就喊几声,唱歌一样好听.& ⑤乡下,长年间难得见荤.我咽了口唾沫,倏地站起身来;可爸爸正在北垄上光着膀子割麦,寻上去也没有钱.我麻利地脱下小褂儿,铺在地上,失急慌忙地捡了十多个染有红点儿的黄杏,斜插过麦茬地,朝土路上截了过去…& ⑥腊炙肉,摆在筐里的平底木盘上,白纱布苫遮住多半边,露出的几块红光闪闪.卖肉的人瘦高个,五十大几年纪,唇上两撇八字形的细细的黄胡子,短衫儿敞开着前襟,胸部肋骨一条一条的,深凹的两眼格外有神.见我摊开杏儿,便问道:“换肉吃么?”我点点头.他迟疑了一下,在路畔青草上放下提篮,抽出尺把长明锃锃的刀子,割豆腐那样切下了鸡蛋大小的一块肉,我并拢双手,肉轻轻地搁在了我的掌上.他揩揩手收拾杏儿时,才发现杏子全裂开了半边,缝里又爬满了黑蚂蚁,照着缝儿使劲吹了几下,蚂蚁也吹不掉.他咽了一口唾沫,无可奈何地摇摇头:“小兄弟,我不要你这杏儿了.”他拍拍双手,提起我的小衫儿抖了抖尘土,替我搭在肩膀上,我盯着捧在手上的腊肉:“哪?哪咋办呢?”我回望了井台一眼,“我会上树,上去给你摇好的吧!”他携起路畔的筐篮,摇了摇头:“算啦.咱俩交个朋友吧,这块肉送给你啦.”说罢,便起身赶路了.道上尘埃厚厚,一脚踩下去,扑起一团烟尘,他的鞋和下半截裤筒染成了浑黄色…& ⑦我已经要走近井台了,卖肉的忽然又回头喊道:“喂!小家伙!”我的心猛儿一跳:莫非后悔了,想要回他的肉!& ⑧“静静地在杏荫下玩儿,别到井沿边去.大人离井台子远,你可别掉进井里噢!”天热,他那声音已有些沙哑.& ⑨“好--的!”我踮起脚尖大声回应他.& ⑩四野茫茫,烈日炎炎,他那细瘦的身影渐渐地远了,远了…(11)“腊炙羊肉嘞!羊肉腊炙的!”又是杏黄麦收时节,伫立在那片杏荫之下,地平线上的热风,似又将那有些沙哑的吆喝声隐隐约约地传了过来.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (选自《文汇报》日第11版,有改动)(1)仔细阅读文章第②段中的画线句,回答下面的问题.①从画线句看,导致“我”寂寞的两个原因是什么?请用自己的话回答,每个原因不要超过5个字.②联系全文,揣摩作者这样写的用意并作简要说明.(2)文章第③段中的画线句用了什么修辞手法?有什么表达效果?请简要赏析.小小的、黝黑的蚂蚁知道我也吃不进去了,于是就排成长队,以杏上的裂缝儿为大门,到那金黄色的宝库里尽兴地咂取享受…(3)文中有多处细节写出了“我”对腊炙羊肉的渴望,请分点罗列其中的四处.(4)文章第⑨、⑩、(11)三段文字蕴含了“我”丰富的情感,请选择其中一段作简要分析.(5)“杏荫”在文中多次出现,它有怎样的内涵?请结合全文谈谈你的理解.
解析与答案
(揭秘难题真相,上)
习题“小明看一篇文章,这篇文章有50行,每行23个字,这篇文章一共有多少个字?”的学库宝(http://www.xuekubao.com/)教师分析与解答如下所示:
【分析】每行23个字50行有50个23即23×50.
【解答】解:23×50=1150(个).答:这篇文章一共有1150个字.
【考点】整数的乘法及应用.
查看答案和解析
微信扫一扫手机看答案
知识点讲解
经过分析,习题“小明看一篇文章,这篇文章有50行,每行23个字,这篇文章一共”主要考察你对
等考点的理解。
因为篇幅有限,只列出部分考点,详细请访问。
整数的乘法及应用
1.整数乘法:相同数位对齐,从乘法的末位算起,用乘法的每一位去乘被乘数,得数的末位和乘数对齐。2.运算法则:乘法交换律:A×B=B×A 乘法结合律:(A×B)×C=A×(B×C) 乘法分配律:(A+B)×C=A×C+B×C
名师视频同步辅导
1&&&&2&&&&3&&&&4&&&&5&&&&6&&&&7&&&&8&&&&9&&&&10&&&&11&&&&12&&&&13&&&&14&&&&15&&&&
作业互助QQ群:(小学)、(初中)、(高中)32,318被浏览2,148,543分享邀请回答giphy.com/)这是一个国外的网站,可以直接搜索,全是一把一把的动图。 汤不热()这是汤不热上面的一个专栏吧类似于,有很多很炫酷的动图,可以下载下来方便使用,对了汤不热(tumblr)上面就有很多GIF,老司机都知道。高能GIF()这是一个中文GIF搜索网站,图库也很多,支持中文搜索,体验也还不错。关于找GIF,我只推荐这三个,我那儿收藏了还有几个很好的,但是由于篇幅限制,不能一一推荐,有需要的再交流,或者后面再找机会专门写一篇。 3.如何自己制作GIF怎么制作GIF其实网上有很多教程,工具也很多,我使用的是PS,如果更高阶一点就是可以用AE,但是相对来说技术要求也就更高。这儿只给大家分享一个我前面写的一篇文章,关于怎么制作顶部:小亮先生那个动图的教程,制作其他的类似。七、封面图及摘要封面对于一篇微信有多重要我想就不用我再赘述,只说一句:毕竟现在是看脸的时代。接下来就给大家系统的介绍下一篇微信的封面的选择和制作以及摘要的填写技巧。1.怎么选择封面图如何选择封面图,前面介绍图片排版那里已经说了如何找到优质的图片,所以这里我会分享两点: 一是一定要能凸显主题,比如要写汽车方面的文章,我找一张帅气的汽车照片肯定比千言万语来得更直接; 二是不要太多文字,很多公众号喜欢在封面图里面把标题都全部写出来,这样完全没有意义,本来标题中字就很多了,封面图再一样的字还有什么意义呢? 2.如何快速设置封面图快速设置封面我主要从以下三个方面说:一是尺寸问题,微信官方给出的尺寸是900*500像素,所以我们至少必须要使图片保持在9:5的状态,如果没有条件设置成900*500那么精确,至少你用美图秀秀把图片裁剪成9:5,这样出来效果也可以;二是给大家推荐一款适合用来快速做封面图的网页工具,以前的微信总推过一次,创客贴。()三是我给大家介绍一种我做封面图的方法和尺寸,我微信公众号所有的封面图几乎都是用PPT做的,对你没有看错,就是PPT。而且制作速度快到令人窒息,因为我根据尺寸设置了一个PPT模板,并且用母版设置了图片占位符,比任何裁剪都来得快,来的方便。同时我使用的尺寸也不是900*500,以前在网上看到过一个人推荐的一个小一点的尺寸:600*275,发现效果还很棒,所以我也分享给大家:PPT中宽为:21.16cmPPT中高为: 9.70cm为了方便大家使用,我在后台上传了我做好的封面图PPT模板,如果你需要可以我的公众号后台回复:“封面模板”下载使用;找到合适的图片,打开封面图模板,点击中间的图片按钮插入找好的图片,就会直接裁剪成标准尺寸,F12可以另存为图片,就这么方便。3.摘要的填写技巧关于摘要,简单说三点:一是最好形成自己的风格,比如微信:旁门左道,邵云蛟老师的摘要就很有特点,每天就是各种理由+不写摘要几个字,时间一长,形成了自己旗帜鲜明的风格; 二是一定要写摘要,有时候很多人做单图文的时候会写上摘要,多图文的时候感觉看不到就不写了,这样分享到群里看到的就是很傻的你文章里面开头的一些话,所以不管是什么形式的图文一定要写摘要; 三是不要长篇字多的摘要,这样的摘要等于没有,快速阅读时代,一定要别人一眼扫过就知道你要写的是什么,这是最好的摘要。八、预览预览很重要,很重要,很重要,因为预览的时候可以认真细致的查看是否有错别字,是否有排版问题,是否有语句不顺的问题,所以一定要认真的对待预览;另外一点就是我们在编辑器里修改后点击保存就不需要再次预览给手机,手机上推出图片,再点击就可以看到最新改过的啦,这一点有些人还不知道,所以傻傻的说一下。九、一点微小的经验 上面不知不觉的写了这么多,主要就是三件事,还有一点微小的经验给大家分享下:1.统一模板统一模板就是说建议大家在后台制作一套或者两套自己使用的微信排版模板,比如固定的顶部图,文字,底部引导关注的图片文字等,这样的好处是每次编辑新的图文的时候可以非常方便的调用,而且所有微信都是保持统一的风格,最重要的是这样排版速度超级快呀。我的公众号后台就长期保存着这样一套,每次直接套用就好啦。2.快速写微信技巧提升效率,节约排版时间是我不断在追求的,所以在这个过程中,我自己也总结了一些如何提升微信编辑效率的点,今天分享给你。我的建议是: 思维导图:长文最好是先罗列提纲,绘制思维导图,这对于后面的文字写作非常有帮助,可以很流畅的写完全篇微信,比如今天这篇我就是先把框架搭好,直接开始按照思路写; 先文字再排版:这是昨天提到过的一点,我会把一篇微信分成几个板块,一个版块一个版块的完成,这对于思维和提升效率来说都有很大帮助;做好一些固定样式:可以在空闲的时候做一些微信排版中经常需要用到的图片、分割线等小部件,比如我在后台就上传了一套小标题图片,有一套分割线模板,这对于快速排版来说很有帮助。----------------------------------------------------------------------------------------------------------------------啊啊啊啊,终于写完了这篇关于微信排版的正文部分,Word里面写了14页纸,一共6000+的字,这是我在知乎上写的最长的一篇,也是干货量最大的一篇;真的花了很多心血,从下午开始除了中间吃饭、晚上跑步一直在写,希望能帮助你对公众号排版有一个全面的认识。如果在阅读的过程中有什么不清楚的地方可以交流,如果你有什么好的经验做法欢迎和我分享,如果其中有什么疏漏也欢迎指正,谢!以上!5.5K269 条评论分享收藏感谢收起2.6K84 条评论分享收藏感谢收起登录以解锁更多InfoQ新功能
获取更新并接收通知
给您喜爱的内容点赞
关注您喜爱的编辑与同行
966,690 一月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
CAP理论十二年回顾:&规则&变了
CAP理论十二年回顾:&规则&变了
Eric Brewer
0&他的粉丝
郭晓刚 李湃
0&他的粉丝
日. 估计阅读时间:
:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!
亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的。
相关厂商内容
相关赞助商
自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度。NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据。
CAP理论主张任何基于网络的数据共享系统,都最多只能拥有以下三条中的两条:
数据一致性(C),等同于所有节点访问同一份最新的数据副本;
对数据更新具备高可用性(A);
能容忍网络分区(P)。
CAP理论的表述很好地服务了它的目的,即开阔设计师的思路,在多样化的取舍方案下设计出多样化的系统。在过去的十几年里确实涌现了不计其数的新系统,也随之在数据一致性和可用性的相对关系上产生了相当多的争论。“三选二”的公式一直存在着误导性,它会过分简单化各性质之间的相互关系。现在我们有必要辨析其中的细节。实际上只有“在分区存在的前提下呈现完美的数据一致性和可用性”这种很少见的情况是CAP理论不允许出现的。
虽然设计师仍然需要在分区的前提下对数据一致性和可用性做取舍,但具体如何处理分区和恢复一致性,这里面有不计其数的变通方案和灵活度。当代CAP实践应将目标定为针对具体的应用,在合理范围内最大化数据一致性和可用性的“合力”。这样的思路延伸为如何规划分区期间的操作和分区之后的恢复,从而启发设计师加深对CAP的认识,突破过去由于CAP理论的表述而产生的思维局限。
为什么“三选二”公式有误导性
理解CAP理论的最简单方式是想象两个节点分处分区两侧。允许至少一个节点更新状态会导致数据不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。一般来说跨区域的系统,设计师无法舍弃P性质,那么就只能在数据一致性和可用性上做一个艰难选择。不确切地说,NoSQL运动的主题其实是创造各种可用性优先、数据一致性其次的方案;而传统数据库坚守ACID特性(原子性、一致性、隔离性、持久性),做的是相反的事情。下文“ACID、BASE、CAP”小节详细说明了它们的差异。
事实上,CAP理论本身就是在类似的讨论中诞生的。早在1990年代中期,我和同事构建了一系列的基于集群的跨区域系统(实质上是早期的云计算),包括搜索引擎、缓存代理以及内容分发系统1。从收入目标以及合约规定来讲,系统可用性是首要目标,因而我们常规会使用缓存或者事后校核更新日志来优化系统的可用性。尽管这些策略提升了系统的可用性,但这是以牺牲系统数据一致性为代价的。
关于“数据一致性 VS 可用性”的第一回合争论,表现为ACID与BASE之争2。当时BASE还不怎么被人们接受,主要是大家看重ACID的优点而不愿意放弃。提出CAP理论,目的是证明有必要开拓更广阔的设计空间,因此才有了“三选二”公式。CAP理论最早在1998年秋季提出,1999年正式发表3,并在2000年登上Symposium on Principles of Distributed Computing大会的主题演讲4,最终确立了该理论的正确性。
“三选二”的观点在几个方面起了误导作用,详见下文“CAP之惑”小节的解释。首先,由于分区很少发生,那么在系统不存在分区的情况下没什么理由牺牲C或A。其次,C与A之间的取舍可以在同一系统内以非常细小的粒度反复发生,而每一次的决策可能因为具体的操作,乃至因为牵涉到特定的数据或用户而有所不同。最后,这三种性质都可以在程度上衡量,并不是非黑即白的有或无。可用性显然是在0%到100%之间连续变化的,一致性分很多级别,连分区也可以细分为不同含义,如系统内的不同部分对于是否存在分区可以有不一样的认知。
要探索这些细微的差别,就要突破传统的分区处理方式,而这是一项根本性的挑战。因为分区很少出现,CAP在大多数时候允许完美的C和A。但当分区存在或可感知其影响的情况下,就要预备一种策略去探知分区并显式处理其影响。这样的策略应分为三个步骤:探知分区发生,进入显式的分区模式以限制某些操作,启动恢复过程以恢复数据一致性并补偿分区期间发生的错误。
ACID、BASE、CAP
ACID和BASE代表了两种截然相反的设计哲学,分处一致性-可用性分布图谱的两极。ACID注重一致性,是数据库的传统设计思路。我和同事在1990年代晚期提出BASE,目的是抓住当时正逐渐成型的一些针对高可用性的设计思路,并且把不同性质之间的取舍和消长关系摆上台面。现代大规模跨区域分布的系统,包括云在内,同时运用了这两种思路。
这两个术语都好记有余而精确不足,出现较晚的BASE硬凑的感觉更明显,它是“Basically Available, Soft state, Eventually consistent(基本可用、软状态、最终一致性)”的首字母缩写。其中的软状态和最终一致性这两种技巧擅于对付存在分区的场合,并因此提高了可用性。
CAP与ACID的关系更复杂一些,也因此引起更多误解。其中一个原因是ACID的C和A字母所代表的概念不同于CAP的C和A。还有一个原因是选择可用性只部分地影响ACID约束。ACID四项特性分别为:
原子性(A)。所有的系统都受惠于原子性操作。当我们考虑可用性的时候,没有理由去改变分区两侧操作的原子性。而且满足ACID定义的、高抽象层次的原子操作,实际上会简化分区恢复。
一致性(C)。ACID的C指的是事务不能破坏任何数据库规则,如键的唯一性。与之相比,CAP的C仅指单一副本这个意义上的一致性,因此只是ACID一致性约束的一个严格的子集。ACID一致性不可能在分区过程中保持,因此分区恢复时需要重建ACID一致性。推而广之,分区期间也许不可能维持某些不变性约束,所以有必要仔细考虑哪些操作应该禁止,分区后又如何恢复这些不变性约束。
隔离性(I)。隔离是CAP理论的核心:如果系统要求ACID隔离性,那么它在分区期间最多可以在分区一侧维持操作。事务的可串行性(serializability)要求全局的通信,因此在分区的情况下不能成立。只要在分区恢复时进行补偿,在分区前后保持一个较弱的正确性定义是可行的。
持久性(D)。牺牲持久性没有意义,理由和原子性一样,虽然开发者有理由(持久性成本太高)选择BASE风格的软状态来避免实现持久性。这里有一个细节,分区恢复可能因为回退持久性操作,而无意中破坏某项不变性约束。但只要恢复时给定分区两侧的持久性操作历史记录,破坏不变性约束的操作还是可以被检测出来并修正的。通常来讲,让分区两侧的事务都满足ACID特性会使得后续的分区恢复变得更容易,并且为分区恢复时事务的补偿工作奠定了基本的条件。
CAP和延迟的联系
CAP理论的经典解释,是忽略网络延迟的,但在实际中延迟和分区紧密相关。CAP从理论变为现实的场景发生在操作的间歇,系统需要在这段时间内做出关于分区的一个重要决定:
取消操作因而降低系统的可用性,还是
继续操作,以冒险损失系统一致性为代价
依靠多次尝试通信的方法来达到一致性,比如Paxos算法或者两阶段事务提交,仅仅是推迟了决策的时间。系统终究要做一个决定;无限期地尝试下去,本身就是选择一致性牺牲可用性的表现。
因此以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。这就从延迟的角度抓住了设计的核心问题:分区两侧是否在无通信的情况下继续其操作?
从这个实用的观察角度出发可以导出若干重要的推论。第一,分区并不是全体节点的一致见解,因为有些节点检测到了分区,有些可能没有。第二,检测到分区的节点即进入分区模式——这是优化C和A的核心环节。
最后,这个观察角度还意味着设计师可以根据期望中的响应时间,有意识地设置时限;时限设得越短,系统进入分区模式越频繁,其中有些时候并不一定真的发生了分区的情况,可能只是网络变慢而已。
有时候在跨区域的系统,放弃强一致性来避免保持数据一致所带来的高延迟是非常有意义的。Yahoo的PNUTS系统因为以异步的方式维护远程副本而带来数据一致性的问题5。但好处是主副本就放在本地,减小操作的等待时间。这个策略在实际中很实用,因为一般来讲,用户数据大都会根据用户的(日常)地理位置做分区。最理想的状况是每一位用户都在他的数据主副本附近。
Facebook使用了相反的策略6:主副本被固定在一个地方,因此远程用户一般访问到的是离他较近,但可能已经过时的数据副本。不过当用户更新其页面的时候是直接对主副本进行更新,而且该用户的所有读操作也被短暂转向从主副本读取,尽管这样延迟会比较高。20秒后,该用户的流量被重新切换回离他较近的副本,此时副本应该已经同步好了刚才的更新。
CAP理论经常在不同方面被人误解,对于可用性和一致性的作用范围的误解尤为严重,可能造成不希望看到的结果。如果用户根本获取不到服务,那么其实谈不上C和A之间做取舍,除非把一部分服务放在客户端上运行,即所谓的无连接操作或称离线模式7。离线模式正变得越来越重要。HTML5的一些特性,特别是客户端持久化存储特性,将会促进离线操作的发展。支持离线模式的系统通常会在C和A中选择A,那么就不得不在长时间处于分区状态后进行恢复。
“一致性的作用范围”其实反映了这样一种观念,即在一定的边界内状态是一致的,但超出了边界就无从谈起。比如在一个主分区内可以保证完备的一致性和可用性,而在分区外服务是不可用的。Paxos算法和原子性多播(atomic multicast)系统一般符合这样的场景8。像Google的一般做法是将主分区归属在单一个数据中心里面,然后交给Paxos算法去解决跨区域的问题,一方面保证全局协商一致(global consensus)如Chubby9,一方面实现高可用的持久性存储如Megastore10。
分区期间,独立且能自我保证一致性的节点子集合可以继续执行操作,只是无法保证全局范围的不变性约束不受破坏。数据分片(sharding)就是这样的例子,设计师预先将数据划分到不同的分区节点,分区期间单个数据分片多半可以继续操作。相反,如果被分区的是内在关系密切的状态,或者有某些全局性的不变性约束非保持不可,那么最好的情况是只有分区一侧可以进行操作,最坏情况是操作完全不能进行。
“三选二”的时候取CA而舍P是否合理?已经有研究者指出了其中的要害——怎样才算“舍P”含义并不明确11,12。设计师可以选择不要分区吗?哪怕原来选了CA,当分区出现的时候,你也只能回头重新在C和A之间再选一次。我们最好从概率的角度去理解:选择CA意味着我们假定,分区出现的可能性要比其他的系统性错误(如自然灾难、并发故障)低很多。
这种观点在实际中很有意义,因为某些故障组合可能导致同时丢掉C和A,所以说CAP三个性质都是一个度的问题。实践中,大部分团体认为(位于单一地点的)数据中心内部是没有分区的,因此在单一数据中心之内可以选择CA;CAP理论出现之前,系统都默认这样的设计思路,包括传统数据库在内。然而就算可能性不高,单一数据中心完全有可能出现分区的情况,一旦出现就会动摇以CA为取向的设计基础。最后,考虑到跨区域时出现的高延迟,在数据一致性上让步来换取更好性能的做法相对比较常见。
CAP还有一个方面很多人认识不清,那就是放弃一致性其实有隐藏负担,即需要明确了解系统中存在的不变性约束。满足一致性的系统有一种保持其不变性约束的自然倾向,即便设计师不清楚系统中所有的不变性约束,相当一部分合理的不变性约束会自动地维持下去。相反,当设计师选择可用性的时候,因为需要在分区结束后恢复被破坏的不变性约束,显然必须将各种不变性约束一一列举出来,可想而知这件工作很有挑战又很容易犯错。放弃一致性为什么难,其核心还是“并发更新问题”,跟多线程编程比顺序编程难的原因是一样的。
怎样缓和分区对一致性和可用性的影响是对设计师的挑战。其关键是以非常明确、公开的方式去管理分区,不仅需要主动察觉分区的发生,还需要为分区期间所有可能受侵害的不变性约束预备专门的恢复过程和计划。管理分区有三个步骤:
(点击看大图)
检测到分区开始
明确进入分区模式,限制某些操作,并且
当通信恢复后启动分区恢复过程
最后一步的目的是恢复一致性,以及补偿在系统分区期间程序产生的错误。
图1可见分区的演变过程。普通的操作都是顺序的原子操作,因此分区总是在两笔操作之间开始。一旦系统在操作间歇检测到分区发生,检测方一侧即进入分区模式。如果确实发生了分区的情况,那么一般分区两侧都会进入到分区模式,不过单方面完成分区也是可能的。单方面分区要求在对方按需要通信的时候,本方要么能正确响应,要么不需要通信;总之操作不得破坏一致性。但不管怎么样,由于检测方可能有不一致的操作,它必须进入分区模式。采取了quorum决定机制的系统即为单方面分区的例子。其中一方拥有“法定通过节点数”,因此可以执行操作,而另一方不可以执行操作。支持离线操作的系统明显地含有“分区模式”的概念,一些支持原子多播(atomic multicast)的系统也含有这个概念,如Java平台的JGroups。
当系统进入到分区模式,它有两种可行的策略。其一是限制部分操作,因此会削弱可用性。其二是额外记录一些有利于后面分区恢复的操作信息。系统可通过持续尝试恢复通信来察觉分区何时结束。
哪些操作可以执行?
决定限制哪些操作,主要取决于系统需要维持哪几项不变性约束。在给定了不变性约束条件之后,设计师需要决定在分区模式下,是否坚持不触动某项不变性约束,抑或以事后恢复为前提去冒险触犯它。例如,对于“表中键的惟一性”这项不变性约束,设计师一般都选择在分区期间放宽要求,容许重复的键。重复的键很容易在恢复阶段检查出来,假如重复键可以合并,那么设计师不难恢复这项不变性约束。
对于分区期间必须维持的不变性约束,设计师应当禁止或改动可能触犯该不变性约束的操作。(一般而言,我们没办法知道操作是否真的会破坏不变性约束,因为无法知道分区另一侧的状态。)信用卡扣费等具有外部化特征的事件常以这种方式工作。适合这种情况的策略,是记录下操作意图,然后在分区恢复后再执行操作。这类事务往往从属于一些更大的工作流,在工作流明确含有类似“订单处理中”状态的情况下,将操作推迟到分区结束并无明显的坏处。设计师以用户不易察觉的方式牺牲了可用性。用户只知道自己下了指令,系统稍后会执行。
说得更概括一点,分区模式给用户界面提出了一种根本性的挑战,即如何传达“任务正在进行尚未完成”的信息。研究者已经从离线操作的角度对此问题进行了一些深入的探索,离线操作可以看成时间很长的一次分区。例如Bayou的日历程序用颜色来区分显示可能(暂时)不一致的条目13。工作流应用和带离线模式的云服务中也常见类似的提醒,前者的例子如交易中的电子邮件通知,后者的例子如Google Docs。
在分区模式的讨论中,我们将关注点放在有明确意义的原子操作而非单纯的读写,其中一个原因是操作的抽象级别越高,对不变性约束的影响通常就越容易分析清楚。大体来说,设计师要建立一张所有操作与所有不变性约束的叉乘表格(cross product),观察并确定其中每一处操作可能与不变性约束相冲突的地方。对于这些冲突情况,设计师必须决定是否禁止、推迟或修改相应的操作。在实践中,这类决定还受到分区前状态和/或环境参数的影响。例如有的系统为特定的数据设立了主节点,那么一般允许主节点执行操作,不允许其他节点操作。
对分区两侧跟踪操作历史的最佳方式是使用版本向量,版本向量可以反映操作间的因果依赖关系。向量的元素是(节点, 逻辑时间)数值对,分别对应一个更新了对象的节点和它最后更新的时间。对于同一对象的两个给定的版本A和B,当所有结点的版本向量一致有A的时间大于或等于B的时间,且至少有一个节点的版本向量有A的时间较大,则A新于B。
如果不可能对版本向量排序,那么更新操作是并发的,而且有可能出现不一致的情况。只要知道分区两侧版本向量的沿革。系统不难判断哪些操作的执行顺序是确定的,哪些操作是并发的。最近的研究成果证明14,当设计师选择可用性优先,一般最多只能将一致性收紧到这样的程度。
到了某个时刻,通信恢复,分区结束。由于每一侧在分区期间都是可用的,其状态仍继续向前进展,但是分区会推迟某些操作并侵犯一些不变性约束。分区结束的时刻,系统知道分区两侧的当前状态和历史记录,因为它在分区模式下记录了详尽的日志。当前状态不如历史记录有价值,因为通过历史记录,系统可以判断哪些操作违反了不变性约束,产生了何种外在的后果(如发送了响应给用户)。在分区恢复过程中,设计师必须解决两个问题:
分区两侧的状态最终必须保持一致,
并且必须补偿分区期间产生的错误。
通常情况,矫正当前状态最简单的解决方法是回退到分区开始时的状态,以特定方式推进分区两侧的一系列操作,并在过程中一直保持一致的状态。Bayou就是这个实现机制,它会回滚数据库到正确的时刻并按无歧义的、确定性的顺序重新执行所有的操作,最终使所有的节点达到相同的状态15。同样地,并发版本控制系统CVS在合并分支的时候,也是从从一个共享的状态一致点开始,逐步将更新合并上去。。
大部分系统都存在不能自动合并的冲突。比如,CVS时不时有些冲突需要手动介入,带离线模式的wiki系统总是把冲突留在产生的文档里给用户处理16。
相反,有些系统用了限制操作的办法来保证冲突总能合并。一个例子就是Google Docs将其文本编辑操作17精简为应用样式、添加文本和删除文本。因此,虽然总的来说冲突问题不可解,但现实中设计师可以选择在分区期间限制使用部分操作,以便系统在恢复的时候能够自动合并状态。如果要实施这种策略,推迟有风险的操作是相对简单的实现方式。
还有一种办法是让操作可以交换顺序,这种办法最接近于形成一种解决自动状态合并问题的通用框架。此类系统将线性合并各日志并重排操作的顺序,然后执行。操作满足交换率,意味着操作有可能重新排列成一种全局一致的最佳顺序。不幸的是,只允许满足交换率的操作这个想法实现起来没那么容易。比如加法操作可以交换顺序,但是加入了越界检查的加法就不行了。
Marc Shapiro及其INRIA同事最近的工作18,19对于可交换顺序的操作在状态合并方面的应用起了很大的促进作用。该团队提出一种从理论上证明可以保证分区后合并的数据类型,称为可交换多副本数据类型(commutative replicated data types,CRDTs)。他们介绍了如何使用此类数据结构来
保证分区期间进行的所有操作都是可交换顺序的,或者
用“格(lattice)”的数学概念来表示数据,并保证相对于“格”来说,分区期间的所有操作都是单调递增的。
用后一种方法合并状态会汇总分区两边的最大集合。这种方法是对亚马逊购物车合并算法20的形式化总结和改良,合并后的数据是两边购物车的并集,而并运算是一种单调的集合运算。这种策略的坏处是删掉的购物车商品有可能再次出现。
其实CRDTs完全可以实现同时支持增、删操作的分区耐受集合。此方法的本质是维护两个集合:一个放增加的项目,一个放删除的项目,两集合之差即为真正的集合成员。增集合、删集合分别合并起来都不困难,因而增删集合之差合并起来也不困难。在某个时间点上,系统可以从两个集合中清理掉删除的数据项。假如按照一般的设计,像这种清理操作仅在系统没分区的时候才可行,属于设计师必须在分区期间禁止或推迟的特定操作,但是CRDTs的清理操作并不会对可用性产生外在的影响。因此通过CRDTs来实现状态,设计师既保证了可用性,又保证了分区后系统自动合并状态。
比计算分区后状态更难解决的问题是如何弥补分区期间造成的错误。跟踪和限制分区模式下的操作,这两种措施足以使设计师确知哪些不变性约束可能被违反,然后分别为它们制定恢复策略。一般系统在分区恢复期间检查违反情况,修复工作也必须在这段时间内完成。
恢复不变性约束的方法有很多,粗陋一点的办法如“最后写入者胜”(因此会忽略部分更新),聪明一点的办法如合并操作和人为跟进事态(human escalation)。人为跟进事态的例子如飞机航班“超售”的情形:可以把乘客登机看作是对之前售票情况的分区恢复,必须恢复“座位数不少于乘客数”这项不变性约束。那么当乘客太多的时候,有些乘客将失去座位,客服最好能设法补偿他们。
航班的例子揭示了一个外在错误(externalized mistake):假如航空公司没说过乘客一定有座位,这个问题会好解决得多。因此我们看到推迟有风险的操作的又一个理由——到了分区恢复的时候,我们才知道真实的情况。矫正此类错误的核心概念是“补偿(compensation)”;设计师必须设立补偿操作,除了恢复不变性约束,还要纠正外在错误。
技术上CRDTs只允许局部可验证的不变性约束,所以没有补偿的必要,虽然这种限制降低了CRDTs方法本身的能力。用了CRDTs来处理状态合并的设计方案可以允许暂时违反全局性的不变量约束,分区结束后才合并状态,以及履行必要的补偿。
恢复外在错误通常要求知道一些有关外在输出的历史信息。以“喝醉酒打电话”为例,一位老兄不记得自己昨晚喝高了的时候打过几个电话,虽然他第二天白天恢复了正常状态,但通话日志上的记录都还在,其中有些通话很可能是错误的。拨出的电话就是这位老兄的状态(喝高了)的外在影响。而由于这位老兄不记得打过什么电话,也就很难补偿其中可能造成的麻烦。
又以机器为例,电脑可能在分区期间把一份订单执行了两次。如果系统能区分两份一样的订单是有意的还是重复了,它就能取消掉一份重复的订单。如果这次错误产生了外在影响,补偿策略可以是自动生成一封电子邮件,向顾客解释系统意外将订单执行了两次,现在错误已经被纠正,附上一张优惠券下次可以用。假如没有完善的历史记录,就只好靠顾客亲自去发现错误了。
曾经有人正式研究过将补偿性事务作为处理长寿命事务(long-lived transactions)的一种手段21,22。长时间运行的事务会面临另一种形态的分区决策:是长时间持有锁来保证一致性比较好呢?还是及早释放锁向其他事务暴露未提交的数据,提高并发能力比较好呢?比如在单笔事务中更新所有的员工记录就是一个典型例子。按照一般的方式串行化这笔事务,将导致所有的记录都被锁定,阻止并发。而补偿性事务采取另一种方式,它将大事务拆成多个分别提交的子事务。如果要中止大事务,系统必须发起一笔新的、起纠正作用的事务,逐一撤销所有已经提交的子事务,这笔新事务就是所谓的补偿性事务。
总的来说,补偿性事务的目的是避免中止其他用了未正确提交数据的事务(即不允许级联取消)。这种方案不依赖串行化或隔离的手段来保障正确性,其正确性取决于事务序列对状态和输出所产生的净影响。那么,经过补偿,数据库的状态究竟是不是相当于那些子事务根本没执行过一样呢?考虑等价必须连外在行为也包括在内;举个例子,把重复扣取的交易款退还给顾客,很难说成等于一开始就没多收顾客的钱,但从结果上看勉强算扯平了。分区恢复也延续同样的思路。虽然服务不一定总能直接撤销其错误,但起码承认错误并做出新的补偿行为。怎样在分区恢复中运用这种思路效果最好,这个问题没有固定的答案。“自动柜员机上的补偿问题”小节以一个很小的应用领域为例点出了一些思考方向。
当系统中存在分区,系统设计师不应该盲目地牺牲一致性或可用性。运用以上讨论的方法,设计师通过细致地管理分区期间的不变性约束,两方面的性质都可以取得最佳的表现。随着版本向量和CRDTs等比较新的技术逐渐被纳入一些简化其用法的框架,这方面的优化手段会得到比较普遍的应用。但引入CAP实践毕竟不像引入ACID事务那么简单,实施的时候需要对过去的策略进行全面的考虑,最佳的实施方案极大地依赖于具体服务的不变性约束和操作细节。
自动柜员机上的补偿问题
以自动柜员机(ATM)的设计来说,强一致性看似符合逻辑的选择,但现实情况是可用性远比一致性重要。理由很简单:高可用性意味着高收入。不管怎么样,讨论如何补偿分区期间被破坏的不变性约束,ATM的设计很适合作为例子。
ATM的基本操作是存款、取款、查看余额。关键的不变性约束是余额应大于或等于零。因为只有取款操作会触犯这项不变性约束,也就只有取款操作将受到特别对待,其他两种操作随时都可以执行。
ATM系统设计师可以选择在分区期间禁止取款操作,因为在那段时间里没办法知道真实的余额,当然这样会损害可用性。现代ATM的做法正相反,在stand-in模式下(即分区模式),ATM限制净取款额不得高于k,比如k为$200。低于限额的时候,取款完全正常;当超过限额的时候,系统拒绝取款操作。这样,ATM成功将可用性限制在一个合理的水平上,既允许取款操作,又限制了风险。
分区结束的时候,必须有一些措施来恢复一致性和补偿分区期间系统所造成的错误。状态的恢复比较简单,因为操作都是符合交换率的,补偿就要分几种情况去考虑。最后的余额低于零违反了不变性约束。由于ATM已经把钱吐出去了,错误成了外部实在。银行的补偿办法是收取透支费并指望顾客偿还。因为风险已经受到限制,问题并不严重。还有一种情况是分区期间的某一刻余额已经小于零(但ATM不知道),此时一笔存款重新将余额变为正的。银行可以追溯产生透支费,也可以因为顾客已经缴付而忽略该违反情况。
总而言之,因为通信延迟的存在,银行系统不依靠一致性来保证正确性,而更多地依靠审计和补偿。“空头支票诈骗”也是类似的例子,顾客赶在多家分行对账之前分别取出钱来然后逃跑。透支的错误过后才会被发现,对错误的补偿也许体现为法律行动的形式。
感谢Mike Dahlin、Hank Korth、Marc Shapiro、Justin Sheehy、Amin Vahdat、Ben Zhao以及IEEE Computer Society的志愿者们,感谢他们对本文的有益反馈。
Eric Brewer是University of California, Berkeley的计算机科学教授,在Google担任基础设施方面的VP。他的研究兴趣包括云计算、可伸缩的服务器、传感器网络,还有适合发展中地区应用的技术。他还帮助建立了美国联邦政府的门户网站USA.gov。Brewer从MIT获得电子工程和计算机科学的博士学位。他是National Academy of Engineering的院士。联系方式:
杂志是IEEE Computer Society的旗舰刊物,发表经过同行评议的高水平文章,读者和作者都是从事各类计算科技相关领域的专业人士,文章涵盖的范围囊括软硬件的新研究和新应用。这本杂志比商业杂志更注重技术内涵,比研究期刊更注重实用思维。为您传递工作中用得上的信息。
1. E. Brewer, "Lessons from Giant-Scale Services," IEEE Internet Computing, July/Aug. 2001, pp. 46-55.
2. A. Fox et al., "Cluster-Based Scalable Network Services," Proc. 16th ACM Symp. Operating Systems Principles (SOSP 97), ACM, 1997, pp. 78-91.
3. A. Fox and E.A. Brewer, "Harvest, Yield and Scalable Tolerant Systems," Proc. 7th Workshop Hot Topics in Operating Systems (HotOS 99), IEEE CS, 1999, pp. 174-178.
4. E. Brewer, "Towards Robust Distributed Systems," Proc. 19th Ann. ACM Symp.Principles of Distributed Computing (PODC 00), ACM, 2000, pp. 7-10; .
5. B. Cooper et al., "PNUTS: Yahoo!’s Hosted Data Serving Platform," Proc. VLDB Endowment (VLDB 08), ACM, 2008, pp. .
6. J. Sobel, "Scaling Out," Facebook Engineering Notes, 20 Aug. 2008; .
7. J. Kistler and M. Satyanarayanan, "Disconnected Operation in the Coda File System" ACM Trans. Computer Systems, Feb. 1992, pp. 3-25.
8. K. Birman, Q. Huang, and D. Freedman, "Overcoming the ‘D’ in CAP: Using Isis2 to Build Locally Responsive Cloud Services," Computer, Feb. 2011, pp. 50-58.
9. M. Burrows, "The Chubby Lock Service for Loosely-Coupled Distributed Systems," Proc. Symp. Operating Systems Design and Implementation (OSDI 06), Usenix, 2006, pp. 335-350.
10. J. Baker et al., "Megastore: Providing Scalable, Highly Available Storage for Interactive Services," Proc. 5th Biennial Conf. Innovative Data Systems Research (CIDR 11), ACM, 2011, pp. 223-234.
11. D. Abadi, "Problems with CAP, and Yahoo’s Little Known NoSQL System," DBMS Musings, blog, 23 Apr. 2010;
12. C. Hale, "You Can’t Sacrifice Partition Tolerance," 7 Oct. 2010; .
13. W. K. Edwards et al., "Designing and Implementing Asynchronous Collaborative Applications with Bayou," Proc. 10th Ann. ACM Symp. User Interface Software and Technology (UIST 97), ACM, 1999, pp. 119-128.
14. P. Mahajan, L. Alvisi, and M. Dahlin, Consistency, Availability, and Convergence, tech. report UTCS TR-11-22, Univ. of Texas at Austin, 2011.
15. D.B. Terry et al., "Managing Update Conflicts in Bayou, a Weakly Connected Replicated Storage System," Proc. 15th ACM Symp. Operating Systems Principles (SOSP 95), ACM, 1995, pp. 172-182.
16. B. Du and E.A. Brewer, "DTWiki: A Disconnection and Intermittency Tolerant Wiki," Proc. 17th Int’l Conf. World Wide Web (WWW 08), ACM, 2008, pp. 945-952.
17. "What’s Different about the New Google Docs: Conflict Resolution" blog.
18. M. Shapiro et al., "Conflict-Free Replicated Data Types," Proc. 13th Int’l Conf. Stabilization, Safety, and Security of Distributed Systems (SSS 11), ACM, 2011, pp. 386-400.
19. M. Shapiro et al., "Convergent and Commutative Replicated Data Types," Bulletin of the EATCS, no. 104, June 2011, pp. 67-88.
20. G. DeCandia et al., "Dynamo: Amazon’s Highly Available Key-Value Store," Proc. 21st ACM SIGOPS Symp. Operating Systems Principles (SOSP 07), ACM, 2007, pp. 205-220.
21. H. Garcia-Molina and K. Salem, "SAGAS," Proc. ACM SIGMOD Int’l Conf. Management of Data (SIGMOD 87), ACM, 1987, pp. 249-259.
22. H. Korth, E. Levy, and A. Silberschatz, "A Formal Approach to Recovery by Compensating Transactions," Proc. VLDB Endowment (VLDB 90), ACM, 1990, pp. 95-106
原文链接:
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博()或者腾讯微博()关注我们,并与我们的编辑和其他读者朋友交流。
Author Contacted
语言 & 开发
244 他的粉丝
架构 & 设计
628 他的粉丝
105 他的粉丝
175 他的粉丝
38 他的粉丝
Performance
1 他的粉丝
0 他的粉丝
关系型数据库
0 他的粉丝
25 他的粉丝
2611 他的粉丝
13 他的粉丝
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
这么好的文章回复怎么那么少呢?
CQRS可以弥补最终一致性
Re: CQRS可以弥补最终一致性
好文章,从来不发帖的我也登录进去赞一下
理论的力量
对CAP理论的认识更深了
Re: question
Re: question
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
订阅InfoQ每周精要,加入拥有25万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
InfoQ.com及所有内容,版权所有 ©
C4Media Inc. InfoQ.com 服务器由 提供, 我们最信赖的ISP伙伴。
极客邦控股(北京)有限公司
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。}

我要回帖

更多关于 给几个女孩当马桶文章 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信