BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Udi Dahan谈面向服务的合成

| 作者 Jan Stenberg 关注 29 他的粉丝 ,译者 赵震一 关注 0 他的粉丝 发布于 2014年8月13日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

在面向服务的架构(SOA)中,一个服务的多个客户端组件通常会运行在同一个进程中,同时会作为其它服务的组件。, Udi Dahan对在这一场景中,如何在客户端与服务器的通信方面,将多个逻辑上的服务调用收集起来,然后将其合并成一个较大的物理调用进行了描述。这种方式可以尽可能地避免高昂的通信开销,否则这将带来更大的成本和延迟。

Udi是面向服务架构方面的权威,同时也是NServiceBus的创建者。他对在客户端和服务器端同时使用松耦合组件时,如何对在客户端-服务器之间请求的往返开销作出优化进行了演示。在该演示中,Udi给出了一个例子,当客户端触发了某个事件时,比如一次按钮点击,将会导致两个客户端组件需要访问它们各自的服务器组件,从而获取到相应的数据。

通常的做法是让每个组件各自发起一个普通的Ajax请求,然后通过使用某个封装好的客户端代码库来为订阅事件注册一个回调函数,从而能在数据从服务器返回时触发该回调函数的调用。而Udi并没有选择这样做,他使用的代码库可以感知被处理事件的上下文,因此它可以在内存中暂存所有的请求,直到所有回调函数都注册完毕后,它会将所有的请求合并,从而只向服务器发起一个合并后的物理请求。

而在服务器端,一个与客户端相对应的代码库会将该物理请求分拆成一个个独立的请求,并为每个请求调用其相对应的服务器组件。当它汇集到所有服务器组件的处理结果后,该代码库又会将这些结果合并成一个结果返回给客户端。

接着,客户端代码库接收到响应结果,并将其拆分,然后将每个独立的结果分发给各自的客户端组件。而在此时,该事件就被完整地处理完了。

Udi强调了一点,为客户端和服务器端编写的大部分代码,对该封装的代码库而言是透明的。唯一增加的就是一个通用的进行打包和拆包的代码库,该代码库可以支持在那些由大量的小组件组成的客户端和服务器端之间发起逻辑调用,从而最小化某个物理客户端和某个物理服务器之间实际的请求调用。

查看英文原文:Udi Dahan on Service-Oriented Composition

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的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通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT