目录
I. BS vs. CS架构
CS Architecture
Clients和servers通过request-respond传递信息的网络架构。其中server通过HTTP协议向client完成高效超文本传递。
BS Architecture
CS架构改进版,由web browser作为client,web server作为server.
优势:
1. 轻量: 不用安装任何软件,只要有接网的电脑就可以使用
2. 维护成本低: client是web browser,无需维护;只维护server即可
II. HTTP
使用CS Model,是从web server传送超文本到web browser的网络协议。 stateless: 客户端的请求不会被跟踪。即,如果同一个client接连打开了网页A和网页B,server不会知道A和B的caller是相同的。
III. TCP/IP (Internet Protocol Suite)
连网计算机之间的通信协议。
TCP
应用程序之间的通信。可靠性强,速度慢。通过反复发送消息,直到destination host接收的方式保证消息被完整传递。 Connection: Prior communication is required to set up a new data path,需占用两台计算机的通信线路。
UDP
与TCP类似,但发送的是datagram且不需连接(connectionless)。速度快,但可靠性差。 datagram: 包括header和payload。
IP
计算机之间的通信。信息被分成packets,根据packet header中的IP地址进行传输。 packet: 包括control information(存储于packet header,包括IP地址)和user data。
TCP与IP
TCP将数据分割成packets传送给IP,由IP进行传递,最后在数据返回时再由TCP将它们组合起来。
IV. REST
一种支持跨语言、跨平台的web设计架构。重要原则如下:
资源
网络上的一切事物都被抽象为资源。
URI as identifier
URI是网络中资源的名称,是识别资源的方式。
URI和URL的区别: 一般情况下URL是URI的一种;除了能够识别资源外,URL还提供了资源的位置信息。(例:如果资源是小明的话,小明作为名字可以算作URI,小明的住址是URL。)
统一资源接口
使用标准的HTTP方法,主要包括GET, POST, PUT, DELETE。对资源的操作不会改变URI。
无状态通信原则
客户端存储应用状态,服务端存储资源状态。无状态(stateless)的意思是,server无须保留应用状态,只有在接受到请求时才会关注应用状态。每一次请求应包含处理该请求的全部信息。
优势: 独立性 (多次请求中同一客户端无须依赖同一服务器)
HyperMedia as the engine for state transfer
Server利用HyperMedia将下一步可能的状态传递给client,完成应用状态转移。cleint(即web browser)只需要知道如何处理server返回的结果即可,而不用知道URI的结构。
例如,用户利用URL进入某网站主页,可以点击server返回的HTML文件中的链接进入该主页下的一个分页;在此过程中,client不需要知道主页-分页的结构。
其它名词
- CURD: 数据处理的基本原子操作,包括Create, Update, Retrieve, Delete
- HyperMedia: 将HyperText的概念从纯文本延伸至多媒体
- ROA(Resource Oriented Architecture): 一种利用REST接口搭建软件的软件设计架构,包括一系列原则。
- 幂等性: 多次访问得到的response相同
- 安全性: 访问不会修改server上资源的状态
V. MQ(消息队列)
一种异步通信方式,适用于无服务器和微服务架构,为分布式程序提供通信与协调。
优势
- 速度提升: sending application无须等待receiver的回复,因为消息可以被确保成功传输
- 可扩展性
- 消除组件之间的依赖关系
RabbitMQ
RabbitMQ是一个实现消息队列的中间件。 Exchange相当于一个中转站,可以选择如何将message发送到queue上。
Consumer Delivery Acknowledgement
防止因consumer死亡而丢失信息的安全措施。
信息接收并处理完毕后,consumer会向RabbitMQ发送一个acknowledgement,通知它这条信息可以被删除。如果一个consumer在没有发回ack的情况下死掉了,RabbitMQ就会知道这条信息尚未被处理,会再次发送这条信息。
Exchange Type
binding 指exchange和queue之间的关系。 Exchange type 决定了exchange处理消息的方式,一共有四种:
1. Fanout Exchange
Broadcase (publish) the message so that all consumers can view it.
2. direct exchange
A message goes to the queues whose binding key excatly matches the message’s routing key.
3. topic exchange
Binding keys and routing keys can contain multiple words, separated by .(dot). A queue can subsribe to multiple topics. * 表示一个单词;#表示零个及零个以上单词。
4. Headers exchange
类似topic exchange,只不过topic的表达方式从binding keys变成了headers。
VI. RPC
一种通过网络达到远程调用服务目的的通信方式。由于local call和remote call的代码是一样的,RPC可以使构建分布式系统更容易。
然而,因为local call和remote call的处理速度相差很大,仍需要关注二者的区别。
其中,User-stub可以被细分为RPC proxy和RPC invoker;server-stub可以被细分为RPC processor和RPC invoker。
RabbitMQ Tutorial 第六课有关于如何用RabbitMQ构建RPC的详细介绍:使用RabbitMQ构建RPC