开发者学堂课程【SpringBoot 快速掌握 - 高级应用:Dubbo 简介】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/613/detail/9316
Dubbo 简介
Spring Boot 与分布式:
整合 Dubbo 和 Zookeeper 以及Spring Boot 和 Spring Cloud 来做一个简单的分布式应用。
随着互联网的发展过程中,网站的应用规模不断地在扩大,普通的单体应用不能满足需求,可能一处小小的修改都能导致应用的重新布署,而且它也不能对付大流量的访问。
这时,我们就可以像以前一样,能对网站的功能进行拆分,比如拆分出优则模块,用拆分 user,older 模块订单模块,当用户模块访问量大以后,可以把用户模块能独立部署的不同的机器,一号机,二号机 ,三号机,同时来运行用户模块,这时,一号机承载200并发,二号机200并发,三号机200并发再合起来600了,同样的,订单也放在很多机器里边,同时来运行,这样的话,如果用户模块想要用用订单模块的数据,那就牵扯到一个问题, RPC,远程过程调用,以前可以来写代码,或者用 wideservice 的方式来进行调用,这样很麻烦,这里需要一个 RPC 框架,相当于需要一个分布式服务框架,这个时候,dobbo 就可以帮我们来做,Spring Cloud 也可以来做。
但是牵扯到一个概念,叫注册中心,举一个例子,我们用户模块想要用订单模块,但订单模块在四台机器上都有,我们运行哪个都行。
那我们用户模块到底要调哪台机器上订单模块的方法功能呢?
就可以有一个注册中心,注册中心里边,就来保存了这些订单模块,咱们这些订单模块都在哪个服务器里边?
用户模块想要调的时候,可以先去注册中心里边来问一下注册中心,要用到订单模块,哪些服务器里面都有来注册?
注册中心来告诉它,比如一号服务器,二服服务器,三号服务器有,那我们用户模块呢,就直接去一号服务器等等来吊用订单模块,
注册中心的就类似于我们现实生活中的婚介所,比如我们男同志要找女朋友,如果自己找的话,千千万万的女生,眼花缭乱,所以所有要找女朋友的男生要找男朋友的女生也可以注册在婚介所里面,所有要找男朋友的女生也可以注册在婚介所里边。
这样的话,我要找个女朋友,我把条件的告诉婚介所帮忙查看。符合女朋友条件的都给我们在返回地址来直接调用。
这是我们注册中心所需要的功能。这时,无论是用 dubbo 还是 Spring Boot ,都牵扯到这个注册中心的概念,
下面就以 Zookeeper 和 Dubbo 为例,组合一个分公式应用,首先, ZooKeeper ,它就是用来做注册中心,而 Dubbo 就是分布式服务调用框架。
他来负责 a 模块儿和 B 模块的远程过程调用,但是呢,A要B在哪儿就需要有一个注册中心来保存 B 的地址。
A,访问注册中心,找到 B 的地址以后,我们来进行远程调用,那么 Zookeeper 就是这个注册中心,Double 就是这个分布式服务的调用框架
Dubbo 架构服务图如下:
如这样,Container 是 double 的服务容器,它在启动的时候,负责启动,加载和运行这些 provide 服务提供者,服务提供者在启动的时候会将自己能提供的这些服务信息注册到注册中心里边儿,服务消费者,同时,在启动的时候会从注册中心里边订阅它所需要的这些服务,注册中心会把它所需要服务的这些地址列表全部返回给他。
服务如果有变更,注册中心也可以基于长链接的方式将这个变更推送给他。
相当我们消费者里边手持着一份实时更新的提供者些名单。
如果消费者需要调用,就从我们提供者的这些地址列表中,可以基于一些负载均衡机制来找到某一个提供者的位置,来调用它的服务。
如果调用失败,在地址列表中,可以再找另外一个服务提供者继续来调用,直到调用成功等等。
当然 Dubbo 还会有监控机制。这些调用次数或者调用时间这些信息,可以定时每分钟给监控中心来发送一次,来做到一系列的监控。