-
Notifications
You must be signed in to change notification settings - Fork 269
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
47 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
# 微服务概览 | ||
|
||
> 微服务细碎的问题就放在这里讨论 | ||
## 面试题目 | ||
### 微服务和 RESTful 的区别 | ||
|
||
分析:这个东西很多人都聊过,但是很多人都没说清楚。我给个“最终”答案:微服务是一种架构,而 RESTful API 是符合**REST**设计风格的 Web API。所以从这个角度来说,这两者根本不具备可比性。那么为什么面试官要问这个问题呢?大概率是他们公司内部有并存的微服务应用,和 RESTful 应用。 | ||
|
||
我们先来分析 RESTful,它是一种遵守了**REST**设计风格的 Web API,显然也有不遵守 REST 的。这部分我们一般就是简单描述为 Web 服务。 | ||
|
||
而微服务,一般是指以 RPC 为通信,结合了整个微服务治理的架构模式。实际上,微服务作为一种架构模式,其落地的选择是有很多的,除了这里说的 RPC,还有一种很重要的实现手段就是基于 Web API 的实现方式。 | ||
|
||
我们可以总结来说,微服务落地,最基本的通信的角度来说,可以是 RPC,也可以是 HTTP。而在 HTTP 之下,有一个子分类就是 RESTful。因此,微服务和 RESTful 的区别,核心就是: | ||
1. 微服务是架构模式; | ||
2. RESTful 是指符合 REST 规范的 Web API; | ||
3. 微服务可以用 RESTful 来实现; | ||
|
||
这里就基本上讨论清楚了,不过我们还可以刷一个亮点:RPC 本身也是可以用 RESTful 来实现的。于是我们可以加上第四点:有些微服务虽然是基于 RPC 来构建的,但是 RPC 本身又可以是用 RESTful 来实现的。 | ||
|
||
沿着这个思路: | ||
1. 微服务用什么实现?RESTful 或者 RPC 都可以; | ||
2. RPC 用什么实现?直接基于 TCP 或者基于 HTTP 都可以。 | ||
|
||
答案: | ||
1. 微服务是架构模式; | ||
2. RESTful 是指符合 REST 规范的 Web API; | ||
3. 微服务可以用 RESTful 来实现; | ||
4. (亮点)微服务的另外一种实现,是利用 RPC 来实现;而 RPC 可以直接基于 TCP 来实现,也可以基于 HTTP 来实现,所以也可以用 RESTful 来实现;(这里可能会引起面试官的兴趣,就是问你 RPC 有哪些实现思路) | ||
|
||
(最后总结)微服务和 RESTful 总体来说是两种维度的东西。 | ||
|
||
(这里还有一个可能,就是面试官问你,RPC 和 RESTful 的区别,以为第四点我们聊到了微服务可以是 RPC 也可以是 RESTful) | ||
|
||
### RPC 和 RESTful 的区别 | ||
|
||
分析:RPC 和 RESTful 的区别,前面的问题**微服务和 RESTful 的区别**我们已经提到了。 RPC 名字叫做远程过程调用,是一种远程通信协议。但凡是协议,就会有落地。那么 RPC 的落地就很百花争鸣了,不过主流就是两个流派:基于 HTTP 的和基于 TCP 的。前者的代表是 gRPC,后者的代表是 Dubbo。基于 HTTP 的,如果要是它的 API 设计也符合 REST 设计风格,那么就可以说,它是基于 RESTful 的。 | ||
|
||
后面我们可以稍微聊一下这两种实现方式的优劣对比,作为一个亮点。 | ||
|
||
答案:RPC 是远程通信协议,它的实现可以是基于 HTTP 的,也可以是基于 TCP 的。而 RESTful 是符合 REST 设计风格的 Web API。因此,如果一个 RPC 是基于 HTTP 的,并且 HTTP 的 API 设计是符合 REST 设计风格的,那么就可以说这个 RPC 是基于 RESTful 的。 | ||
|
||
它们也是两个不同维度的东西。一般来说,基于 TCP 的 RPC 实现更加复杂,但是可以从 TCP 层面上优化,因此性能会更好。而基于 HTTP 的则是实现非常简单,目前,基于 HTTP2 协议实现的 RPC 在性能上也很优秀,对于大部分应用来说,并不会触及它的性能上限。 | ||
|
||
#### 类似问题 | ||
|
||
### RPC 的实现思路 |