领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Jean-Jacques Dubray 译者 郭晓刚 发布于 2007年7月23日
WS-TX,自2001年以来第三次尝试建立Web Service事务标准,在五月份获得批准成为了OASIS的正式标准。上周Evan H. 在MSDN分布式事务及服务论坛上提出的问题引发了一场争论:
分布式事务(即WS-Transaction)是否违背了面向服务架构的“自治”信条?
事务的目的是让两个或更多软件代理在合作完成一个工作单元的时候能够保持状态的一致,而无论该工作单元的执行结果是失败(由于业务或技术错误)还是成功。
事务标准通常由三个部分组成:
按照WS-TX的设计,上下文管理设施和协调设施担负着事务协调者的责任,另外WS-TX指定了两个事务协议:WS-AtomicTransaction(WS-AT)和WS-BusinessActivity(WS-BA)。
“[OASIS]技术委员会认识到不存在一个能够适应所有情况的事务模型,因此 WS-Transaction定义了一个可扩展的协调框架,既能够适应经典的两段式提交,也能够适应一些限制更宽松的事务,它们的隔离(isolation)行为做了调整,较适宜松耦合系统。”WS-TX工作组的联席主席 Ian Robinson说。
Choreology提供的《事务协议的分类》值得一读。按照其中的分类法,WS-AT属于“暂时先做再等确认(provisional-confirm)”类,而WS-BA属于“先实行再补偿(do-compensate)”类。请注意我认为WS-AT不满足ACID,因为WS-AT放宽了对隔离性的要求。WS-TX的目标就是让用户可在“暂时”与“彻底”之间选择需要的行为。
因此服务可在满足自治性的同时又能实现事务协议来协调该服务参与的工作单元。这是否会妨害可伸缩性呢?答案是肯定的,因为状态一致性是以在事务参与者和协调者之间交换额外的消息来达成的。
在MSDN论坛上的辩论集中在两个观点上: IDesign.net的首席架构师 Juval Löwy提出,在执行一个普通的工作单元时,如果牵涉到若干个软件代理,那么没有状态一致性我们就没法完成提交,而且为了达成状态一致性而重新发明特别的事务协议不一定是个好主意。他的观点是如果可行,采用原子性事务会比较好,因为它比较简单(请注意WS-BA为了达成事后补偿需要由协调者来管理一些特殊逻辑)。然而,如果你无法在工作单元的执行期间维持一个暂时状态(provisional state),那么你不得不采用其他协议,比如像WS-BA这样的“do-compensate”协议。必须权衡的是只有在你能够“容忍误差”的情况下这个协议才可行。
另一方面,Roger Sessions、Ollie Richies、Ahmed Nagy和Arnon Rotem-Gal-Oz争辩说:
“跨服务的事务是糟糕的想法”……“你真的希望让事务在地理上相距甚远的多个服务、多个信任授权、以及异质的执行环境之间往返穿梭?我知道我不会这样做。”
他们都针对使用数据库锁来实现WS-AT提出了警告。Arnon提议我们应该用两个不同的名字来区分数据库级别的事务和所谓“长期运行的事务”。这种交互活动通常称为“Sagas”。
刚刚回到微软的Pat Helland(虽然他没有参与论坛里的讨论),在对比数据库事务和SOA事务的时候,作了一些澄清。
在数据库内部,当前事务提供了清晰干脆的“此刻”的含义,对数据意义的解释即着落在“此刻”。当你身处在事务中间,除非发起这次事务的当前正运行的应用程序改变了数据,否则一切都会维持原样。
在SOA中,我们都承认存在独立的机器。[即“自治”]
当系统A向系统B发送一条消息,消息中包含的数据会在发送前被解锁。这就意味着这个数据成了历史遗迹。系统B只能看到来自系统A的数据过去的样子。这就是这些不共享事务的独立系统的一个本质方面。
除了隔离性,Pat还认为在处理分布式事务的时候,强制一致性约束可能并不是最有效的办法:
我看到业界越来越愿意放宽一致性的要求,甚至超过我前面提到的程度。他们宁愿偶尔得到错误的数据,因为这样更划算。
许多公司声称他们从没用到事务协议和事务协调者来达成状态的一致性,但实际上他们用了,只不过不是符合XA的两段式提交事务协议。他们的系统通常会记录被调用的操作,以及操作的结果。在晚一点的时候,代理会执行清理工作,任何失败的操作都会被回滚。在这种情况下,由于不必在工作单元的执行期间增加与事务协议相关的额外通讯,因此可伸缩性获得了提高。“事务协议”实际上是离线进行的。我的一位朋友曾为一家大计算机制造商工作,他告诉我说当协调代理不能回复到满意的状态时,他们打算“贿赂用户“,让用户成为他们的事务协议的一部分,幸好,他们还没有遇到过这种状况!
总而言之,似乎在这场争论中每个人都是对的。WS-AT和WS-BA对SOA来说都是有效的事务协议。两者都不会破坏参与者的自治性。不过在使用WS-AT的时候,试得到完整的ACID性质是不明智的(WS-AT对此并不要求)。隔离性,即让一个操作调用不受到属于另一个工作单元的其他操作调用的影响,通常是非常昂贵的,而且是绝大多数伸缩性问题的来源。在数据库中,隔离性的实现一般是通过将处理收到的请求的过程进行某种形式的串行化,在SOA的世界里,这几乎总是不可接受的。Pat建议我们甚至应该更进一步放宽对一致性的要求,这也是一个正确的方向,因为当参与者是被动态地组织到任意工作单元的时候,要想强制实施业务规则也许是行不通的。这里强调了事务参与者的自治观念。不过状态一致性是SOA的基本,无论你打算如何实现它,你都需要把上下文管理设施、协调者以及操作调用协议(即事务协议)聚集到一起。
译者 郭晓刚 是InfoQ中文站架构社区编辑,创建并终结过数家软件小企业,翻译过多本技术书籍。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
没有回复
关注此讨论 回复