NServiceBus-架构的原则

自主性和松散耦合在设计时和运行时都是没有的事,任何技术都可以给你。

面向服务的架构(SOA)和事件驱动的体系结构提供了依据识别使用nservicebus。

战略领域驱动设计有助于弥合业务/IT鸿沟和驱动业务事件选择使用nservicebus发表。

nservicebus如何与SOA

在本文中,Udi Dahan解释经典的Web服务思想,在下面的用户界面层和业务逻辑的地方服务上的缺点。相反,他描述了一种方法,跨越应用程序的所有层,勾勒出松与紧耦合固有的线。最后,UDI说明这些垂直服务之间的协作,利用事件以带来灵活高效的业务流程。

深入细节

一个与分布式系统的建立现在的问题是他们是脆弱的。作为系统的一部分的速度慢了下来,效果往往会影响整个系统的瘫痪。nservicebus的主要设计目标是消除,指导开发人员编写,在生产环境中的健壮的代码。这可以防止数据丢失故障的情况下的鲁棒性。

使nservicebus有效使用,你需要了解分布式系统架构,它的目的是支持。换句话说,如果你设计你的系统,根据下面所列的原则,nservicebus会使你的生活更方便。另一方面,如果你不遵循这些原则,可能会让它更难nservicebus。

在nservicebus扩展功能让你调整自己的行为以满足您的特定需要,但他们是分开记录。

通信模式,使鲁棒性是单向的信息传递,也被称为“消防和忘记”。这是在更详细的讨论。

因为它可以跨网络和另一台机器沟通的时间是未知的,无限的,通信是基于存储转发模式,如下图所示。

存储和转发消息

在这个模型中,当客户端进程调用一个API将消息发送到服务器进程,该API将控制返回给调用线程发送消息前。在这一点上,整个网络的信息传递成为信息技术的责任。可能有各种各样的通信干扰,服务器可能会下降,或防火墙可能减缓转移。同时,尽管该消息可能已达到目标机,目标进程目前可能下降。

而这一切是怎么回事,客户端进程是不经意。像线程关键资源(和它的内存分配)不持有等待调用完成。这可以防止客户端进程失去稳定性由于具有多线程和所有内存用完后等待来自其它机器或过程的反应。

请求/响应和单向的信息传递

请求/响应的一般规律,这是更准确地描述为同步远程过程调用,是不同的处理一个消息时使用。而不是让调用线程的堆栈管理的通信交互的状态,它是明确的。从网络的角度来看,请求/响应就只不过是两个单向的相互作用,如下图所示。

这是特别重要的通信服务器背后有问题的网络连接客户现在对服务器的稳定性影响不大。如果客户端崩溃的时间,它发送请求到服务器发送一个响应,服务器没有资源捆绑起来等待几分钟直到连接超时。

当使用持久消息的演唱会,全系统的鲁棒性,更增加。

持久消息不同于常规的存储和转发消息,消息保存到本地磁盘后再发送。这意味着,如果在调用线程控制返回,进程崩溃和发送的消息不会丢失。在服务器到服务器的情况下,一个服务器可以完成本地事务但可能崩溃后,单向持久消息更容易产生不可靠甚至在面对积木全面强大的系统。

不同的沟通方式是一对多的通信。

发布/订阅

在这种方式下,消息的发送者往往不知道那些希望接收消息的细节。这种额外的松散耦合是在用户明确地选择接收消息的成本,如下图所示。

订阅

用户需要知道哪些端点负责某个消息。这些信息通常是由可作为合同的一部分,指定端点用户发送请求。为订阅消息的一部分,用户通过其 “返回地址”,终点在它想要接收的消息。

记住,出版商可以选择存储有关用户感兴趣的是,在一个高度可用的方式的信息。这允许多个进程在多台机器上发布消息给所有用户,不管收到订阅消息或不。

用户不需要订阅自己。通过对返回地址模式的使用,一个中央配置站可以发送多条短信的每一个出版商,指定哪些用户终端订阅的消息。

另一个选项,可用于使自己显示为一个单一的逻辑用户的多个物理用户。这使得有可能不在出版社或任何一个用户的部分的任何显式协调负载平衡的多个物理用户之间的消息处理。所有需要的是所有用户的订阅消息指定相同的返回地址。

出版业

发布一个消息包括消息到达终点以前订阅该消息类型。

已公布的经常代表事件或事物发生的信息;例如,取消订单,产品脱销,运输延迟。有时,一个事件的原因是前一个命令消息的处理,例如取消订单。出版商不需要发布一个消息处理命令消息虽然是最简单的解决方案的一部分。

由于许多命令消息可以在很短的时间内收到,发布消息的每一个命令消息的所有用户将输入的荷载,因此,是不是最佳的解决方案。较好的解决了出版商卷起所有的变化发生在一个给定的时间为一个单一的发布消息。适当的时期内依赖于发布服务器和数据的新鲜度其承诺的服务水平协议。例如,在金融领域的出版周期是10ms,而在消费者的电子商务业务,一分钟是可以接受的。

另一个优点是发布信息的一个计时器,活动可以卸载从终端/服务器处理命令消息,有效地扩大了更多的服务器。

分离指令

许多系统为用户提供搜索,过滤和排序数据的能力。而单向的信息传递和发布/订阅了这些功能的实现的核心部件,它们结合的方式是不是像一个普通的客户端-服务器的请求/响应。

在常规的客户服务器开发,服务器向客户端提供所有的CRUD(创建,读取,更新,删除)的能力。然而,当用户看到的数据不经常需要更新到第二(因为他们往往看同一屏幕几秒到几分钟)。因此,检索数据从同一个表中,用于高度一致的事务处理带来了竞争,导致较差的性能在高负载下的所有的CRUD操作。

一个解决方案,避免了这个问题,将命令和查询在系统级,甚至以上,客户端和服务器端。在这个解决方案中有两个“服务”,跨客户端和服务器:一个负责命令(创建,更新,删除),并负责查询其他(阅读)。这些服务只能通过消息进行通信;一个无法访问的其他数据库,如下图所示:

命令服务发布信息的变化数据,该查询服务订阅。当查询服务接收到这样的通知,它保存在其自己的数据存储,可能有不同的模式的数据(如星型模式的查询优化)。查询服务也将所有内存中的数据如果数据是足够小。

时间: 2024-08-05 20:08:16

NServiceBus-架构的原则的相关文章

企业组织架构设置原则及设置方法

企业组织架构设置原则及设置方法 --摘自<公司开了,你该这样管理>作者:张国祥 组织架构设置原则 组织架构设计必须把握五条原则:战略导向原则.简洁高效原则.负荷适当原则.责任均衡原则.企业价值最大化原则. 战略导向原则.战略决定组织架构,组织架构支撑企业战略落地.内贸企业不会设立外贸部,代工企业不会成立研发部,零售企业不会设立生产部.设置任何部门都必须成为企业某一战略的载体.反过来说明,如果企业某一战略没有承载部门,就会导致架构残缺.华东某企业在全国设立了十个分公司,经营规模也超过十亿元人民币

Java语言编程学习之Lambda表达式设计和架构的原则[图]

Java语言编程学习之Lambda表达式设计和架构的原则[图]:大家都知道,Lambda表达式是对Java语言的一点简单改进,在JDK标准类库中,运行它的方式各种各样.但是大多数的Java代码都不是由开发JDK的程序猿写的,而是像我们这样的普通程序猿.很多人都会碰到过这样的情况:你实现了一个新功能或修复了一个缺陷,并且对自己的修改很满意.但其他人看了你的代码后--也许发生在代码审查环节,完全不买账!对于什么是好代码,什么是坏代码,存在分歧很正常!设计模式的改变设计模式是人们熟悉的另一种设计思想,

Atitit 架构的原则attilax总结

1.1. Rule of three称为"三次原则",指的是当某个功能第三次出现时,才进行"抽象化".是DRY原则和YAGNI原则的折中1 1.2. 面向人类编程(可读性优先),优先于面向机器(性能)1 1.3. 归一化原则,一切都是文件,一切都是sprite1 1.4. 高层抽象原则,优先于具体实现,框架 类库优先于自己实现1 1.5. 移动小屏幕优先原则2 1.6. 点击触摸 优先于键盘 遥控操作2 1.7. 适当超前设计,超前抽象一层即可2 1.8. 超前架构

大数据架构设计原则

从功能模块可划分为: 数据标准(数据标准字典,数据流程规范); 数据模型(数据主题域,概念模型,主数据体系,模型选择); 数据管理体系(管理规范及流程,质量控制,元数据管理,调度管理,日志监控) 从业务需求,主要要求有: 灵活性,简易性,安全性,连续性,成本及时效. 数据架构原则: 数据对象统一: 数据,应用分离: 数据异构: 数据读写分离: 数据库成本及管理:

组织架构设置原则

组织架构设计必须把握五条原则:战略导向原则.简洁高效原则.负荷适当原则.责任均衡原则.企业价值最大化原则. 战略导向原则.战略决定组织架构,组织架构支撑企业战略落地.内贸企业不会设立外贸部,代工企业不会成立研发部,零售企业不会设立生产部.设置任何部门都必须成为企业某一战略的载体.反过来说明,如果企业某一战略没有承载部门,就会导致架构残缺.华东某企业在全国设立了十个分公司,经营规模也超过十亿元人民币,但由于企业没有成本核算部门,公司欠银行贷款一亿多元,老板连哪家亏损哪家赚钱都搞不清楚!前些年轰然倒

应用架构设计原则、模式摘录

1.Tier和Leyer的区别: Tier 指的是系统的物理部署结构 Leyer 指的是系统的逻辑层结构 2.基本设计原则概述 KISS原则 提倡在设计和编码中,尽量保持代码的简约性,避免不必要的复杂 DRY原则 抽取系统中的公共部分,并把它放到一个地方避免重复,既适用于代码也试用于功能和业务逻辑 Tell,Don’t Ask原则 要去对代码进行合理的封装,并把它放到正确的类中,并明确告诉对象我们想要它去执行什么样的操作,而不是首先询问对象的状态 YAGNI原则 设计中只包含所必须的功能,不包含

架构师必须了解的30条设计原则

前言 众所周知,架构师的角色,更偏向于策划.而非指挥,塑造.而非支配,其存在的意义,在于引导大家讨论.而非自己主宰一切. 但是,具体应该如何执行呢?本文作者整理了 30 个公认的架构原则,来帮助大家解决此问题.也许有的原则,你从未听说,但你看完就能快速学会. 基本原则 原则1 KISS (Keep it simple,sutpid) 和保持每件事情都尽可能的简单,用最简单的解决方案来解决问题. 原则2 YAGNI(你不需要它)原则 ,只在需要时构建. 原则3 先学会爬,然后再学会走,最后学会跑.

NServiceBus官方文档翻译(一)NServiceBus 概况

NServiceBus 概况 NServiceBus 被设计用来组合面向业务的服务,它并不是用来替代诸如 WCF 一类的RPC技术. NServiceBus 不只包含通信模块,像其他成熟的SOA和DDD项目一样,它使用了多种组合的方法和技术. 本篇文章探讨了 NServiceBus 和微软相关产品的相似点和不同点. 相比 BizTalk 更接近 WCF 当人们听到“服务总线”这个名词时,一般会描绘出如上图所示的画面,像 BizTalk 一样所有的通信都经过一个中央结点.这实际上描述的是一个代理的

从单体架构迁移到微服务,8个关键的思考、实践和经验

转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”.   随着微服务架构的持续火热,网络上针对微服务和单体架构的讨论也是越来越多.去年的时候,社区更多的关注点是在二者的区别以及优缺点辨析上,而今年,越来越多的人开始关注如何从单体架构迁移到微服务上.毋庸置疑,微服务的理念正在席卷整个开发者社区,像Netflix.Uber这样的公司都是非常成功的应用案例. 但需要注意的

【转载】千万级规模高性能、高并发的网络架构经验分享

在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重视它,战术上又要藐视它.先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右.对于一个后台服务器,单机的平均QPS可以到达800-1000,单独看写的业务量很简单 .为什么我们又不能说轻视它?第一,我们看它的数据存储,每天一百万的话,一年数据