架构设计与重构

Vert.x 异步Actor框架实战记录 - Part1概念介绍

2017-03-25  本文已影响0人  MarkZhu
Vert.x 异步Actor框架 - Part1介绍

一个新系统,需要集中管理公司的几个现有业务系统的基础数据。其中每个被管系统有N多实例,全球多地区异地部署。
架构挑战:

面对以上挑战,传统的双向RPC+负载均衡架构不适合。事件驱动的框架(EDA)成为主要考虑方向 。而一个好用的EDA架构设计,需要一套成熟的架构和开发模式支持。实施时需要一套成熟的框架支持以减少工作量和提高稳定性。以下为技术选型的思考结果和说明。

1.基本概念

1.1 Actor Model 模式

What:什么是Actor模式

Actors communicate with each other by sending asynchronous messages. Those messages are stored in other actors' mailboxes until they're processed.

出处:http://www.brianstorti.com/the-actor-model/

形象点说,每个Actor是一个人,他有多个输入源(耳、鼻、眼),同一时间他只能就输入源来响应做一件事。他有自己的记忆(状态)。他耐性不好,向其它人口头下达指令后,不等其它人做完就忙其它的事情去了。

每个Actor可认为一个Event Loop可简单理解为线程(实际可能多个Actor共享线程)。它有以下组件:

Actor Event Loop的状态有:

一般,研发会使用异步IO编程方法,来实现具体的Actor。即,具体Actor的关心的IO读写事件也会放入Actor自己的信箱。处于【处理事件中】的事件消费程序,不会有IO引起的Block等待。

Why: Actor模式的用处

Who:谁在用Actor模式

1.2 Vert.x

What:什么是Vert.x

官话是这样说的:
Eclipse Vert.x is a tool-kit for building reactive applications on the JVM.

我关注的是最后一点:) 有人说它是java界的Node.js。但它自称性能上,多语言上超越Node.js。有人说它是瑞士军刀,管饭还管车,因为他是个异步框架,Web框架,也送Event Bus,支持Actor模式,支持微服务管理和发现等等……我真心怀疑它能做得精吗?

Actor框架
Actor,在Vert.x中叫Verticle。(http://vertx.io/docs/vertx-core/java/#_verticles)

Event Bus
事件总线,支持事件广播、点到点发送、点对点发送与回复(Reply)
http://vertx.io/docs/vertx-core/java/#event_bus

并发编程框架

异步IO编程框架

异步IO编程框架1 异步IO编程框架2

响应式编程
如果你认为OOP或好莱坞原则的异步Callback编程已经OUT了,或者已经被Callback Hell坑过。那么可以试试Reactive。Vert.x 支持Rx-ified using RxJava

集群
跨JVM的集群Event Bus,基于hazelcast来实现集群的发现和消费订阅的登记
http://vertx.io/docs/vertx-core/java/#_cluster_managers

集群

1.2.1 Vert.x 中的Actor模式怎么玩

Actor模式在Vert.x中这样体现:

https://www.slideshare.net/jbandi/vertx-asynchronous-eventdriven-web-applications-on-the-jvm https://www.slideshare.net/sascha_klein/vertx-using-groovy/6

所以,黄金规则是Verticle中不能写阻塞的代码,如果一定要用,解决方法是:放在后台工作线程池中阻塞

1.2.2 Vert.x EventBus是什么

Vert.x EventBus是个普通的无中心消息框架

**事件广播** **点到点发送** **点对点发送与回复(ACK)**

事件总线的作用:

SLA:

Vert.x EventBus是个分布式消息框架

Vert.x EventBus是个分布式消息框架

Vert.x EventBus是个打通到客户端的消息框架,是个All in one工具集

Web socket EventBus支持

由于它包含一个EventBus SockJS Bridge。模块,浏览器可以通过它提供的JS库,使用sockjs协议(Server-Sent Events/Websocket/HTTP poll)来接入EventBus。官方文档:http://vertx.io/docs/vertx-web/java/#_sockjs_event_bus_bridge
好处:

官网外的资料:

上一篇 下一篇

猜你喜欢

热点阅读