发展&专业名词

Dubbo 起源于SOA时代的产物,高性能轻量级RPC(远程过程调用)开源框架,底层使用的是Netty(NIO框架),基于TCP协议传输、Hessian序列化方式完成RPC通讯,关注点在于服务的远程调用、流量分发、服务治理、流量控制,等…

Spring Cloud 诞生于微服务时代,基于HTTP协议+Rest风格的一个接口去实现远程通讯,虽然HTTP请求会有更大的报文(占用的贷款更高),效率上比Dubbo更低,但是Rest比RPC更加灵活,服务提供方和服务调用方只需要根据HTTP契约完成通讯即可。关注点微服务生态的解决方案,Spring Cloud依靠于Srping 和Spring Boot。

参考:

百度百科:Dubbo

百度百科 (Video):谈谈你对Dubbo的理解?你是普通人还是高手?

凤凰架构:远程服务调用

远程过程调用 RPC

额外知识:首次提出远程服务调用的定义

Remote procedure call is the synchronous language-level transfer of control between programs in disjoint address spaces whose primary communication medium is a narrow channel.

远程服务调用是指位于互不重合的内存地址空间中的两个程序,在语言层面上,以同步的方式使用带宽有限的信道来传输程序控制信息。

RPC(Remote Procedure Call)出现的最初目的,就是为了让计算机能够跟调用本地方法一样去调用远程方法

img

RPC其实存在很多问题的:

  • 不同的语言之间调用如何统一
  • 对于程序员学习门槛高,学习成本高
  • 没有一个完美的RPC,可以解决如何 表述数据、传递数据、确定方法

REST

REST 源于 Roy Thomas Fielding 在 2000 年发表的博士论文:《Architectural Styles and the Design of Network-based Software Architectures

Traditionally, people design RPC APIs in terms of API interfaces and methods, such as CORBA and Windows COM. As time goes by, more and more interfaces and methods are introduced. The end result can be an overwhelming number of interfaces and methods, each of them different from the others. Developers have to learn each one carefully in order to use it correctly, which can be both time consuming and error prone

以前,人们面向方法去设计 RPC API,譬如 CORBA 和 DCOM,随着时间推移,接口与方法越来越多却又各不相同,开发人员必须了解每一个方法才能正确使用它们,这样既耗时又容易出错。

—— Google API Design Guide, 2017

参考:

凤凰架构:REST设计风格

安康学院校园墙小程序(前后端)-毕业设计 API规划 > RESTful API

Fielding 认为,一套理想的、完全满足 REST 风格的系统应该满足以下六大原则:

  1. 服务端与客户端分离
  2. 无状态
  3. 可缓存
  4. 分层系统
  5. 统一接口
  6. 按需代码

REST 提出以资源为主体进行服务设计的风格,能为它带来不少好处:

  • 降低的服务接口的学习成本。统一接口(Uniform Interface)是 REST 的重要标志,将对资源的标准操作都映射到了标准的 HTTP 方法上去
  • 资源天然具有集合与层次结构。以方法为中心抽象的接口,由于方法是动词,逻辑上决定了每个接口都是互相独立的;但以资源为中心抽象的接口
  • REST 将复用 HTTP 协议中已经定义的概念和相关基础支持来解决问题。

REST 与 RPC 在思想上的差异:

REST 提出以前,人们设计分布式系统服务的唯一方案就只有 RPC,RPC 是将本地的方法调用思路迁移到远程方法调用上,开发者是围绕着“远程方法”去设计两个系统间交互的,譬如 CORBA、RMI、DCOM,等等。这样做的坏处不仅是“如何在异构系统间表示一个方法”、“如何获得接口能够提供的方法清单”都成了需要专门协议去解决的问题(RPC 的三大基本问题之一),更在于服务的每个方法都是完全独立的,服务使用者必须逐个学习才能正确地使用它们。

注册中心

发展历史:

  1. Dubbo 早期开源时默认的注册中心 ZooKeeper 最早进入人们的视线,并且在很长一段时间里,人们将注册中心和 ZooKeeper 划上了等号。
  2. Spring Cloud 开始流行,其自带的 Eureka 进入了人们的视野,人们这才意识到原来注册中心还可以有其他的选择。
  3. 再到后来,热衷于开源的阿里把目光也聚焦在了注册中心这个领域, Nacos 横空出世。

Java微服务中服务名称,基本上都在yml文件中有,访问后端时候需要加上服务名bootstrap.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server:
port: 8060

spring:
application:
name: mftcc-oa-server
cloud:
nacos:
config:
# 本地地址ip
# 测试生产地址ip
server-addr: 127.0.0.1:8848
namespace: 30a7f7f1-f414-4acc-8a4b-bbb5808727d5
group: example
file-extension: yml
ext-config:
- data-id: mftcc.yml
group: example
refresh: true

Feign