NServiceBus-架构的原则
自主性和松散耦合在设计时和运行时都是没有的事,任何技术都可以给你。
面向服务的架构(SOA)和事件驱动的体系结构提供了依据识别使用nservicebus。
战略领域驱动设计有助于弥合业务/IT鸿沟和驱动业务事件选择使用nservicebus发表。
nservicebus如何与SOA
在本文中,Udi Dahan解释经典的Web服务思想,在下面的用户界面层和业务逻辑的地方服务上的缺点。相反,他描述了一种方法,跨越应用程序的所有层,勾勒出松与紧耦合固有的线。最后,UDI说明这些垂直服务之间的协作,利用事件以带来灵活高效的业务流程。
深入细节
一个与分布式系统的建立现在的问题是他们是脆弱的。作为系统的一部分的速度慢了下来,效果往往会影响整个系统的瘫痪。nservicebus的主要设计目标是消除,指导开发人员编写,在生产环境中的健壮的代码。这可以防止数据丢失故障的情况下的鲁棒性。
使nservicebus有效使用,你需要了解分布式系统架构,它的目的是支持。换句话说,如果你设计你的系统,根据下面所列的原则,nservicebus会使你的生活更方便。另一方面,如果你不遵循这些原则,可能会让它更难nservicebus。
在nservicebus扩展功能让你调整自己的行为以满足您的特定需要,但他们是分开记录。
通信模式,使鲁棒性是单向的信息传递,也被称为“消防和忘记”。这是在更详细的讨论。
因为它可以跨网络和另一台机器沟通的时间是未知的,无限的,通信是基于存储转发模式,如下图所示。
存储和转发消息
在这个模型中,当客户端进程调用一个API将消息发送到服务器进程,该API将控制返回给调用线程发送消息前。在这一点上,整个网络的信息传递成为信息技术的责任。可能有各种各样的通信干扰,服务器可能会下降,或防火墙可能减缓转移。同时,尽管该消息可能已达到目标机,目标进程目前可能下降。
而这一切是怎么回事,客户端进程是不经意。像线程关键资源(和它的内存分配)不持有等待调用完成。这可以防止客户端进程失去稳定性由于具有多线程和所有内存用完后等待来自其它机器或过程的反应。
请求/响应和单向的信息传递
请求/响应的一般规律,这是更准确地描述为同步远程过程调用,是不同的处理一个消息时使用。而不是让调用线程的堆栈管理的通信交互的状态,它是明确的。从网络的角度来看,请求/响应就只不过是两个单向的相互作用,如下图所示。
这是特别重要的通信服务器背后有问题的网络连接客户现在对服务器的稳定性影响不大。如果客户端崩溃的时间,它发送请求到服务器发送一个响应,服务器没有资源捆绑起来等待几分钟直到连接超时。
当使用持久消息的演唱会,全系统的鲁棒性,更增加。
持久消息不同于常规的存储和转发消息,消息保存到本地磁盘后再发送。这意味着,如果在调用线程控制返回,进程崩溃和发送的消息不会丢失。在服务器到服务器的情况下,一个服务器可以完成本地事务但可能崩溃后,单向持久消息更容易产生不可靠甚至在面对积木全面强大的系统。
不同的沟通方式是一对多的通信。
发布/订阅
在这种方式下,消息的发送者往往不知道那些希望接收消息的细节。这种额外的松散耦合是在用户明确地选择接收消息的成本,如下图所示。
订阅
用户需要知道哪些端点负责某个消息。这些信息通常是由可作为合同的一部分,指定端点用户发送请求。为订阅消息的一部分,用户通过其 “返回地址”,终点在它想要接收的消息。
记住,出版商可以选择存储有关用户感兴趣的是,在一个高度可用的方式的信息。这允许多个进程在多台机器上发布消息给所有用户,不管收到订阅消息或不。
用户不需要订阅自己。通过对返回地址模式的使用,一个中央配置站可以发送多条短信的每一个出版商,指定哪些用户终端订阅的消息。
另一个选项,可用于使自己显示为一个单一的逻辑用户的多个物理用户。这使得有可能不在出版社或任何一个用户的部分的任何显式协调负载平衡的多个物理用户之间的消息处理。所有需要的是所有用户的订阅消息指定相同的返回地址。
出版业
发布一个消息包括消息到达终点以前订阅该消息类型。
已公布的经常代表事件或事物发生的信息;例如,取消订单,产品脱销,运输延迟。有时,一个事件的原因是前一个命令消息的处理,例如取消订单。出版商不需要发布一个消息处理命令消息虽然是最简单的解决方案的一部分。
由于许多命令消息可以在很短的时间内收到,发布消息的每一个命令消息的所有用户将输入的荷载,因此,是不是最佳的解决方案。较好的解决了出版商卷起所有的变化发生在一个给定的时间为一个单一的发布消息。适当的时期内依赖于发布服务器和数据的新鲜度其承诺的服务水平协议。例如,在金融领域的出版周期是10ms,而在消费者的电子商务业务,一分钟是可以接受的。
另一个优点是发布信息的一个计时器,活动可以卸载从终端/服务器处理命令消息,有效地扩大了更多的服务器。
分离指令
许多系统为用户提供搜索,过滤和排序数据的能力。而单向的信息传递和发布/订阅了这些功能的实现的核心部件,它们结合的方式是不是像一个普通的客户端-服务器的请求/响应。
在常规的客户服务器开发,服务器向客户端提供所有的CRUD(创建,读取,更新,删除)的能力。然而,当用户看到的数据不经常需要更新到第二(因为他们往往看同一屏幕几秒到几分钟)。因此,检索数据从同一个表中,用于高度一致的事务处理带来了竞争,导致较差的性能在高负载下的所有的CRUD操作。
一个解决方案,避免了这个问题,将命令和查询在系统级,甚至以上,客户端和服务器端。在这个解决方案中有两个“服务”,跨客户端和服务器:一个负责命令(创建,更新,删除),并负责查询其他(阅读)。这些服务只能通过消息进行通信;一个无法访问的其他数据库,如下图所示:
命令服务发布信息的变化数据,该查询服务订阅。当查询服务接收到这样的通知,它保存在其自己的数据存储,可能有不同的模式的数据(如星型模式的查询优化)。查询服务也将所有内存中的数据如果数据是足够小。
NServiceBus-架构的原则的更多相关文章
- Atitit 架构的原则attilax总结
Atitit 架构的原则attilax总结 1.1. Rule of three称为"三次原则",指的是当某个功能第三次出现时,才进行"抽象化".是DRY原则和 ...
- 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则
转载:http://space.itpub.net/17007506/viewspace-616852 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室( ...
- SOLID架构设计原则
最近通读了<架构整洁之道>,受益匪浅,遂摘选出设计原则部分,与大家分享,希望大家能从中获益. 以下为书中第3部分 设计原则的原文. 设计原则概述 通常来说,要想构建-个好的软件系统,应该从 ...
- 老猿学5G扫盲贴:R15/R16中计费架构和计费原则涉及的规范文档
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 在R16的32.240文档对应规范为3G ...
- NServiceBus 概况
NServiceBus 概况 NServiceBus 概况 NServiceBus 被设计用来组合面向业务的服务,它并不是用来替代诸如 WCF 一类的RPC技术. NServiceBus 不只包含通信 ...
- NServiceBus官方文档翻译(一)NServiceBus 概况
NServiceBus 概况 NServiceBus 被设计用来组合面向业务的服务,它并不是用来替代诸如 WCF 一类的RPC技术. NServiceBus 不只包含通信模块,像其他成熟的SOA和DD ...
- 聚光灯下的熊猫TV技术架构演进
2015年开始的百播大战,熊猫TV是其中比较特别的一员. 说熊猫TV是含着金钥匙出生的公子哥不为过.还未上线,就频频曝光,科技号,微博稿,站上风口浪尖.内测期间更是有不少淘宝店高价倒卖邀请码,光内测时 ...
- CQRS\ES架构介绍
大家好,我叫汤雪华.我平时工作使用Java,业余时间喜欢用C#做点开源项目,如ENode, EQueue.我个人对DDD领域驱动设计.CQRS架构.事件溯源(Event Sourcing,简称ES). ...
- Atitit.研发管理---TOGAF架构跟 (ADM开发方法)总结
Atitit.研发管理---TOGAF架构跟 (ADM开发方法)总结 1. TOGAF是在过去二十年间出现的企业架构框架 1 2. TOGAF内容结构 1 3. TOGAF 实现过程 2 4. 参考 ...
- 从100PV到1亿级PV网站架构演变
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不 ...
随机推荐
- 利用SOLR搭建企业搜索平台 之——运行solr
来源:http://blog.csdn.net/zx13525079024/article/details/24806131 本节主要介绍Solr的安装,其实Solr不需要安装.直接下载就可以了 ...
- [JWFD开源工作流]JWFD开源工作流官方下载内容更新
在更新版的JWFD二次开发包中,我正在实现单线程的时钟控制器,动了下引擎的源代码,这个更新包主要是升级界面,内核代码,大家就不用升级了.. 代码提示: 请修改代码包中(org.jwfd.workflo ...
- IO(二)
package com.bjsxt.io.buffered; import java.io.BufferedInputStream; import java.io.BufferedOutputStre ...
- 用Eclipse+ADT创建可运行项目,创建lib项目,引用一个lib项目
Managing Projects from Eclipse with ADT In this document Creating an Android Project 创建可运行项目 Settin ...
- 巧用ifstream判断文件是否存在
最近在写手写数字的识别软件,训练样例数量巨大而且数字个数不唯一,有可能在中途粘出一部分做测试样例.因此写下面的脚本来获取文件名,之后丢到训练函数里. #include <algorithm> ...
- gridview 单击行时如何让SelectedIndexChanging事件响应
在gridview控件上单击行的时候,是不触发SelectedIndexChanging事件的,那么想要单击时触发SelectedIndexChanging事件时怎么做呢? 我是这样做的: 在grid ...
- HibernateTools实现pojo类 数据库schma mapping映射的相互转换
核心 利用HibernateTools,从POJO类,Mapping映射文件,数据库表有其中的一项,就能生成其他两项. 概述 在使用Hibernate开发系统持久层时,按照一般开发流程 1.分析业务 ...
- SQL查询时间去除非工作日...
CREATE FUNCTION [f_WorkDayADD]( @date datetime, --基础日期 @workday int --要增加的工作日数 )RETURNS datetime AS ...
- SPOJ ARCTAN (数论) Use of Function Arctan
详细的题解见这里. 图片转自上面的博客 假设我们已经推导出来x在处取得最小值,并且注意到这个点是位于两个整点之间的,所以从这两个整数往左右两边枚举b就能找到b+c的最小值. 其实只用往一边枚举就够了, ...
- c#Winform程序,让pictureBox显示图像(包含GIF),并且不被占用,能即时删除图片。
最近在做一个图片浏览的工具, 需要在PictureBox中显示图像文件, 包括gif播放. 且不能被程序独占, 就算winform的程序正在显示这张图, 也能在资源管理器里delete它. 看了看网 ...