对于传统的三层架构我们都比较熟悉,Web服务器、应用服务器和数据库,一般对于高可用环境,我们会划分不同的可用区做冗余。如图所示就是三个可用区,每个可用区有自己的Web服务器,Web服务器下面又可以访问主从结构的应用服务器。对于这样的架构其实已经可以做到很好的灾备和可扩展,但现在的问题是原有系统业务越来越复杂,查询更新操作的时间越来越长,我们希望进行改善。
要改善系统我们要分析现有系统的问题。应用服务器冗余过于浪费,没有合理利用。传统三层架构的请求透传,整个过程走完才能响应前台,相对于用户操作,我们浪费了大量的时间在后台处理上。我们需要一种机制将Web服务器上的操作与应用服务器上的后台逻辑解耦,更快地响应前台。
首先,我们建立基于消息的事件驱动机制,让后台处理解耦出来,前台可以得到快速响应,而后台可以继续长时间的处理,并且是异步执行的。
第二,为了减少对Web服务器的处理,我们将把服务粒度划分的更新并且主要部署在应用服务器上,接收到系统内或上游系统消息时,这些微服务将被调用起来并行执行长时间的业务逻辑,减少了对Web服务器的负担,并且增加了系统响应的实时性。
微服务事件驱动架构比较适合现有大型的三层架构系统迁移,通过事件驱动机制、消息和微服务真正实现前后、各业务之间的解耦,增强了系统的可扩展性和实时性。当然,在这样的设计中我们还要考虑最终一致性、统一的日志和监视等问题。