一、分布式简介
在企业项目中(业务很复杂、用户访问量很高、信息的保密级别很复杂时)常会用到分布式开发,那么分布式的核心概念实际上非常简单,就是将一台服务器上完成的计算操作分给2台或者更多台的主机一起完成。
分布式开发本质:虽然所有的主机物理上分布了,但对于用户而言就仿佛是一个整体。
于我们java开发者而言,分布式开发意义:哪里需要去使用分布式开发
在任何一个项目里(mvc设计模式),业务操作是最为核心的部分,而所有项目中业务操作是否完成决定了系统是否健壮。
随着java开发的逐步进展,我们发现如果将业务层直接和前端的开发混合在一起,那么无法进行业务的重用操作,者就带来非常麻烦的业务重复开发问题,所以将业务操作单独分离出来,让业务单独运行在一台服务器上,这样我们就可以组成业务的服务器集群,这个集群就叫业务中心(RPC技术),然而不管RPC技术如何进行处理操作,所有远程端服务的接口,必须提供有远程对象才可提供前端开发者进行我们的调用。
当这些业务中心组成完成后,实际上就出现了数据库的集群,也就是说庞大的项目开发里,每一个业务中心应该有自己的数据库服务器供用户使用,正因为如此,所以在很多的大型项目设计里面,对于数据库中的约束,我们往往只会使用主键约束,而其他的约束都会通过业务层进行控制,对于每个业务层后面所使用的数据库,你也可以继续进行架构设计(如:库表分离设计,或直接使用MyCat进行分片处理)
二、分布式开发技术进展
分布式开发鼻祖:CORBA(所以语音均可实现),
而在CORBA之后,由sun公司开发了一项属于自己的分布式开发技术:RMI(性能差,但实现形式与Dubbo是相似的)
在RMI的处理里面,有2个非常重要的概念,一个是存根,一个是骨架,可以简单的理解为RMI技术依然借助于接口定义的完成,客户端有接口定义形式(远程方法视图),客户端通过远程接口知道可以使用的方法有哪些。随着JDK版本提升,服务端的骨架会自动的进行生成处理。
由于RMI技术使用小众,并没有发展起来,后来经过不断的技术创新,在RMI基础之后,又结合了CORBA,形成了EJB技术,在EJB中真正提出了业务中心的概念,也就是说结合会话Bean和实体bean进行业务中心的定义,不过由于整个EJB的设计体系庞大,导致EJB技术成本很高,之后放弃,(才有了后来的SSH框架开发阶段)
但在整个行业之中对于分布式开发需求实际上一直存在,尤其到了.net大力发展的时代,很多开发者为了融合J2EE与.net体系的完美对接,后来推出了webService。
WebService的好处是使用了XML作为数据交换,可以整合所有的技术平台。但缺点就是慢。WebService在进行处理的时候往往会结合一些WEB容器去实现。而给出的XFire等开发框架是一个不断发展的过程。
后来在WebService上继续进行技术革新,产生了SOA的概念,而后又同时出现了ESB的概念,整合所有的应用。
再后来技术发展就发展都现在常听的Restful架构,利用JSON或XML实现数据的交换处理,这样的好处更多的避免WebService所带来的性能问题,在很多开源项目中被大量使用。
综合以上点,不管分布式技术如何发展,有2中形式
a)基于远程接口的实现:RMI、EJB、Dubbo(更直白点)
b)基于平台的交换技术:WebService、Rest架构(基于xml或json的操作)
建议:如果我们的开发语言仅java则使用dubbo;如果各种语言则使用WebService。
三、Dubbo简介
dubbo的实现风格上与RMI、EJB技术非常相似,在整个开发处理中依然以接口(远程服务)为主进行服务提供的。
对于dubbo本身开发架构来讲,开发人员所需要做的处理是非常有限的,而dubbo的开发框架会帮助用户做一系列的配置处理,同时在整个dubbo里面也有一些属于自己的开发需求。
dubbo框架设计共10层,但对于开发者而言,我们更关注service,在业务操作里重点在接口,分这么多层本身是有意义的。如:在业务交换时,我们常会传输VO对象,整个对象进行远程传输时,就需要序列化传输支持。
而且dubbo本身需要有一个注册中心,负责dubbo所有元数据的信息提供,那么依靠这些元数据的信息提供才找到所需要的dubbo服务,同时在整个设计里提供监控工具,进行监控dubbo服务。
在整个dubbo开发框架里有2个重要角色操作:
a).服务提供者(Provider):提供具体的业务接口实现类
b).消费者(Consumer):依据远程接口调用远程对象(提供者提供的业务接口实现类)
在整个dubbo设计里充分考虑到各类用户的设计需求,一些底层的通讯和信息存储都提供有大量的不同的存储方案,这些细节我们容易忽略,我们更多关注:
搭建服务中心——搭建远程服务接口——服务接口为我们提供服务
dubbo整体结构简单,但功能非常强大,最重要的是它能以服务的方式单独运行,这在整体的开发项目中是非常方便的事。