事件驱动编程
事件驱动编程是以事件为第一驱动的编程模型,提到事件,可能有很多容易混淆的概念,这里的事件是指一种异步并发的消息模型,而普通的观察者模式则没有这个强调,观察者和被观察者之间通讯可以是同步机制。
同步机制的最大问题是会发生堵塞,不但导致性能大幅度降低,无法充分利用CPU潜力,浪费硬件投资,更重要造成软件模块的铁板化,紧耦合,无法切割,不利于日后扩展和变化。
异步并发的概念非常符合日常生活中事件的定义,也应该是事件语义的重要核心,实际生活中,事件的触发是无序且不可控的,对事件的响应当然要做到即时处理,如果用传统线程机制同步处理响应,可能因锁争夺发生堵塞,结果导致大量事件未及时处理,非常没有效率。
从客户端和服务器概念来看,客户端发出大量事件到服务器(如通过ajax等),服务器应该是多线程响应,但是如果每个线程内部处理业务时发生堵塞,线程再多也没有用,也就不能发挥服务器高并发处理的能力。
所以,我们不只是在服务器后端要选择事件驱动的socket架构,如Node.js或Vert.x,还要用事件驱动的编程模型将我们的业务落地到它们上面运行。这样才能在后端形成从底至上彻底的事件驱动架构。
业务的事件驱动编程,实际上是将node.js的前后端socket事件驱动机制搬迁到业务领域模型和技术架构之间,正如浏览器或Iphone客户端发出大量事件交由服务器处理,领域模型也能发生大量事件需要技术架构响应处理,比如大量同时读写数据库等等。这两者的机制应该是一样。
下面这个PPT是从服务器的底层Socket的事件驱动架构上升到最高层业务逻辑的事件驱动编程,提出了聚合根的业务模型与Actor模型非常吻合的天然衔接。
完整视频下载:http://pan.baidu.com/share/link?shareid=3706618000&uk=2365734848
[该贴被admin于2013-09-18 14:46修改过]