写文章累,没作用,不想发,想不想修真 道童了解我怎么看

梦想可以尊重,但瞎想不妨嘲弄 | 科学人 | 果壳网 科技有意思
梦想可以尊重,但瞎想不妨嘲弄
引力波 诺贝尔哥 郭英森 民间科学家 民科 非你莫属 爱因斯坦 发现引力波
本文作者:松鼠老孙
我从没有想过,“引力波”会以这样的形式,第二次引爆“朋友圈”。一则视频在所谓“营销账号”的反复推动下,成为热点,5年前《非你莫属》的一位郭姓嘉宾因为在节目中提及“引力波”而备受同情,有人称之为“一个了不起的工人”,也有人要求“请你尊重别人的梦想”。然而,这位后来被某些人加冕以“诺贝尔”之名的“诺贝尔哥”真的是手持被忽视的伟大成果吗?“诺贝尔哥”的梦想真的是嘲讽的禁脔吗?
什么是民间科学家
在讨论中,很多人提到了“民科”,民科是什么?“民间科学家”。它指的是一些没有经过系统训练,也不在职业学术群体之内的研究者。在近现代科学还处于幼年时代的时候,确实有很多“民间科学家”做出过重要的成果。然而,随着科学的发展,专业细分变得越来越明确和深入,一个未受过严格的系统训练、游离于职业学术群体的人,实际上已经几乎无法跟上专业领域的发展了,更不要说在其中建立怎样的功业。当然,在科学的一些边界上,依然保留着少量的“爱好者保留地”。博物学就是其中重要的组成部分,比如鸟类和昆虫的新种发现,很多就都是爱好者完成的,而在古生物领域,郑晓廷先生更是通过自己的努力,以半路出家的状态为高等学府接受,并且在《自然》(Nature)、《科学》(Science)这样的顶级期刊上发表论文。
(右一)曾在《科学》、《自然》、《美国科学院院刊》、《鸟类学研究》、《英国皇家学报B》等专业期刊上发表文章超过十篇。图中右二为中国科学院古脊椎与古人类研究所所长周忠和院士。天宇博物馆图片来源:天宇博物馆
从这个意义上来说,“诺贝尔哥”根本算不得真正意义上的民间科学家,他只是一个口诵科学术语,却与科学无甚关系的“妄人”。他不是第一个这样的妄人,当然也不会是最后一个。这些人散落于各处,学历普遍不高,境遇普遍不好,凭借一腔热情希望用自己的“独创”理论解决的重大问题。在中国,受到文学作品和大众文化的影响,“哥德巴赫猜想”和“相对论”是他们的主攻方向。诺贝尔奖是他们的基本目标,所以他们很担心别人偷窃他们的成果。
在我的职业生涯中,就曾经不止一次地接待过这样的“妄人”,也试着阻拦过他们。打个不恰当的比方,有人已经家徒四壁,却不好好工作,挤出一点钱来就去买彩票,相信靠着自己的巫术必能中奖——如果面前有这么个人,公众会如何评价;更何况,现在这个人不仅仅是不听劝阻,把本就不多的钱全都买彩票,还给自己的买彩票事业写了商业计划书,开始游说投资人,希望能融到更多的资金,砸更多的钱,买更多的彩票……
“诺贝尔哥”展示的并不是创新
“诺贝尔哥”声称,他发明的理论是现代物理学(他所谓“正物理学”)所没有的。然而,实际上他认为是自己发明的那些名词,包括“引力波”都是从科普作品(或者报纸网站)上抄来的。他认为自己独创的“加速系+引力波+物质波”理论当中,“物质波”是物理学家德布罗意(Louis de Broglie)在1923年的博士论文中提出来的,是量子力学的一个基本概念,而“引力波”是一百年前爱因斯坦广义相对论的一个预言。至于“加速系”只不过是说,这个参考系在做加速运动,比如上升的火箭或下降的飞船。这些名词都是他从科普文章里看来,看得久了,以为是自己独创的了,这也是一个常见的心理现象。
他搞的也不是什么研究。“诺贝尔哥”希望他的“新科学”可以“各种车辆不用车轮,人的生命可以无限延长就像活神仙”,这是非常美好的幻想。但正如嘉宾张光北指出的“得先把基础知识弄明白,才能不断地攀登科学高峰,实现人类的梦想和幻想。”“诺贝尔哥”和当代众多“妄人”的悲剧是,他们心中对科学怀有美好的想象,也知道科学具有无限的应用前景,可他们做的事情恰恰是不科学的。
“诺贝尔哥”把他的理论称为“统一物理学”,这也是从爱因斯坦的“统一场论”这个词变化而来的。很多所谓的“民间科学家”把爱因斯坦视为榜样,认为他也是民间科学家。可能他们并没有仔细看过爱因斯坦的传记。爱因斯坦接受过完整的科班教育,始终关注科学界同行的研究动向。爱因斯坦的科学论文也是发表在同行评议的期刊上,被同行阅读和评论,因此普朗克才能知道在伯尔尼有这样一位年轻有为的科学家,从而把爱因斯坦聘请到德国担任教职。
许多“妄人”把爱因斯坦当做“民科”,却不知道爱因斯坦接受过怎样的科学训练,又是如何进行科学工作的。图片来源:</
我们经常说科学家是站在巨人的肩膀上,这个意思是,每一代科学家都是在前人工作的基础上进行改进和创新,没有哪个科学家是无视当前科学进展,闭门造车发明惊世理论。科学家要跟同行经常交流,了解已经取得的科学成果、科学前沿的新发现和存在的问题。科学家发表论文的目的,一是为了成果的优先权(第二发现者是验证他人成果,会被大家忘记,所以要熟悉前沿动态),更重要的是请同行一起来审阅是否存在谬误之处(大多数声称的新发现其实被证明是存在问题的,所以要相互批评)。
“同行评议”是科学工作的基本原则
任何人都可以对科学家工作提出批评,但是只有首先理解了科学家的工作内容,才能提出有价值的批评意见。这也是为什么现代从事科学研究首先要接受多年的科学训练,了解至少从哥白尼、牛顿时代以来几百年时间累积的科学成果。问题是,“诺贝尔哥”这样的妄人没能接受完整的科学教育,也无力继续学习。
既往的科学成果当然不代表绝对正确的,每一次科学创新都意味着挑战前人,发现前人工作中存在的问题甚至谬误。但这都是在理解前人工作的基础上达成的创新。所以爱因斯坦才会认为牛顿是人类历史最伟大的科学家,因为他奠定了我们理解世界的基本方式。爱因斯坦的相对论并不是完全彻底地颠覆了牛顿物理学,而是一个“升级版”,在低速、引力较小的情况下,相对论可以简化为牛顿物理学。
但“妄人” 们恰恰拒绝科学家对他们的批评意见,他们每个人都认为自己的发明是独一无二的,是彻底颠覆前人的。所以他们不能理解科学家为什么不承认他们的“成果”,甚至认为科学家们在阻碍他们“创新”。
“妄人”们几乎完全无法阅读自己所“研究”的领域中的前沿成果,他们自己的“论文”总是漏洞百出,套用了错误的共识,出现低级的计算错误。更有甚者是“诺贝尔哥”这样的,还在所谓的“论文”中掺入了非科学、伪科学的沙子。
在科学界采用同行评议的形式对学术成果进行审查。此过程中,研究者的学术著作会被交给同领域的其他专家学者评审,以保证该研究者的著作水平符合一般学术及该特定领域的标准。这个程序是科研工作者发表工作成果的基本环节。图片来源:eufic.org
有意思的是,在科学领域内,有些非主流的观点、理论,虽然不被同行的大多数科学家接受,但还是有一些科学家持有这样的观点。无论是这些“非主流科学家”内部,还是他们与主流科学界之间,因为所使用的方法、对术语的定义是一致的,所以并无交流上的障碍。但对“妄人”来说,不仅仅无法与主流科学界进行正常交流,他们彼此之间也是无法交流的。与此同时,他们极度反感批评和劝阻,甚至有可能将劝阻者视为“盗取成果”的“骗子”——闭关锁国还想一统天下,这又是一种怎样的白日做梦?
不要嘲弄错对象
《5年前节目中他首提引力波,遭嘉宾嘲讽,如今他们都欠他一个道歉》《下岗工人论证引力波,遭方舟子和Boss团集体围攻》……“高手在民间”“欠他一个道歉”,这些标题在视频网站肆虐,这样的表述在社会化论坛上横行。这样的肆虐与横行,与“引力波”或者“科学”并无任何关系。在这一场“舆论风暴”当中,“引力波”只是一根激起爆炸的雷管,它激发的是一种群体性的自我投射:对自己“梦想”的一种肯定,以及归因的一种外化。
一个人可以没有接受过训练,可以有梦想,甚至可以满嘴跑火车,但你得知道自己的言说并不可靠。当周围人,尤其是“初来乍到”的领域的专业人士劝阻你时,最好重新审视自己的工作,及时调整或者退出止损。反过来,不依靠努力,而是靠着各种形式的博取同情去谋求自己在科学领域内“一夜暴富”,甚至视所有劝阻为“阴谋”——助长与烘托这样的行为,是对所有努力者的努力的嘲弄和践踏。
不要嘲弄错对象。
(编辑:Calo)
文章题图:《非你莫属》节目截图
你可能感兴趣
有太多人的知识水平只限于能识字,所以“只要你努力,你的梦想就一定能实现”等等存在明显逻辑错误的鸡汤才能对亿万万群盲起作用。
“那些费十年灯火读这读那而获得成就的学者全是僵化刻板不懂哲学不通世事的书呆子,真正的决胜因素在于有没有梦想/经验/其实傻子都知道但只有我以为很高妙的常识/道听途说先入为主胡说八道但我以为颠扑不破的伪常识等这些我仅有的东西。”这种烂鸡汤,不管以什么形式出现,谁信谁上当。
我原本以为此文发在果壳没有什么争议,想不到果壳还存在那么多……
显示所有评论
全部评论(917)
昨天刚被人在“引力波”问题上教训了 一顿.....
在基础教育真正普及之前,这个问题无解....再一次对文理分科手动再见....
“那些费十年灯火读这读那而获得成就的学者全是僵化刻板不懂哲学不通世事的书呆子,真正的决胜因素在于有没有梦想/经验/其实傻子都知道但只有我以为很高妙的常识/道听途说先入为主胡说八道但我以为颠扑不破的伪常识等这些我仅有的东西。”这种烂鸡汤,不管以什么形式出现,谁信谁上当。
会计学硕士生,摄影爱好者
作者的意愿无意是好的,但是宣传的手段上似乎还不够。光说别人是错的,也不说别人错在哪里,光讲情怀,难以服众。
虽然 “度规” 对他而言如同对牛弹琴..... 但这完全不妨碍他认为他懂广义相对论......能照猫画虎把电磁波的现象套在引力波上.....引力波是时空的涟漪....... 问题是,到底有几个人,把 '时空' 当术语来理解..... 大多数是当文学词汇理解了吧......我开始赞同 '空时' 比 '时空' 要好一点的想法了..... 虽然很久以前我坚定地认为没这个必要.....教科书上 '空时' 取代 '时空', 真有这么一天的话,那还真是新闻媒体,民科夫司机们对我国物理学的 贡献.....真有这么一天...... “那无法抑制的泪水, 少年少女的心底啊,是悲伤还是欢笑......."
前排坐等撕逼,虽然这里可能撕不起来,我看果壳网官方微博下面的热门评论还好,有的地方都不能看。。。另外,我觉得最无辜的是董浩叔叔啊,最近一条微博下面被骂的好惨。。。
有太多人的知识水平只限于能识字,所以“只要你努力,你的梦想就一定能实现”等等存在明显逻辑错误的鸡汤才能对亿万万群盲起作用。
引用 的话:作者的意愿无意是好的,但是宣传的手段上似乎还不够。光说别人是错的,也不说别人错在哪里,光讲情怀,难以服众。宣传上的手段可以有,而且,可以立竿见影......比如说把这些民科们荟萃起来,让他们和比较优秀的中学生 pk 一下,解决实际问题也好,虚拟的理论问题也好..... 立刻就露馅了..... 而且,影响面巨大。每个参加节目的学生家长和亲朋.... 都会对伪科学有个深刻的认识.......很多中学生可以看穿并揭露他们的..... but,在无良媒体的影响下,家长们 ".....的专家不比你懂?!“但有个问题, 一来民科们其实大多还有基本的自知之明,他们躲起来不出头,这个你没辙二来,其实也不是钓不着足够的民科来做节目,but, 在很多媒体那里,这个“政治不正确".....或者说,媒体人的主流..... 至少是根本不了解科学的,能做到敬而远之的就已经算很友好,很少见了..... 更多的是带有内心深处的抵制,排斥,乃至反对..... 巴不得找个机会恶心一下你们这些当年的学霸们呢......
很多人知识是够用的,却缺乏基本的整理、分析和综合信息的能力,最终演变成:我只相信自己愿意相信的。最后思维越走越歪,转不回来。几乎所有顶这位民科的网民,都是思维越走越歪的典型。
引用 的话:在基础教育真正普及之前,这个问题无解....再一次对文理分科...对于风马牛不相及的东西,除了尊重,有资格嘲弄吗?
这类民科极有可能在心理或者精神上存在问题。谢绝民间神医科普打脸,感激涕零。
拜托大家工作都很忙,谁有时间去嘲弄一个八竿子打不着的人。好吧,你说你很专业,你确定你的“专业知识”不是来自网站上看到的碎片信息?看了点碎片就瞬间觉得自己不一样了有嘲弄别人的资本了,呵呵。真这么闲多在自己的项目上下点工夫吧。
一切嘲讽都是无知的
引用 的话:很多人知识是够用的,却缺乏基本的整理、分析和综合信息的能力,最终演变成:我只相信自己愿意相信的。最后思维越走越歪,转不回来。几乎所有顶这位民科的网民,都是思维越走越歪的典型。有数据说明所有顶这个人的思想都越走越歪么?我顶他是因为他可以在众位大佬面前说出自己想说的话,无论对错,每个人都有发言的言论,何况是在节目中,我不关心什么理论,我只关心一群人对一个人的不尊重这件事儿
中了第4条 【4】权威愚且坏,民间出奇才这是官方为了不让我们知道 XX 而想出来的阴谋!科学家花了 XX 年解决的问题,竟早已被他看穿!
引用 的话:那么你到毛主席纪念堂里放个憋了一周的大响屁是不是国家主席就要接见你了?按你的逻辑,你做出了任何人都不敢做的事。我的逻辑?人家来上节目,你不让人说话?你嘲讽人家?这种态度就是有问题!就是不尊重人。
引用 的话:节目是让你上来说话的,不是上来放屁的。呵呵,你这种把“屁”挂在嘴上的,我也权当你在放屁吧
引用 的话:节目是让你上来说话的,不是上来放屁的。想起来昨天看到这个评论:有人说上课回答问题的时候,不管你说的对不对,老师都会听你讲,或者讨论问题,即使你是错的也会听你说完。。但是,你如果在胡说八道,当然会让你闭嘴。。。。
不妨感受一下
我就看看 不说话。 或许时间可以说明一切
引用 的话:有数据说明所有顶这个人的思想都越走越歪么?我顶他是因为他可以在众位大佬面前说出自己想说的话,无论对错,每个人都有发言的言论,何况是在节目中,我不关心什么理论,我只关心一群人对一个人的不尊重这件事儿判断民科研究靠不靠谱,主要看他的研究方法。科学的方法,比如说数学,或者科学界通用的方法,那不论成功与否都得尊重。但是绝大多数民科,大概是数学或科学界通用的方法他学不明白,自己又按自己的套路,定义或曲解出了一套系统。这样一来他的结论就成了无源之水,无本之末,丝毫没有了价值可言。怎么反驳这种人,必然是:你的定义或前提就是错的,就是视频中嘉宾这种态度。
知识是前提。。。
引用 的话:判断民科研究靠不靠谱,主要看他的研究方法。科学的方法,比如说数学,或者科学界通用的方法,那不论成功与否都得尊重。但是绝大多数民科,大概是数学或科学界通用的方法他学不明白,自己又按自己的套路,定义或曲解...我没看过全部视频,也不管民科是什么,我只看到人家没说全一句话,全是被打断的,完全没给人表达的机会。
引用 的话:他们确实不一定很懂。但是要嘲讽此人,上过初中物理就够资格了。不要忘了,还有一种是为了节目播出时候的效果。。。现在一些节目不就是当场开始撕逼然后再上一个热搜,多少人围观呐。。。
我原本以为此文发在果壳没有什么争议,想不到果壳还存在那么多……
这篇文章看得捉急!科学是格物致知!是实事求是!再花哨的理论没有实验验证就是个屁!爱因斯坦之所以是科学家在于他的理论能解释自然现象并做出预言然后被验证。民科之所以是民科在于他们的理论只是装神弄鬼跳大神,跟真正的自然现象一毛钱关系也没有,当然也从没见过他们做实验。
引用 的话:请滚远点,你这种脑残,总是能和人不在一个位面上回复。引用 的话: 你这种人也不知道是不是语文没学好,还是没看明白别人在说什么,我回复说作者的辩证,那个节目中主持人的态度,你非要去说有资格去嘲笑别人,拜托带点脑子出来看完别人评论了,再回复他就是一味的护主,完全不看人说啥,咱就权当没看见好了
引用 的话:有数据说明所有顶这个人的思想都越走越歪么?我顶他是因为他可以...尊重那也得看人,哗众取宠的骗子无耻地把爱因斯坦的预言说成自己的“首提”这种人也配被尊重?呵呵
引用 引用 的话: 原来上过初中物理就可以开嘲讽了,不好意思,在下是高中物理出...哟!这么高的学历啊?卧槽,骚年你很有前途啊!相对论和量子力学还有整个数学体系就靠你来推翻了,加油!一个了不起的高中生!
引用 的话:尊重那也得看人,哗众取宠的骗子无耻地把爱因斯坦的预言说成自己的“首提”这种人也配被尊重?呵呵我更欣赏许怀哲和关凌的态度。某些人简直恶心。
显示所有评论
(C)2017果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:登录以解锁更多InfoQ新功能
获取更新并接收通知
给您喜爱的内容点赞
关注您喜爱的编辑与同行
966,690 十月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
如何查看我的订单-REST的流程API设计案例
如何查看我的订单-REST的流程API设计案例
0&他的粉丝
日. 估计阅读时间:
:Facebook、Snapchat、Tumblr等背后的核心技术
相关厂商内容
相关赞助商
好吧,很自然,这需要我们的程序支持移动设备。
图 1& 昨天我们这样开发程序
似乎就在昨天,我们还在如图1一般开发程序,我们一边打开firebug进行调试,一边诅咒IE的不得好死,那时我们的关注点集中在前端,集中在如何使各个浏览器的行为和样式保持一致。而服务器端则是经典的MVC框架,直接将渲染好的HTML文档扔回客户端。
图 2& 今天我们这样开发程序
然而到了今天,一切都发生了变化,我们开发的程序成了图2的样子,随着IE向标准的靠拢,HTML5似乎有一统客户端之势,然而,移动互联网的兴起让我们编写程序重新变得复杂,昨天我只需要支持浏览器,现在则需要支持各种手机平台上的原生应用。自然,和昨天存在大量的javascript和css框架来抹平不同浏览器之间的差别一样,现在我们也有了和来抹平不同平台之间的差别,尽管目前这些跨平台工具还存在用户体验不理想的问题,但最重要的变化来自两个方面:一是客户端重新变胖;二是服务器端由返回渲染完成的页面退化为返回数据,具体表现就是对客户端暴露出API。
对移动设备的支持使得我可以在写代码时、吃饭时、睡觉时甚至坐马桶时随时查看我的订单(当然前提是你得有这些设备),而本文后续的架构变化也会围绕着图2逐渐演进。至于明天HTML5是否会最终代替原生应用,我觉得不会,不仅仅是技术原因(对设备硬件的使用)更重要的是商业原因,替代后的苹果变得和现在的微软/诺基亚一样尴尬,那么,也许后天?
好吧,既然是REST的API设计,我们来看看REST的架构风格。RESTful 架构遵从以下几个原则:
请求是客户-服务器 式的,并很自然地使用一种基于拉的交互风格。
请求是无状态的。每个从客户端到服务器端的请求都必须包含理解此请求所需的全部信息,而且不能利用服务器上所存储的上下文。
客户端和服务器都遵从统一的接口。所有的资源都可通过 Web 的普通接口进行访问 && HTTP 及 HTTP 方法:GET、POST、PUT 和 DELETE。
客户端通过URI与命名的资源进行交互。
将http 状态码作为系统的状态码。
REST的实质是充分利用HTTP协议,形成大家都能接受的约定。
看例子,我们以订单列表作为整个应用的调用入口,我们首先会GET:http:///orders,服务器返回以下的数据:
&link rel=&list& media-type=&application/xml& url=&/orders&/&
&id&1000&/id&
&state&draft&/state&
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1001&/id&
&state&completed&/state&
&link rel=&detail& media-type=&application/xml& url=&/order/1001&/&
在返回的数据中,我们看到了:
&link rel=&detail& media-type=&application/xml& url=&/order/1001&/&
这个链接引导我们查看具体的订单信息,我们GET:http:///order/1000,服务器返回以下的数据:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1000&/id&
&state&draft&/state&
&cost&88.0&/cost&
&link rel=&edit& media-type=&application/xml& url=&/order/1000&/&
&link rel=&delete& media-type=&application/xml& url=&/order/1000&/&
&/content&
这里我们看到了两个链接:
&link rel=&edit& media-type=&application/xml& url=&/order/1000&/&
&link rel=&delete& media-type=&application/xml& url=&/order/1000&/&
它们告诉我们可以对这个处于草拟状态的订单进行修改和删除。我们GET另外一个已完成的订单看看:http:///order/1001,返回数据:
&link rel=&detail& media-type=&application/xml& url=&/order/1001&/&
&id&1001&/id&
&state&completed&/state&
&cost&66.0&/cost&
&/content&
没有更多的链接,这意味着我们只能对该订单进行查看。
在这些交互中,最重要的是服务器端返回数据本身已包含了对其他资源访问和对现在资源操作的线索。这样的好处在于客户端只需要一个入口地址,其他所有的操作地址全部由服务器端确定,这使得客户端与服务器端解耦,客户端不必再硬编码入URI,能够各自独立的进化,服务器端负责数据、权限以及交互URI的确定,客户端重新回归展现数据的单一职责。
第二个需求,实现一个简单的流程
在上面的例子里,我们看到了订单的CRUD操作,但这并不是实际生活中的真实情况,整个订单的生命周期如下图所示:
图 3& 订单的完整流程
在实现这个流程时,我们分为两步:第一步对订单进行资源建模;第二步通过工作流对订单进行流程的生命周期管理。
图 4& 订单的资源模型
图 5& 使用工作流管理订单的生命周期
工作流的职责在于管理订单的生命周期,在其生命周期的不同阶段,我们会有不同的参与者,对订单不同的操作权限。我们的系统架构演变成下面的样子:
图 6& 使用工作流管理资源模型的生命周期
看例子,这次将我们视角转移到框框网这边,看看框框如何处理我们已提交的订单。我们使用GET:http:///orders?status=waiting-review来获取所有需要审核的订单,服务器返回以下的数据:
&link rel=&list& media-type=&application/xml& url=&/orders&/&
&id&1000&/id&
&state&waiting review&/state&
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
我们查看具体的订单信息,我们GET:http:///order/1000,服务器判断出我们是框框网员工,返回以下的数据:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1000&/id&
&cost&88.0&/cost&
&state&waiting review&/state&
&activity rel=&review& media-type=&application/xml& url=&/review/order/1000&/&
&/squence&
&/content&
注意到这两行:
&state&waiting review&/state&
&activity rel=&review& media-type=&application/xml& url=&/review/order/1000&/&
&/squence&
这段信息是由工作流加入的,它告诉我们当前订单的状态为等待审核以及下一步需要我们来审核。那么,我们PUT 告诉服务器我们审核通过,服务器返回数据:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1000&/id&
&cost&88.0&/cost&
&state&waiting send&/state&
&activity rel=&send& media-type=&application/xml& url=&/sent/order/1000&/&
&/squence&
&/content&
同样,工作流加入了这两行数据:
&state&waiting send&/state&
&activity rel=&send& media-type=&application/xml& url=&/sent/order/1000&/&
&/squence&
告诉我们当前订单状态为等待送货,而下一步需要我们来完成这一步。此时,如果顾客来查看自己的订单会得到什么数据呢?服务器会判断出当前请求的用户是顾客,那么:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1000&/id&
&cost&88.0&/cost&
&state&waiting send&/state&
&/content&
顾客能够看到自己的订单正处于等待送货状态,而不会有下一步的动作。恩,很好,框框网订单处理速度很快,而这正是网购的主要竞争力之一。
等等,如果订单审核不通过呢,继续看流程:
图 7& 增加一个网关
作为框框网的员工,我们GET:http:///order/1000,服务器判断出我们是框框网员工,返回以下的数据:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1000&/id&
&cost&88.0&/cost&
&state&waiting review&/state&
&xor rel=&review& media-type=&application/xml& url=&/review/order/1000&&
&choice&pass&/choice&
&choice&reject&/choice&
&/squence&
&/content&
注意到这两行:
&xor rel=&review& media-type=&application/xml& url=&/review/order/1000&&
&choice&pass&/choice&
&choice&reject&/choice&
&/squence&
系统告诉我们这是一个排他网关,我们需要作出选择,在客户端与服务器端就media-type达成一致的情况下(即客户端能够充分理解服务器端返回的数据格式,这个数据格式被标准化),我们的代码不需要作出任何的修改,pass和reject作为工作流变量被put到服务器,由工作流引擎进行处理,同样不会影响到订单的资源建模。
在这些交互中,最重要的是我们通过工作流实现了REST社区所呼吁的&将超媒体作为应用状态的引擎(hypermedia as the engine of application state)&。更简单地说,URI代表了状态机里的状态迁移。我们通过&squence&、&activity&和&xor&标签让客户端是通过跟随链接的方式来操作订单状态机的状态转移。
第三个需求,框框将物流部分外包
在我们实际的生活中,电商们并不自己送货,他们将这部分工作外包给了物流公司。从成本的角度考虑,外包送货是最合适的选择。实际上,整个订单从提交到最后的完成情况还要稍微复杂一些,如下图所示:
图 8& 订单从提交到完成的整个流程
从图中我们可以看出,这个流程跨越了两家公司,同时也涉及到了三个系统的集成,这三个系统分别是框框网的前台网站、框框网的后台负责仓储、进出货和物流的ERP系统以及外包物流公司的ERP系统。三个系统各自有自己的处理流程,整个订单的端到端处理流程由这三个系统的三个流程所共同完成:当我们在框框网提交订单时,一个消息被发送到框框的后台ERP系统,这个消息触发一个货物的出库流程,当货物打包完毕出库时,一个消息被发送到物流公司的ERP系统,同时触发物流公司的包裹配送流程,当我们给物流公司的配送员付款完毕时,对我们顾客来说框框的购物流程已经结束,然而整个流程依旧还要继续,配送员回到公司完款,一个消息被发送回框框的后台ERP,物流公司的包裹配送流程结束,框框网的这个订单这才处理完成。
在本文的一开始,我们提到了那个糟糕的退货故事,问题就在于当订单交由物流公司进行货物配送时,我们包括框框失去了对配送流程的可视化,物流公司的处理情况在我们的流程中黑盒了。如何解决这部分的问题呢,有两种处理方法:一是在框框网订单处理流程中加入捕获事件,正如图8中所示的,当框框后台ERP和物流公司ERP对订单进行处理时,每到一个任务节点就给框框网的订单处理流程发送消息,由此给我们标示出订单的实时状态。
图 9& 通过系统集成传递订单实时处理消息
现在,让我们来看看自己的订单会得到什么数据呢,GET /order/1000框框网前台网站返回数据:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1000&/id&
&cost&88.0&/cost&
&state&waiting send&/state&
&activity rel=&submit& time=& 14:00& participant=&ronghao&/&
&activity rel=&review& time=& 14:30& participant=&xinpeng&/&
&activity rel=&delivery package& time=& 15:00& participant=&haorong&/&
&activity rel=&warehouse& time=& 17:00& participant=&pengxin&/&
&/history&
&/content&
订单状态为等待物流公司送货,注意到这段数据:
&activity rel=&submit& time=& 14:00& participant=&ronghao&/&
&activity rel=&review& time=& 14:30& participant=&xinpeng&/&
&activity rel=&delivery package& time=& 15:00& participant=&haorong&/&
&activity rel=&warehouse& time=& 17:00& participant=&pengxin&/&
&/history&
工作流加入了订单处理的历史信息,从这段信息可以看出,我们要明天上午才能收到自己的货物了。
很不错不是吗,但是现实情况又是怎样呢。我们先来看看当当,当当如是说:订单状态变为&已发货&后,您可以登录&我的订单&,点击订单号进入订单详情页查看快递公司的联系方式,用订单号查询即可。我们再来看看卓越,卓越如是说:宅急送配送的订单:登录网站或拨打020-查询;港中能达配送的订单:登录网站或拨打020-查询。也就是说物流公司的配送流程状态并没有集成到网站中来,如下图所示:
图 10& 网站与物流公司系统没有集成
为什么没有集成呢?第一是物流公司的客户往往不止框框一家,第二是框框也不会把鸡蛋放在一家物流公司的篮子里,这些给系统集成带来了难度,我们会突然发现有大量的系统需要集成,而系统间的集成之间存在太多的集成点,调试以及约定,这些都需要大量的工作和成本,系统们被紧紧的耦合在一起。
既然第一种实现方式使得我们即时查看我们订单状态成本太大,那我们看看第二种方法:使用一个统一的流程管理系统来管理整个端到端的流程。
图 11& 使用统一的业务流程管理系统管理端到端流程
业务流程管理系统的职责有两个:一是由其管理起各个系统间的集成工作,这样避免了各个系统间的大量耦合;二是由其跟踪订单状态,完成订单在整个流程中的可视化。
图 12& 框框订单的端到端流程
我们来看看具体的api调用,当我们在框框网站提交一个ID为1000的订单时,框框网站会发送一个消息到http://api./process-definition/1,由此触发整个的流程,启动一个新的流程实例。发送的消息:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&id&1000&/id&
&cost&88.0&/cost&
&/content&
业务流程管理系统给我们返回的消息:
&process-instance&
&link rel=&process-instance& media-type=&application/xml& url=&http://api./process-instance/1&/&
&id&1&/id&
&order-id&1000&/order-id&
&order-cost&88.0&/order-cost&
&definition&
&link rel=&process-definition& media-type=&application/xml& url=&http://api./process-definition/1&/&
&/definition&
&current-activity&
&name&订单提交&/name&
&link rel=&activity-definition& media-type=&application/xml& url=&http://api./activity-definition/1&/&
&/current-activity&
&/content&
&/process-instance&
返回的消息中给我们指出了该订单所关联的流程实例ID,当前正在执行的任务。流程系统创建流程实例后接下来继续往下执行,它发送一个消息到框框的后台ERP系统,触发后台ERP系统对订单的处理,同时告诉其访问当前流程实例的URI。现在我们假设流程执行到物流公司的配送任务,我们在框框网站查看订单的即时状态系统会有哪些动作。第一步我们同样是GET:http:///order/1000,返回的数据:
&link rel=&detail& media-type=&application/xml& url=&/order/1000&/&
&link rel=&process-instance& media-type=&application/xml& url=&http://api./process-instance/1&/&
&id&1000&/id&
&cost&88.0&/cost&
&/content&
返回的消息中多了一个访问流程实例的URI,那么我们的客户端程序继续GET:http://api./process-instance/1,返回的数据:
&process-instance&
&link rel=&process-instance& media-type=&application/xml& url=&http://api./process-instance/1&/&
&id&1&/id&
&order-id&1000&/order-id&
&order-cost&88.0&/order-cost&
&definition&
&link rel=&process-definition& media-type=&application/xml& url=&http://api./process-definition/1&/&
&/definition&
&current-activity&
&name&物流配送&/name&
&type&sub-process&/type&
&link rel=&detail& media-type=&application/xml& url=&http://api./order/2000&/&
&link rel=&activity-definition& media-type=&application/xml& url=&http://api./activity-definition/3&/&
&/current-activity&
&activity name=&提交订单& type=&start& time=& 14:00& participant=&ronghao&/&
&activity name=&仓储出货& type=&sub-process& time=& 15:30&&
&link rel=&detail& media-type=&application/xml& url=&http://api./order/1000&/&
&/activity&
&/history&
&/content&
&/process-instance&
我们看到当前正在执行的任务是物流配送,这是一个子流程任务,想具体了解这个子流程执行的情况,我们的客户端程序继续GET:http://api./order/2000,啊哈,框框将配送任务外包给了宅急送啊。
&link rel=&detail& media-type=&application/xml& url=&http://api./order/2000&/&
&link rel=&process-instance& media-type=&application/xml& url=&http://api./process-instance/1&/&
&id&2000&/id&
&cost&88.0&/cost&
&current-activity&
&name&配送&/name&
&/current-activity&
&activity name=&接受包裹配送单& time=& 15:40& participant=&ronghao&/&
&activity name=&包裹入库& time=& 15:45& participant=&xinpeng&/&
&/history&
&/content&
好了,有了这三段数据,我们就可以清楚的看到订单所经过的各个环节以及当前的状态。从中可以看到两点:一是我们通过所提供的流程服务将各个系统进行了数据和流程的集成;二是各个被集成的系统需要实现rest的api以供我们的客户端程序进行数据的mashup。
故事完了吗?还没有,京东618活动简报:收获订单40多万份,订购金额超2亿,已经发货一个多亿,尚有十几万份订单积压,大约三日左右可以处理完毕。不足之处:流量多次超过4个G,服务器运行缓慢;图书备货量严重不足。与服务器相比,我更加关心如何及时将这几十万份订单处理完毕以及库存如何应对促销而产生的水平震荡(图书备货量严重不足,无法预测哪些书籍畅销哪些滞销,由此带来的订单迟迟无货),这显然不是一家物流公司可以完成的,需要多家物流公司一起消化这些订单,那么,问题来了,当我们mashup数据时,如何对这些物流公司返回的不同的数据格式进行处理?为每家公司实现一个适配器?NO!作为行业的老大,作为一家一流的企业,我们得制定标准。这时就需要标准化media type了,建立行业标准,企业级rest等于自定义、创造和标准化media type。
第二个问题,算是云服务否?是的,目前算作框框私有云,对自己和业务伙伴提供流程服务。
最后一个需求,框框要开放平台
最后一个需求有些跑题,但是那帮人现在都在搞什么开放平台,框框自然也是要跟风一下的。那么,开放平台都开放了个啥?
图 13& 框框的开放平台
第一是用户的开放,这个通过网站实现,我们增加上百货、品牌频道,吸引商家入驻,这些入驻的商家能够分享我们的网站用户,同时,品牌的用户也能够被吸引到我们的网站上。同时,开心、人人、新浪微博、腾讯微博的账号能够直接登录我们网站,同时,我们网站的产品、评价也能分享到这些SNS网站里。
第二是服务的开放,这个通过流程实现,我们能给商家提供仓储、物流、投诉等一系列的服务。不使用我们的网站,自己有网站?没关系,只要数据格式满足我们定义的media type就行。
图 14& 流程服务的开放
这算完了吗?不算!小马哥说,要开放就全面开放。我们将仓储环节和物流配送环节也开放出来,允许任何服务提供商使用我们的流程服务。
图 15& 物流环节的开放
只要系统提供数据格式满足我们定义的media type就可以加入到我们的流程中来,分享我们的客户,为上帝提供服务。我们则从中提成。
所以,真正的开放是整个流程服务各个环节的开放,不仅仅对流程消费者,也对流程服务提供商,我们在其中起一个协调的作用。由此,我们将服务开放出来变成一个公有云服务,后来,我们惊讶的发现,比更赚钱,因为它建立起了一个生态链。
在上面的故事里,我们一步步看到了框框的系统架构演进,不难看出,架构演进的过程实际上系统不断分解的过程。
对移动设备的支持,使得我们将页面渲染逻辑从服务器端剥离出来交由客户端完成,服务器只负责提供数据。通过rest的超媒体特性,客户端和服务器端程序能够各自独立演进。
对订单流程的支持,使得我们采用工作流技术,将资源模型(订单)与其生命周期模型分离,分别交由原有系统和工作流系统管理,这样当某部分需求发生变化(例如增加一个审核不通过步骤),能够隔离变化,容易修改。
对端到端跨系统流程的支持,使得我们引入一个独立的业务流程管理系统,由此来协调各个系统间的集成工作,避免系统间的大量耦合。同时,我们看到定义和标准化一个大家都能理解的media type是如此的重要。
对开放平台的支持,使得我们将业务流程管理系统开放出来,作为公有云服务平台,同时流程中的各个环节能够开放出来,作为服务/应用接入和接出的接口,真正做到松耦合,由此看到开放平台的实质是流程服务的开放。
在同事陈金洲的《架构腐化之谜》中,文章最后提到解决这一问题的方法是:创建应用程序的生态环境,而非单一的项目。深得我心,而我们这里想表达的是,随着系统的演进,我们需要不断进行系统的分解,做到服务的独立演化。
至于rest,它的作用就在于充分利用HTTP协议,将其作为一种应用协议,而不仅仅是传输协议,这样在WEB上做集成时能够最大程度上的达成一致,形成大家都能接受的约定,减少集成的工作量,对外接口一致,内部独立演化。
感谢对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家加入到中与我们的编辑和其他读者朋友交流。
Author Contacted
语言 & 开发
81 他的粉丝
架构 & 设计
261 他的粉丝
1 他的粉丝
Thoughtworks文集
2 他的粉丝
ThoughtWorks
0 他的粉丝
7 他的粉丝
1374 他的粉丝
0 他的粉丝
2 他的粉丝
277 他的粉丝
2 他的粉丝
1494 他的粉丝
0 他的粉丝
12 他的粉丝
24 他的粉丝
10 他的粉丝
0 他的粉丝
14 他的粉丝
0 他的粉丝
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
非常好,受教了,如果楼主能再写一篇怎么处理权限的问题就完美了。
非常帮,很受启发!
Re: 非常好,受教了,如果楼主能再写一篇怎么处理权限的问题就完美了。
系统集成SOA的都比较清晰
Re: 非常好,受教了,如果楼主能再写一篇怎么处理权限的问题就完美了。
非常好的一篇文章
还是漏出来两个“当当”
Re: 非常好,受教了,如果楼主能再写一篇怎么处理权限的问题就完美了。
有一个问题还望解答
Re: 有一个问题还望解答
写的真好,谢谢
允许的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万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。

我要回帖

更多关于 想不想修真 盖竹山 的文章

 

随机推荐