Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。比如公司的管理系统,等等。
优点:这样开发简单,部署也简单,直接打成war包,扔到服务器上。
缺点:扩展性很差。不利于协同开发和维护。等到项目大了变成了几百MB的时候,服务器可能吃不消。
还有就是修改某一个模块代码后,项目得重新打包,放到服务器上运行。
可能还有多台服务器,都得重新打包部署。
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。把大应用分为小应用部署,每个小应用从页面 --> 业务 --> 数据库 都是完整的。如果用户小应用并发高,那么就多放几台服务器。订单小应用访问量少,就少放几台服务器。
优点:分工合作很容易,互不干扰,性能扩展容易,访问量并发高的小应用,比如用户,就多分配几台服务器。
缺点:1、无法分离页面和业务逻辑。每一个应用从头到尾都是包含 页面 --> 业务 --> 数据库,
当公司做活动的时候,需要美化一下页面,弄完都得重新部署。
2、应用之间不可能完全独立,需要交互。有可能以后功能扩展还会有物流应用,支付应用,
那么应用与应用之间肯定会有交互。比如说下单的时候,肯定会查询商品库存,
支付的时候肯定会用到订单的内容。物流又要用订单的信息等等
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。界面和业务逻辑分开部署,单独改界面,就重新部署界面的服务器。
原来web和业务逻辑在一个服务器,那么就在服务器里通信即可,后来分开部署之后,服务之间调用就称为 RPC(Remote Procedure Call )远程过程调用。
分布式架构下,难点就是如何进行远程过程调用以及如何拆分业务,提升业务复用程度。
是不是就高枕无忧呢?
假如 用户应用访问量比较少,但却有100台服务器在跑,访问量比较大的商品业务,却只有10台服务器在跑。这样就造成了资源浪费。那么就应该有一个基于访问压力的调度中心,能实时的监控这些数据,实现动态的调度,提高资源的利用率,给访问量高的应用提高几台服务器,访问量低的应用减少几台服务器。这时候就可以采用流动计算架构。
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
用简单的话来说就是:A服务器的代码 调用 B服务器的代码。
RPC的基本原理图:
核心的关系就是
1、AB之间要建立连接。
2、AB之间传输数据的序列化和反序列化。
而RPC框架的性能也是基于以上两点。
Dubbo的优良特性:
这些说一下服务自动注册与发现。假如一个web页面需要调用业务逻辑,用户/订单/商品/支付都在不同的服务器上,而且每个业务都不止一个服务器。
RPC框架是如何知道用户业务在1,3,5机器上和支付业务在8,9,11机器上呢?
包括某台服务器宕机了,RPC框架是如何知道的呢?
这时候就引入了一种机制叫做:注册中心
为了能动态感知,可以把所有的服务都注册到注册中心中,这个注册中心中就有一个列表清单。描述的是,用户业务在1,3,5机器,订单业务在2,4,6机器上等等,包括哪一台机器宕机挂掉了,注册中心就会把这台机器从这个清单里删除。当web请求的时候,就可以去先问注册中心里,有没有某个业务注册,有的话,就会去访问,可以是按照负载均衡机制去访问,然后与那个服务建立连接,通信数据。
=======================================================
Dubbo还可以实现灰度发布,假如有100台机器部署,灰度发布嘛,有的人微信有视频号,有的人没有,这就是灰度发布。先在20台机器上部署这个功能,然后一部分用户会访问到这20台服务器上,等到这些用户体验了功能之后,反映没有bug之后,慢慢的再扩大过度到在40台机器上部署这个业务,再在所有机器上都部署,这就是灰度发布。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!