分布式高可靠性的基本原理:可靠消息算法

东北大学计算机硕士研究生毕业,曾任国内著名软件公司高级开发工程师,架构师,项目经理,畅销书作者,电子工业出版社和人民邮电出版社签约作者,出版过《微信小程序应用开发实战》,《微信商城开发实战》。目前主要从事后台技术架构研究开发,同时制作更多更好的培训视频和出版更多有价值的书籍。

文章正文

我们知道,任何 IT 系统都是为实现业务功能而存在的,并且会随着业务的发展不断升级。比如淘宝网,创业初期也仅仅只是个很简单的单体 Web 应用,包括一个 MySQL 数据库和一个 Apache Tomcat 服务器。但是随着用户数量的上升,系统越来越不能满足业务的需要,出现性能瓶颈。这时候就需要调整系统架构以满足当前业务的需要了。

将单体应用拆分成多个服务,例如用户服务、订单服务、库存服务等等,每个服务独立部署,使用各自的数据库,必要时可以很方便地针对各个服务进行横向伸缩以应对用户量的暴涨。这就是分布式微服务系统。如图 1:

在这里插入图片描述

图 1 服务拆分和微服务架构

当然,服务拆分在解决了用户暴涨带来的性能瓶颈问题的同时,也引入了更多的复杂性和问题,例如数据一致性问题、调用链路过长、问题难跟踪、幂等性问题等等。这些问题并非一本书一篇文章能够讲清楚的,我们今天只聊其中最重要的一点——可靠性。

可靠性对分布式系统具有重大意义。我们简单举例,在图一中的订单服务通过异步消息通知商品服务完成商品库存的扣减,如果因为网络抖动导致消息丢失,商品库存扣减失败,最后导致商品库存数据不正确,那么这个问题就严重了。我们可以断言,一个不能保证数据正确性的系统是一个毫无价值的系统。

分布式系统可靠消息的难题

在一个分布式系统中,各个服务相互独立,一个完整的业务往往要跨越多个服务,也就是我们所谓的服务链调用。在这个过程中,避免不了异构系统之间服务的相互调用。

在服务化之前服务之间通常是本地调用,本地方法调用损耗小调用快。服务化以后,不同的服务往往部署在不同的远程服务器上,服务提供者和消费者之间通过远程网络通信,不仅损耗大而且调用的延时也大大增大,所以分布式环境下,服务之

作者正在撰写中...
隐藏内容 支付可见
内容互动
写评论
加载更多
评论文章
¥6.99 购买
× 订阅 Java 精选频道
¥ 元/月
订阅即可免费阅读所有精选内容