异步通信

另一种有助于扩展能力的方法是在系统的各部分之间的交流使用异步通信方式。异步通信是一种通信格式,这种通信方式在发布请求和响应可用之间有一个可测量的时间延迟。例如,一个管理照片的相册一般需要给照片生产一些缩略图,如带水印的原图。这个过程是需要花费时间的,因此同步的交流方式是不合适的。这个系统的图片处理部分会提供要给回调机制来提醒你任务已经完成了。

另外,通过在组件之间添加这样一层抽象层,我们可以使得服务设计者可以独立的处理扩展性。在前面的例子中,我们也许会需要一个计算优化服务来负责图片处理任务,因此其他部分也许仅需要多方面的常用服务。

一些可能的异步通信方式包括:

  • 数据库轮询(Database Polling):这种技术使用数据库表作为一个队列。消费者以一定的间隔定期轮询数据库以从表中获得信息。

  • 面向信息的中间件(MOM):这是一项基础设施,支持在分布式系统间发送和接收信息,如下面截图所示: MOM RabbitMQ(https://www.rabbitmq.com)和Apache ActiveMQ(http://activemq.apache.org)是MOM非常好的示例。

*Asynchronous RESTful API:通过使用@org.springframework.scheduling.annotation.Async注解端点,并返回一个java.util.concurrent.Future包,这样就可能构建一个异步的RESTful操作。

现在,让我们看下这些技术的细节。

数据库轮询在这里被提到是因为这项技术已经被用在真实世界的系统(小的系统)。由于这项技术工作在低容量,小规模的系统,它是一种非常有限的信息传递方式,且在高负载(例如,处理很多消费者的情况)的情况下表现很差。它也缺乏成熟的MOM解决方案。

MOM的目标是为系统的各个组件之间进行信息交换提供一个专用的基础设施。如果一个系统提供了不同的通信模型,如生产/消费者,消费者通过信息来和其他消费者竞争,发布/订阅者,所有订阅者接收它们自己信息的拷贝。MOM解决方案一般会提供长效性的保障(信息不会因为宕机而丢失)并提供一些管理工具。

当一个异步RESTful API提供了一些异步能力,它缺少基于MOM解决方案提供的许多好处。

对于扩展性有额外的好处,异步同时是一个保障各组件之间松耦合非常好的机制。在信息中间者解决方案的情况中,每个组件仅仅需要知道把信息发布到哪里或者是从哪里消费它们。它们不要求预知其他部分的拓补。此外,如果一个部分挂了,信息可以放进一个队列中直到消费部分再次可用。

results matching ""

    No results matching ""