设为主页 | | 关于我们 | 会员专区
欢迎访问我们的网站!
| | | | |
当前位置: 主页 > 香港最快开奖网站 >

事件驱动架构EDA的优缺点分析

时间:2019-10-06 10:48来源:未知 作者:admin 点击:
每周推荐一项学习内容,彩经网走势图 。 国家知识产权局知识产权发展研究中心主任韩秀成到会祝贺并致辞。 ,通过事件进行应用程序的设计是自20世纪80年代后期以来的一种实践。我们可以在前端或后端的任何地方使用事件。当按下按钮时,某些数据发生更改或执行

  每周推荐一项学习内容,彩经网走势图国家知识产权局知识产权发展研究中心主任韩秀成到会祝贺并致辞。,通过事件进行应用程序的设计是自20世纪80年代后期以来的一种实践。我们可以在前端或后端的任何地方使用事件。当按下按钮时,某些数据发生更改或执行某个后端动作。

  当类或组件之间内聚性很高,它们的耦合度应该很低,也就是说当组件需要相互协作调用时,比如我们假设一个组件“A”需要触发组件“B”中的一些逻辑,自然的方式是直接让组件A调用组件B中的一个方法。但前提是A必须知道B的存在,这样它们之间就是耦合的,A必须依赖于B了,这会使得系统更难以改变和维护。因此,这里可以使用事件来防止这种直接调用的耦合。

  此外,使用事件实现组件解耦也有其另外的,如果我们有一个只负责组件B的工作团队,那么他们则可能不需要与负责组件A的团队进行交流,直接针对组件A中的逻辑改变在组件B中做出相对反应。两个组件团队可以独立发展(banq注:微服务特点之一), 我们的应用系统变得更灵活。

  即使在同一个组件团队中,有时候我们不需要在同一请求/响应中立即执行一个动作的结果,只要异步执行这个动作,比如发送电子邮件。在这种情况下,我们可以立即向用户返回响应,并以异步方式发送电子邮件,并避免让用户等待发送电子邮件。

  不过,如果我们不加区别地使用它,也有危险。我们会遇到逻辑流程的风险,这些逻辑流程在概念上是高度凝聚力的,但是通过采取脱钩机制的事件连接在一起。换句话说,应该在一起的代码将被分开,并且难以跟踪它的流程(类似于goto语句),不易于理解:可能是意大利面一样混在一起!

  为了防止将我们的代码库变成一大堆意大利面条,我们应该将事件的使用限制在明确的情况下。根据我的经验,有三种使用事件的情况:

  当组件A执行的逻辑需要触发组件B的逻辑时,不要直接调用它,我们可以将触发事件发送到事件分派器。组件B将侦听调度程序中的特定事件,并在事件发生时执行操作。

  这意味着A和B都将取决于调度器和事件,但他们之间将不会知道对方存在,它们将被解耦。

  (1)调度员应该是完全独立于我们应用程序的库,因此使用依赖管理系统安装在通用位置。在PHP世界中,这是使用Composer等安装在vendor文件夹中的东西。

  (2) 事件是我们的应用程序的一部分,应该在两个组件之间生存,组件之间通过事件进行通讯(结构上解耦,行为上耦合)。事件在组件之间共享,它是应用程序的核心部分。事件在DDD中属于共享内核Shared Kernel的一部分。这样,两个组件都将依赖于共享内核,但彼此不会意识到。然而在单体Monolithic应用程序中,为方便起见,可以将其放在触发事件的组件中。

  [。..]明确界定指定团队同意分享的领域模型的一些子集。保持这个内核很小。[。..]这个明确共享的东西有特殊的地位,如果没有与其他团队协商,不应该改变。

  有时候我们有一个我们想要执行的逻辑,但它可能需要相当长的时间来执行,我们不想让用户等待它完成。在这种情况下,希望将其作为异步工作运行,并立即返回给用户的消息,通知他请求将在以后异步执行。

  例如,在网上商店下订单可以同步完成,但发送通知用户的电子邮件可以进行异步。

  在这种情况下,我们可以做的是触发一个将被排队的事件,直到一个工作任务可以获得这个事件并执行它,只要系统有资源。

  在这些情况下,相关联的逻辑是否在相同的有界环境中并不重要,无论哪种方式,逻辑都是去耦的。

  以传统的数据存储方式,我们拥有一些数据的实体。当这些实体中的数据发生变化时,我们只需更新数据库表行以反映新值。

  假设我们有一个具有明确定义的组件作为应用程序核心。理想情况下,这些组件是完全相互分离的,但是它们的一些功能需要在其他组件中执行一些逻辑。

  最典型的情况如前所述:当组件A执行的逻辑需要触发组件B的逻辑时,A不是直接去调用B,而是触发事件将且发送到事件调度程序。组件B将侦听调度程序中的特定事件,并在事件发生时执行操作。

  重要的是,这种模式的一个特征是事件携带最少的数据。它只为听众提供足够的数据,以便知道发生了什么并执行其代码,通常只是实体ID,也可能是事件创建的日期和时间。

  (1)弹性更大:将事件排队后,发送方组件可以继续执行其自己逻辑,即使由于错误发生,因为它们排队等候,它们可以在错误被修复时被执行。

  团队可以独立发展组件,使他们的工作更轻松,更快,更容易出现问题,更灵活;

  让我们再次看看前面例子,一个具有明确定义的组件作为应用程序核心。如果A组件一些功能需要来自其他组件的数据。获得该数据的最自然的方法是询问其他组件,但这意味着被查询组件必须提供查询方法以供查询组件使用,一次两次修改增加无所谓,如果频繁要求被查询组件提供新的查询方法,说明这两个组件彼此耦合!

  在组件之间共享数据的另一种方法是:拥有数据的组件触发的更改事件时,该事件将携带全新更改后的数据。对该数据感兴趣的组件将会监听这些事件,从事件中获得数据并存储该数据的本地副本,然后进一步对这些全新数据做出反应。这样,当他们需要外部数据时,他们其实在本地已经拥有它们,它们将不需要查询其他组件,也不需要其他组件提供对应的查询方法。

  (1)更大的弹性,查询组件不依赖被查询组件,如果被查询组件变得不可用(因为有一个错误或远程服务器是不可达到的),查询组件自身能正常工作,因为拥有了被查询组件中主数据的本地数据;

  (3)我们不必担心被查询组件上的负载了,不用担心它是否满足来自所有其他查询组件的查询(特别是如果它是远程组件);

  (1)将有几个相同数据的副本,虽然它们是只读副本,数据存储在当下已经不是问题;

  (2)更高的查询组件的复杂性,因为它将需要逻辑来维护外部数据的本地副本,尽管这是非常标准的逻辑。主从一致性。

  如果两个组件在同一个进程中(同一个VM中、同一个主机内)执行,这种模式也许没有必要,但即使这样,它也可能很有趣,可以将其用于解耦和可维护性,或作为将这些组件分离到不同的微服务中工作做准备,也许在未来的某个时候我们能平滑升级到微服务。这一切都取决于我们目前的需求,未来的需求。

  我们假设一个实体处于一种初始状态。作为一个实体,它有自己的身份,代表在现实世界中一个特定的事情,应用程序将其建模为实体。在其生命周期中,实体数据会发生变化,并且传统上实体的当前状态被简单地作为表的一行记录存储在数据库中。

  这在大多数情况下都是可以的,但如果我们需要知道实体是如何达到当前这个状态,即我们想知道我们的银行账户的贷方和借记发生的每笔金额,才能知道当前账户的余额来历,这在传统只保存当前状态的方式下是不可能实现的,因为我们只存储当前状态!每次都是新的余额状态覆盖了之前的状态,比如当前余额是10,覆盖了之前余额90,至于账户余额怎么剩余10元呢?如果数据库不保存往来明细,你可能认为银行系统出问题了。

  存储实体发生的事件,而不是存储EnTIty状态,我们专注于存储实体状态更改并从这些更改中计算实体状态。每个状态变化是一个事件,存储在事件流中(即RDBMS中的一个表)。当我们需要实体的当前状态时,我们从事件流中的所有事件中计算出它。

  事件存储成为真相的主要来源,系统状态纯粹源于它。对于程序员来说,最好的例子是版本控制系统。所有提交的日志是事件存储,源树的工作副本是系统状态。---2010年Greg Young, CQRS文件

  如果我们发现一个状态改变(事件)是一个错误,我们不能简单地删除该事件,因为这会改变状态更改历史记录,这将违反整个事情溯源的想法。相反,我们在事件流中创建一个事件,以反转我们要删除的事件。这个过程称为反转事务,不仅使实体返回到所需的状态,而且留下了一个跟踪,显示对象在给定时间点处于该状态。

  不删除数据也具有架构优势。存储系统成为只添加一个体系结构,众所周知,仅附加体系结构比更新架构更容易分发,因为要处理的锁少得多。---2010年Greg Young, CQRS文件

  但是,当事件流中有许多事件时,计算实体状态将是非常昂贵的,因此为了避免出现这种情况。每X个事件我们将在该时刻创建一个实体状态的快照。这样,当我们需要实体状态时,我们只需要计算它到最后一个快照。我们甚至可以永久保存更新实体的快照,这样我们平衡了两种世界(只保存状态和只保存事件)。

  在事件采集中,我们也有一个投影的概念,即事件流中的事件的计算,从特定时刻开始。这意味着快照或实体的当前状态符合预测的定义。但是在预测概念中最有价值的想法是,我们可以在特定时期分析实体的“行为”,这使我们能够对未来作出有根据的猜测(即如果在过去的5年中,实体有8月份的活动增加,明年8月份可能会发生同样的事情),这对业务来说可能是非常有价值的。

  2.我们还可以使用事件日志重建过去的状态,对于业务和开发来说都是有用的;

  当我们的事件在外部系统中触发更新时,但是我们又在重播事件以便创建投影,因此我们不想重新触发这些事件。在这一点上,当我们处于“重播模式”时,我们可以简单地禁用外部更新,也可以将该逻辑封装在网关中。

  另一个解决方案取决于实际问题,可能是将外部系统更新放入缓冲,在一段时间后执行,保证事件不会被重播时再进行。

  当我们的事件使用对外部系统的查询,如获得股票评级,当我们重播事件以创建投影时会发生什么?我们可能希望获得与事件在第一次运行时所使用的相同的等级,也许是在几年前。因此,远程应用程序可以给我们这些值,或者我们需要将它们存储在系统中,所以我们可以通过在网关中封装该逻辑来模拟远程查询。

  MarTIn Fowler发现3种类型的代码更改:新功能,错误修复和时间逻辑。当在不同的时间点播放应该使用不同业务逻辑规则的事件时,真正的问题就出现。去年的税收计算与今年不同。像往常一样,条件逻辑可以使用,但它会变得凌乱,所以建议使用策略模式。

  1.保持事态愚蠢,只关心状态的变化,而不是如何被改变的。这样我们可以安全地重播任何事件,并期望结果是一样的,即使业务规则同时发生变化(尽管我们需要保留旧的业务规则,以便我们可以在重播过去的事件时应用它们);

  2.与外部系统的交互不应该依赖于这些事件,这样我们可以安全地重播事件,而不会重新触发外部逻辑,我们不需要确保来自外部系统的回复与最初的事件相同。

  当然,像其他任何模式一样,我们不需要在任何地方使用它,我们应该使用它在哪里是有意义的,它给我们带来了一个优势,并解决了比创建更多的问题。

  事件可以平衡代码的可维护性、性能和扩展性,事件溯源也是系统数据可提供的可靠性和信息。

  然而,这是一条存在自身危险的道路,因为概念和技术的复杂性都会增加,而且任何一种的滥用都会产生灾难性的后果。

  更多干货,视频关注微信公众号:EDA设计智汇馆 电子发烧友-EDA群:499741665注:评论到一定数量

  EDA(Electronic DesignAutomation)又名电子设计自动化,其基本特征是:以超大规模可编程逻辑器件,...

  EDA的概念范畴很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应...

  自从20世纪90年代在电路板设计中广泛采用CAD以来,制造领域通过自动化和工艺优化手段一直在不断地提....

  IP软核通常是用HDL文本形式提交给用户,它经过RTL级设计优化和功能验证,但其中不含有任何具体的物....

  CO-DESIGNS的EDA供应商指导IC-PACKAGE设计师进行有效的工作

  This Article describes CO-DESIGNS’ EDA vendors guidelines for IC and PACKAGE designers...

  IC设计离不开EDA工具的支持,模拟设计也不例外。在9月20日举行的2019年中国模拟半导体大会上,....

  电路设计软件?电路仿真软件?那么问题来了,protel是电路设计软件,还是电路仿...

  请问现在的Autium designer原理图设计中可以预先设计线的粗细规格吗?

  比如,不需要在PCB界面里去做这个PCB铜箔的宽度设置,直接在这个SCH原理图界面上就已经规定好了,在PCB中...

  原因很简单:大部分系统设计——据最近的一项研究,55%的设计并不是新设计。它们实际上是对某类现有设计....

  物联网、人工智能、大数据等新兴技术的推动,集成电路技术和计算机技术得到蓬勃发展。

  DFT 可以降低通过问题器件的风险,如果最终在实际应用中才发现器件有缺陷,所产生的成本将远远高于在制....

  制作的第一步是建立出零件间联机的布线。我们采用负片转印方式将工作底片表现在金属导体上。这项技巧是将整....

  射频电路(RF circuit)的许多特殊特性,很难用简短的几句话来说明,也无法使用传统的模拟仿真软件来分析,譬如SPI...

  另一个搜集海量数据的机会是在foundry。“最理想的情况是你从工艺制造流程中搜集到匿名大数据,并借....

  This Article describes the process for developing and implementing an effective power amplifier linearizatio...

  在一些电磁环境比较恶劣的情况下,一些大规模集成电路常常会受到干扰,导致不能正常工作。特别是像RAM这种利用双稳...

  对于大规模系统而言,EM的3D仿真首要解决的挑战是保证模型运算结果的精确度,此外还有仿真成本效益以及....

  在过去的几十年里,许多名字都知道了#151;共同设计,电子系统设计自动化(ESDA)和现在的电子系统....

  我很高兴看到Joe Costello在最近的EDAC晚宴上获得了Kaufman奖。参加EDAC晚宴可....

  作为全国集成电路产业重镇,深圳市IC产业结构特点非常明显——设计业为主。钟海表示,2018年深圳IC....

  虽然现在的EDA工具非常强大,但随着PCB尺寸要求越来越小,器件密度越来越高,PCB设计的难度并不小....

  这是中国 IC 设计业覆盖技术领域最全面、规模最大的先进技术交流平台,其规模和参与度再次刷新行业记录....

  加州CUPERTINO - 一家有16个月历史的创业公司,名为InTime Software Inc....

  PCB设计工程师:设计人员必须具备广泛的PCB周边知识,诸如电子线路的基本知识,PCB的生产、贴片加....

  半导体IP授权属于半导体设计的上游。IP主要分为软IP、固IP和硬IP。软IP是用Verilog/V....

  集成电路自1958年问世以来至现在,其工艺节点已经从10微米发展到3纳米。集成电路又可分为数字集成电....

  IP是秘密武器:“重新设计轮子”会使得开发计划岌岌可危。对系统设计而言,开发那些不能增加特殊价值的系....

  近日,我们有幸采访到已经退休的清华大学周祖成教授,请他讲述25年前中国EDA行业的峥嵘岁月及清华与新....

  EDA(Electronic Design Automation)是芯片自动化设计的重要工具。正如编....

  从八十年代开始,随着计算机进入了商用阶段,IBM PC和苹果的Macintosh的快速迭代,快速带动....

  PCB层叠设计基本原则 CAD工程师在完成布局(或预布局)后,重点对本板的布线瓶径处进行分析,再结合....

  Protel99SE虽然具有自动布局的功能,但并不能完全满足高频电路的工作需要,往往要凭借设计者的经....

  在PCB设计过程中,EDA工程师常常需要匹配两代PCB的结构,这种情况下,将上一代PCB的Outli....

  2019全球设计自动化展会,是对业界顶尖科技技术手段的认可,是行业高科技产品展览和交流的盛会;更是对....

  所谓的EDA,是指电子设计自动化(Electronic Design Automation),用于芯....

  工欲善其事,必先利其器。现今的芯片设计已经达到亿门级集成度,即便经验最丰富的设计工程师也无法凭手工完....

  EDA工程师在PCB设计过程中,往往需要与结构工程师打交道,结构图纸即DXF文件就是结构工程师与ED....

  EDA是电子设计自动化的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CA....

  PCB设计过程的演变已经有了很大的进步。 80年代推出了第一块PCB设计软件,标志着设计创作能力和技....

  (1)电路板的尺寸的设定。设计PCB前,首先要设定电路板的尺寸/边框,其设计步骤为:先弹出编辑区下方....

  OrCAD是由美国ORCAD公司于八十年代末推出的EDA软件,每天都会有百万计的电子工程师、PCB设....

  鉴于去年发布的资料库由 Digi-Key 应用工程团队策划和开发,合作伙伴资料库旨在让制造商提供其符....

  面板厂华映公告人力调整计划,已于今日向桃园市政府劳动局提出大量解雇劳工计划书,将依据劳动相关法令规定....

  仿真结果符合预期,且出现了“毛刺”,即电路的冒险与竞争现象,这是由于逻辑门存在延迟以及信号的传输路径....

  闹钟的设置优先级要低于正常示数,所以必须在正常示数时使用闹钟开关才能进行闹钟的设定,而且闹钟的校时校....

  把一个有专用目的,并具有一定规模的电路或子系统集成化而设计在一芯片上,这就是专用 集成电路ASIC的....

  EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技....

  EDA是电子设计自动化(Electronics Design Automation)的缩写,在20世....

  基于硅技术之上的半导体集成电路技术是现代信息技术的核心技术,半导体技术的发展造就了今天的信息化、网络....

  随着EDA平台服务趋于网络化,如何通过对资源和流程的有效管理,为用户提供更为方便安全的远程EDA平台....

  对于台积电 7奈米制程,完整的Calibre实现套件现已更新至V1.0版本,适用于客户的生产设计交付....

  如果是一个原理工程师或者PCB工程师或者单纯的substrate工程师都可能无法真正的认识到并做出改....

  为了使客户更有效率的推出新产品,上游EDA公司除提供完整的产品线之外,也开始布局更多的软件投资,而与....

  在半导体这个领域,中国需要挑战的是,西方上百年积累起来的工业体系。中国半导体一直是在冒着敌人的炮火匍....

  近日,国微技术发布《关于获批电子设计自动化研发国家重大科技事项并收到专项资金之公告》。

  大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、....

  实际上,新思科技已经推出能在供应链中轻松共享架构性能要求的虚拟原型关键技术。例如最近发布的Platf....

  .pcb。最常见的后缀,很多PCB设计文件都是这一后缀,其中最常见的是Protel、PADS,此外还....

  在FPGA上设计一个DDS模块,在DE0 开发板上运行,在FPGA芯片内部合成出数字波形即可。

  一年一度的IC设计行业盛会——中国集成电路设计业2018年会暨珠海集成电路产业创新发展高峰论坛(IC....

  由于vcs2014只支持gcc4.4的版本,而ubuntu16.4的gcc是5.4,所以需要先把gc....

  本文将通过介绍一个代码模板的四个基本步骤,来帮助您完成数据分析的初期探索。

  在用verilog编写代码的时候出现错误提示:“mixed single- and double-e....

  世界三大EDA厂商一般指的是Cadence, Synopsys, Mentor Graphics,四....

  我们采用的方式是将这些系统使用事件驱动架构。从高一层来看,这意味着当有趣的事情发生在系统的记录(SO....

  EDA是一种以事件为媒介,实现组件或服务之间最大松耦合的方式。传统面向接口编程是以接口为媒介,实现调....

(责任编辑:admin)
相关内容:
【北京站】事件驱动架构(EDA 10:02赵宇:事件驱动掘金!首 证券时报电子报实时通过手机AP 上涨驱动力趋弱 动力煤560元吨 3金股突现拐点信号! 后市有望
机场巴士 | 世界天气 | 外汇牌币 | 世界时间 | 取票与付款方式 | 投诉与建议 | 联系我们 | 国际机票

Copyright © 2008 elicn.com  Inc. All rights reserved. 北京易联东方国际机票网
电话:4007-100-800 传真:65305717 地址:北京市东城区东直门南大街9号华普花园B座1206室 邮政编码:100007

 
京ICP备09065193号 经营性网站备案信息

京ICP备案号:78945612 开发维护:奇迹网络

 
香港挂牌| 香港马会九肖期期准| 六和釆平码公式计算| 正版管家婆马报彩图| 四海图库即时开奖结果| 香港陆和彩2018全年资料| 开奖直播| 金种子心水论坛| 凤凰天机网神算图库| 王中王幽默玄机中特奖|