淘淘商城第10讲——你给翻译翻译,什么叫Dubbo?
如何实现系统间的通信?
由于淘淘商城是基于SOA的架构,表现层和服务层是不同的工程,所以要实现商品列表查询这个功能需要两个系统之间进行通信。那么如何实现远程通信呢?
这里我们总结一下,Dubbo有两个作用,一个是实现系统之间的远程通信,一个是统计出系统之间的调用关系、调用次数,以便于我们管理我们的服务,而管理服务的目的就是为了能够知道哪些服务的并发量比较高,哪些服务的并发量比较低,这样就可以便于我们添加节点(服务器)了。
什么是Dubbo?
其官网地址是http://dubbo.apache.org/en-us/,有兴趣的话可以进去看看。那么,Dubbo是什么呢?
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
Dubbo架构发展路线图
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。如下图所示就是Dubbo架构发展路线图。
从上图可以看到,发展经历了如下四个阶段。
第一阶段:单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM) 是关键。
其中1~10的意思是,当一个Tomcat服务器无法满足要求时,我们可以增加部署Tomcat服务器的数量并用反向代理来做负载均衡。由于不同的Tomcat服务器之间session需要共享,因此就需要定时向其它节点进行广播,其它Tomcat服务器发现与之不同时便会进行同步,当节点数量较多时,广播将会占用大部分带宽,以至于真正的通信所使用的带宽严重不足。因此该架构只能用于节点数小于10的情况。
第二阶段:垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,因此将应用拆成互不相干的几个应用,以提升效率。
举个例子,比如将淘淘商城这个项目拆分成订单系统、会员系统、前台系统、后台系统以及搜索系统等,每个系统自成一家,服务层和web层都在一起,哪个系统压力大,就给那个系统增加节点以提升性能。
此时,用于加速前端开发的Web框架(MVC) 是关键。
第三阶段:分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,这时代码将会变得非常臃肿(因为同一套代码逻辑可能会被写多遍)。此时可将核心业务抽离出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能够更快速地响应多变的市场需求。
此时,用于提高业务复用及整合的分布式服务框架(RPC) 是关键。
第四阶段:流动计算架构
当服务越来越多,容量的评估、小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于提高机器利用率的资源调度和治理中心(SOA) 是关键。
总结
一句话总结Dubbo,它是资源调度和治理中心的管理工具。也可以说,Dubbo就是类似于WebService的关于系统之间通信的框架,并可以统计和管理服务之间的调用情况(包括服务被谁调用了,调用的次数是如何的,以及服务的使用状况)。
Dubbo的架构
Dubbo的架构如下图所示。
对于以上Dubbo的架构图,我作以下六点简要的说明:
- 第0步是服务提供者的发布,Provider的发布需要用到容器,而我们的Spring便是专门用来做容器的,因此服务提供者的发布需要用到Spring;
- 第1步是进行注册,就是说服务提供者在发布之后,要在Dubbo的注册管理中心进行注册(注册中心的最好选择Zookeeper,当然了你也可以选择Redis),这样注册中心便知道有哪些服务可供消费者使用了;
- 第2步是消费者要调用服务,但是他是不知道有哪些服务可供调用的,因此它需要先到注册中心进行询问,查询一下是否有自己想要调用的服务;
- 第3步是注册中心查找之后发现有匹配的服务可供调用,便会向消费者返回可供调用的服务的IP地址和端口号;
- 第4步是消费者拿到可供调用的服务的IP地址和端口号之后,便不再需要经过注册中心,直接就可以访问服务了;
- 第5步是指Dubbo想要监测都是哪些消费者调用了哪些服务,调用了多少次,这样便于管理。
对于以上Dubbo的架构图,还须对其中的节点角色进行说明。
除此之外,我们还须对其中的调用关系进行说明。