欢迎来到现实世界
来源:互联网 发布:成年弱视知乎 编辑:程序博客网 时间:2024/04/30 15:04
作者:格雷戈尔侯珀(Gregor Hohpe)
工程师偏爱精确,整天与1和0打交道的软件工程师更是如此。我们习惯了非即此彼的世界,凡事不是1就是0,不是真就是假,不是是就是否。在外键约束、原子事务和校验和的保证下,一切都是清楚的、确定的。
可惜现在世界不是二进制的。顾客有可能撤消确认过的订单,支票可能跳票,信件可能丢失,付款时间可能延迟,许下承诺还可能失信,数据记录时不时就会出错。用户偏爱提供更多功能的“压缩”(shallow)界,他们讨厌繁琐的、一步接一步的交互步骤。对程序员来说,这种一维的过程看起来更符合逻辑,也更容易实现。可是别忘了,真正决定程序流程的不是调用堆栈(call stack),而是用户需求。
这些己经够糟了,可分布式系统又带来了新的不一致。服务有可能失效,状态可能在毫无征兆的情况下改变,事务处理可能得不到保证。应用程序运行在成千上万机器上,出错是不可避免的,只是迟与早的问题。分布式系统不但是松耦合、异步、并发的,而且不遵守传统的事务语义(transaction semantics),这些都是程序员的噩梦。
计算机科学家设想的完美世界正在崩溃,我们该怎么办?克服所有因难的步骤都一样,首先要接受现实。向令人怀念的调用堆栈架构告别吧,忘掉那些程序员决定程序流程的日子,准备好应付随时出现的乱序事件,不断根据具体情境调整策略。用异步的、并发的请求代替一个接一个的方法调用。设计应用时,借助事件驱动的过程链(event-driven process chain)模型或状态模型控制无序的状况,通过调整、重发,甚至试探的办法纠正错误。
你也许不曾料到事情这么复杂吧。还好,类似的问题也一直在现实生活中上演:信件延迟、承诺后毁约、通信相互干扰、收款账户混淆——这样的例子举不胜举。我们的对策是重发信件、撤销定单、通知付款人钱己到账,不必再理催款单,等等。所以别在抱怨现实世界带来了麻烦,不妨从中寻找解决问题的灵感。比如向星巴克学习,看看他们是怎么改良两阶段提交(two-phase commit)模式的。欢迎来到现实世界。
- 欢迎来到现实世界
- 46 欢迎来到现实世界
- 欢迎来到java世界
- 欢迎来到JavaScript世界
- 第一章 欢迎来到Python世界
- 欢迎来到C++的世界
- First-欢迎来到IOS世界
- 第一章 欢迎来到Python世界!
- 第一章 欢迎来到Python世界
- 欢迎来到HelloWorld的世界
- 欢迎来到 Corda 的世界!
- 1.1欢迎来到汇编语言的世界
- CH 2 欢迎来到代码世界
- Ruby之欢迎来到Ruby的世界
- Swift2学习:欢迎来到Swift世界
- SQL学习 欢迎来到SQL世界
- 第一章:欢迎来到python 的世界
- 欢迎来到git的世界(一)
- C++异常处理
- 解决Java中OutOfMemoryError的三种方法
- leetCode 28 Implement strStr()
- Servlet技术中的对象--Request与Response
- spark1.4安装
- 欢迎来到现实世界
- How many integers can you find(容斥+dfs)
- JSTL点滴汇总_2015
- [leetcode] 90.Subsets II
- 利用串口建立控制台
- C语言结构体的字节对齐
- GridView,AutoCompleteTextView,Spinner,Gallery,
- Javascript生成Guid
- POJ 2762 强连通分量 Kosaraju + 缩点