新瓶装旧酒?从微服务同步REST的天然缺陷说起

news/2024/6/17 13:47:14

今天小数给大家带来的干货来自国外一个小组会议上的分享。目前,大部分微服务架构都会使用REST协议以实现不同服务之间的通信,但是它却有天然的缺陷——怎样的缺陷?如何解决?请看下文。

最近,Lightbend技术负责人James Roper在纽约Java特别兴趣小组会议上分享了一个观点:

现在许多人正着手将传统的整体式应用拆分成微服务集合,但如果这些微服务组件都通过REST(即表述性状态转移)实现彼此通信,那么它依然只是一款整体式的应用程序。

图片描述

Roper表示自己是异步通信的铁杆支持者——Lightbend(前身为Typesafe)推出的一套名为Lagom的Scala微服务平台正好是基于异步通信所打造。

何谓异步通信

这里提到的“异步通信”与我们常说的“异步I/O”并不是一回事。异步I/O的实质在于避免因等待进程线程完成而导致的操作停止。而作为微服务中的重要组成部分,异步通信则旨在设计出一套系统,其中某项服务的执行无需等待另一项任务的完成。

“使用异步通信,如果用户向某项服务提出一条请求,而该服务又需要向另一服务发出请求,那么前一服务的通信无需受阻即可向用户直接返回响应,”Roper解释称。

REST的固有缺陷

目前,大部分微服务架构都会使用REST协议以实现不同服务之间的通信(取代对象调用)。尽管REST较其它常规方式(例如基于XML的SOAP)更为简单,但其同步特性仍然成为固有缺陷——换言之,它天然拥有同步属性,而非异步。

“当客户端发出一条请求,服务器则发出一条响应,”Roper这样形容REST的工作原理。

图片描述
一项服务发生故障,即会导致操作整体瘫痪。

面向用户的服务通常包含大量以同步方式通信的微服务,这意味着各微服务彼此依赖。这种处理方式在各服务皆能正常运转时并不会带来什么麻烦,然而一旦某项服务发生故障,即会引发不可阻挡的故障链并导致最终用户面临拒绝服务状况。

同样的,如果某项微服务速度缓慢,则响应时间也会被同时拖累。

使用REST等同步通信机制,Roper指出,“从技术角度讲,我们仍然相当于构建了一款整体式方案。无论各组件是否被拆分为独立服务,系统本身还是会像整体应用那样高度关联。”

异步通信来填坑

而在异步通信中,各服务间仍然彼此依赖,但不再因相互等待结果而导致响应速度缓慢。因此,如果一项服务发生故障,其不会影响到其它服务,瓶颈与单点故障问题也将不复存在。

利用基于Java的一套类Twitter服务演示,Roper解释了如何通过多种方式实现代码中的异步调用。方法之一在于确保每项微服务都在信息更新时对其进行发布,而非等待其它微服务针对该信息提出请求。通过这种办法,假设通讯服务需要一份用户的“好友”列表,则可使用由“好友”相关微服务提供的最新信息,而非直接指向该服务发出请求。

来自异步通信的挑战

Roper坦言,异步通信带来的最大挑战在于如何确保最终用户始终能够获得最新信息。很多社交网络都会使用最终一致性机制,并不保证每位用户都能够获得最新版本信息。

另外,REST调用由于极易实现而使用户产生了稳定的使用习惯。一位与会者提到,需要经过大量编码工作才能实现异步通信。

实时REST调用应该被取代吗?

Roper指出,像Apache Kafka这样的软件能够自动处理异步服务中的低级细节,“如果使用简单的REST调用,大家的服务有可能瘫痪。而通过这种方式,情况就不会那么糟糕。”


http://www.niftyadmin.cn/n/2136005.html

相关文章

数组中有重复的元素将重复元素去除

function unique(arr){var len arr.length;var result []for(var i0;i<len;i){var flag true;for(var j i;j<arr.length-1;j){if(arr[i]arr[j1]){flag false;break;}}if(flag){result.push(arr[i])}}return result; }

spring的orm模块

spring整合hibernate 1、hibernate使用注解。 daoImpl需要继承HibernateDaoSupport对象&#xff0c;针对给对象的getHibernateTemplate()进行hibernate操作。操作的语句是hql语句。 applicationContext.xml <?xml version"1.0" encoding"UTF-8"?> …

什么是Dao层?

DAO(Data Access Object) 数据访问对象 是一个 面向对象 的数据库接口&#xff0c;它显露了 Microsoft Jet 数据库引擎 &#xff08;由 Microsoft Access 所使用&#xff09;&#xff0c;并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样&#xff0c;直接连接…

『MySQL快速上手』Centos 7安装MySQL详解

文章目录 1.卸载掉之前安装的MySQL2.检查系统安装包3.卸载默认安装包4.获取mysql官方yum源5.安装mysql yum源6.安装mysql服务7.查看配置⽂件和数据存储位置8.启动mysql服务9.登录mysql方法一 使用临时密码方法二 直接登录方法三 设置免密码登录 10.设置开机自动启动&#xff08…

Git基础(5):分支

前言 分支在Git中相对较难&#xff0c;分支就是衍生的版本&#xff0c;类似于树木生长多个分支。但是分支在某些时候也可以合并&#xff0c;合并的时候&#xff0c;就需要处理一些新的问题。分支常用命令 #列出所有分支(带*表示当前分支) git branch#列出所有远程分支 git bra…

响应式网站

浏览器会给出 DIP(device independent pixels) &#xff0c;而不是 hardware pixels。DIP 实际上联系像素到实际的距离。不管显示器的 pixel density 是怎样&#xff0c;同样的 DIP 会占据同样的空间。 The idea being that a device independent pixel will take up the same …

Weui初始开发链接

https://blog.csdn.net/hou549135295/article/details/72621484

Git基础(6):命令大全

文章目录前言常用命令配置信息仓库命令增加/删除文件提交代码分支查看信息远程同步撤销other前言 Git常用的各种命令和解析。常用命令 配置信息 #显示当前的配置 git config --list#编辑Git配置文件 git config -e [--global]#设置提交代码时的用户信息 git config [--global…