众所周知,Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架。
从这段话中,我们提取 关键字:分布式、RPC
一、为什么需要使用分布式系统
1、单机系统
项目工程比较简单,可能全部代码就在一个工程中, 或者按照模块来划分工程结构。
将项目放入tomcat就可以直接运行。用户流量增多,那么就多部署几台tomcat服务器,外层做负载均衡,实现分流。如果一台服务器挂了,系统还可以正常使用,相对实现“高可用”。
弊端: 实现项目结构比较单一的项目,如何项目开发团队上10人,系统代码具有100万行代码,几十人共同维护一个项目,涉及冲突会让人崩溃。并且项目新模块A需要上线,需要测试全部模块才可以保证系统正常,很容易造成新模块影响原有功能。每次发布需要全部代码重新发布,费事又费力。
2、分布式系统
分布式系统:庞大系统分而治之。
在我的理解中,分布式系统就是一个不断拆分的过程。把一个大整系统分划为多个小的子系统。众多的子系统合在一起便过程整个系统。
一个大的系统拆分为很多小的系统,甚至很多小的服务,然后几个人组成一个小组就专门维护其中一个小系统,或者每个人维护一个小服务。
简单来说,就是分而治之,这样每个人可以专注维护自己的代码。
不同的小系统自己开发、测试和上线,都不会跟别人耦合在一起,可以自己独立进行,非常的方便,大大简化了大规模系统的开发成本。
当然使用分布式,随之也带来了许多问题。
1、使用什么分布式服务框架
不同的子系统或者服务之间互相通信,必须有一套分布式服务框架。dubbo以及spring cloud都可以。
2、分布式事务
一旦你的系统拆分为了多个子系统之后,那么一个贯穿全局的分布式事务应该怎么来实现?
这个你需要了解TCC、最终一致性、2PC等分布式事务的实现方案和开源技术
3、分布式锁
不同的系统之间如果需要在全局加锁获取某个资源的锁定。使用synchronized无法解决问题。
4、分布式缓存
多个子系统,如果要共享一个缓存,需要引入Redis等缓存系统。
5、分布式消息系统
多个子系统之间要进行消息队列的传递,需要引入类似RabbitMQ之类的分布式消息中间件
6、分布式搜索系统
系统里引入一个外部的分布式搜索系统,比如Elasticsearch。
二、什么是RPC
RPC(remote procedure call):远程调用过程。我理解:本质并不是一个技术,只是远程调用的一种方式,我们一般使用的dubbo也可以理解为一种RPC实现。
为什么要用RPC呢?
在早期的项目中,代码全在一个工程中,对于简单的项目来说还好,如果后期涉及的功能增多。涉及订单、物流等多个功能模块,只是简单的一个项目的话,就变得十分糟糕。
那么如果项目具有多个系统,各个系统需要实现相互通讯,哪怎么办呢。一般来说使用RPC框架,如dubbo、Thrift。
三、RPC与HTTP对比
使用什么技术最重要的是看项目适合哪项技术,不是盲目的追求技术。
RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Transfer Protocol,超文本传输协议)他们最本质的区别,就是RPC主要工作在TCP协议之上,而HTTP服务主要是工作在HTTP协议之上,我们都知道HTTP协议是在传输层协议TCP之上的。
RPC=Remote Produce Call 是一种技术的概念名词. HTTP是一种协议,RPC可以通过HTTP来实现,也可以通过Socket自己实现一套协议来实现。
所以本质上用http交互其实就已经属于rpc了。
HTTP优缺点分析
HTTP接口由于受限于HTTP协议,需要带HTTP请求头,导致传输起来效率或者说安全性不如RPC。
http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输。
但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销。
备注:HTTP/1.0中默认使用短连接,也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议
RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统 一化的操作。第三个来说就是安全性。
最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。
四、为什么使用Dubbo
1、Dubbo一款优秀的分布式服务框架
2、Dubbo提供高性能的RPC服务
3、Dubbo具有注册中心、监控中心。