一、分布式系统特点

多个节点

  1. 容错性
  2. 可扩展性(性能)
  3. 固有分布性

消息传递

  1. 节点具有私有存储
  2. 易于开发
  3. 可扩展性(功能)
  4. 对比:并行计算

早期并行计算是使用共享存储的,大家进行并行计算,每个人计算其中的一部分,最后把数据整合起来;
分布式系统区别于,每个节点做的事情很不一样,他们之间通过消息传递进行通信

消息传递的方法
  • REST:

总的服务器对外一般使用rest,因为rest接口比较接口化,而且也不容易改变,比较适合

  • RPC(远程过程调用):

通常把函数调用的结果序列化成网络上传输的数据,远端获取数据后反序列化完成函数调用
对内一般采用rpc,因为rpc可以做的事情更加多样

  • 中间件:

现在我们说中间件主要是说消息中间件或者分布式缓存。
消息中间件主要有ActiveMQ,RabbitMQ,Kafka,jms等,分布式缓存主要有用redis或者用memcached。

rest和rpc当前访问,当前完成,但是如果对方不在,我们就把消息发给中间件,中间件会存储消息,等对方服务器启动了,再从中间件拿消息再去处理,还可以1对多的发布等,通常消息传递的中间件,我们都叫message queue(消息队列)

不同的服务器可能是通过不同的消息队列来发送数据的

一般消息传递的方法

对外:REST
模块内部:RPC
模块之间:中间件,REST

为什么对外rest,对内rpc

要用rest接口来实现登录这件事情,很难放到rest框架里面去,因为登录就是一个动作,
说登录是对什么东西做什么动作就比较难说了,但是rpc就比较简单,就是一个登录的调用

完成特定需求


二、对比

分布式架构 VS 微服务架构

分布式:指导节点之间如何通信

微服务:鼓励按业务划分模块

过去我们是按照技术划分模块,如 数据访问层、业务层、表示层等

按业务来分,如订单业务、商品业务、物流业务等
这两种方式是不同维度的事情,他们应该是整合起来的+

微服务架构通过分布式架构来实现:

微服务指导我们怎么来划分模块的,划分完我们就用分布式的思想方法来实现,他们是合在一起的

多层架构 VS 微服务架构

多层架构是开发人员在开发过程当中面对复杂且易变的需求采取的一种以隔离控制为主的应对策略。

每一层都可以单独部署。将整个项目自下而上的分为:数据持久(数据访问)层,逻辑(业务)层,UI(展现)层。
是比mvc老的架构方式。mvc里三者是同级的互相作用。多层架构的话上层依赖下层,比如展示层会依赖业务逻辑,而mvc却不会。

微服务架构具有更多的“服务”

什么是服务?服务之间耦合度很松,松到什么程度?

我们每个服务有独立的代码,独立的测试流程,独立的上线流程等等,大家都可以不一样,不需要发布一个新版本,一下子所有的服务都发布出来,可能每天都发很多很多服务的新版本

微服务通常需要配合自动化测试、部署、服务发现等

目前我们倾向于微服务架构

倾向的原因就是上面提到的自动化测试、部署、服务发现这些框架都很成熟了