Skip to content

Commit

Permalink
micro service
Browse files Browse the repository at this point in the history
  • Loading branch information
flycash committed Sep 2, 2021
1 parent 31d95c3 commit bac7e6e
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 0 deletions.
Empty file added gc/golang/atomic.md
Empty file.
Empty file added gc/golang/channel.md
Empty file.
Empty file added gc/golang/goroutine.md
Empty file.
47 changes: 47 additions & 0 deletions microservice/general.md
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 的实现思路

0 comments on commit bac7e6e

Please sign in to comment.