摘要
目前大部分的系统架构都是微服务架构,就算没有注册中心、服务管理,也肯定是多个服务,单体服务比较少了。
大家平时需要在应用内调用rpc接口也比较多,那么有没有思考过微服务之间的调用和应用内直接调用有什么区别呢?面试时是不是经常被被问到微服务呢,本篇文章针对微服务间的方法调用和应用内方法调用的有啥区别这个很小的点,谈谈我的经验
微服务调用特点
先从单体应用说起
单体应用
单体引用通过一个服务节点直接组装好数据,返回给调用者。所有的方法调用都发生在应用内部。
微服务应用
商品详情服务需要调用商品,营销等多个服务组装好商品详情页的数据
微服务调用和应用内调用不同点在于它是跨进程的,甚至是跨节点的,这意味着什么呢
使用k8s编排微服务时,我们可以让不同的服务放在同一个节点的不同docker container上,但是考虑到网络不可靠,和容灾,服务之间不可避免会放到不同的节点/机架上,所以下文都以跨节点来讨论
意味着两点
- 对外部有了依赖
- 如果是跨节点,就有了网络调用。我们知道网络都是不可靠的
关于网络有几个著名的错误推论
The network is reliable(网络是可靠的&#x