Dubbo之RPC架构

为什么会有dubbo的出现:

  随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

  • 单一应用架构
    • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
    • 此时,用于简化增删改查工作量的  数据访问框架(ORM)  是关键。
  • 垂直应用架构
    • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
    • 此时,用于加速前端页面开发的  Web框架(MVC)  是关键。
  • 分布式服务架构
    • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
    • 此时,用于提高业务复用及整合的  分布式服务框架(RPC)  是关键。
  • 流动计算架构
    • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
    • 此时,用于提高机器利用率的  资源调度和治理中心(SOA)  是关键。

在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。

  (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。

此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。

并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。

  (2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。

  (3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?

为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。

  其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

  以上是Dubbo最基本的几个需求,更多服务治理问题参见:

节点角色说明:

  • Provider:  暴露服务的服务提供方。
  • Consumer:  调用远程服务的服务消费方。
  • Registry:  服务注册与发现的注册中心。
  • Monitor:  统计服务的调用次调和调用时间的监控中心。
  • Container:  服务运行容器。

调用关系说明:

  • 0. 服务容器负责启动,加载,运行服务提供者。
  • 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区域路由的注册机制

AreaRegistration.RegisterAllAreas() 我们新建一个名称为Admin的Area,VS生成下面的代码。 { action , id 我们先来看AreaRegistration这个抽象类,实际上,它只有一个核心功能,就是RegisterAllAreas,获取所有继承它的…

嵌入式Linux系统基础知识

一、嵌入式Linux系统的构成 1、硬件 2、内核 3、应用程序(形成根文件系统) 二、构建嵌入式Linux系统的主要任务 1、内核部分 2、应用程序部分 嵌入式Linux的开发大致可分为三个层次:引导装载内核、构造文件系统和图形用户界面。作为操作系统…

各种排序笔记---基于比较排序部分

1. 选择排序 selection sort 大循环 从左到右每次以一个点开始扫描array 小循环 找到从当前起始点开始的最小值 时间复杂度为O(N^2) //selection sort an array array[] public class Solution {public int[] solve(int[] array) {if (array null || array.length 0) {return…

halcon使用点拟合圆形时候,点集顺序紊乱,不影响圆形拟合效果

read_image (Image, 截图20201226094342972.bmp) * Matching 01: BEGIN of generated code for model initialization set_system (border_shape_models, false) * Matching 01: Obtain the model image * Matching 01: The image is assumed to be made available in the * Ma…

Socket理解。

其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎么复杂,基本上都能够本地代码本地调试,性能也不太重要。(也许这个就是.net的企业级开发的战略吧) 可是来到通讯系统,一切变得困难复杂。原…

多元化时代敏捷软件开发的崛起与传统软件工程的延续

多元化时代敏捷软件开发的崛起与传统软件工程的延续 1.传统软件开发模式 1.1瀑布模型 1.1.1概念 瀑布模型,顾名思义,软件开发的过程如同瀑布飞流一般,自上而下,逐级下落。瀑布模型的核心思想是将问题按照工序进行简化,…

【VMware vSAN 6.6】6.2.启用性能服务:vSAN硬件服务器解决方案

目录 1. 简介 1.1.适用于HCI的企业级存储2. 体系结构 2.1.带有本地存储的服务器2.2.存储控制器虚拟系统套装的缺点2.3.vSAN在vSphere Hypervisor中自带2.4.集群类型2.5.硬件部署选项3. 启用vSAN 3.1.启用vSAN3.2.轻松安装3.3.主动测试4. 可用性 4.1.对象和组件安置4.2.重新构建…

Android eclipse导入项目后出现Unable to resolve target #39;android-17#39;解决方法

eclipse导入项目后出现Unable to resolve target android-17解决方法。在最后附带还有一种编译逻辑不成功情况解决方法。 一、问题情况 二、解决的方法 1、改动项目的目标版本号与当前Android sdk相相应的版本号 2、自己主动修复一下项目 三、这个问题不是上面的。是另外情况&a…

多个圆点,鼠标选取两个,求两个点的距离,用于计算像素尺寸(halcon实现)

read_image (Image, C:/Users/22967/Desktop/晶圆找位置/0.bmp) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region1, max_separability, dark, UsedThreshold) connection (Region1, C…

修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)

Posted on 2011-10-31 10:53 jamiedu 阅读(889) 评论(0) 编辑 收藏 1.1 概述 TI针对DM6467提供的UBOOT和内核默认都是串口0作为调试串口输出的,但现在我需要使用DM6467的UART0的modem功能,所以修改代码,改变调试串口为串口2。 需要修改的主要…

halcon车刀崩边检测

list_files (新建文件夹, files, Files) read_image (Image, Files[0]) dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/1.5, Height/1.5, black, WindowHandle) dev_set_draw (margin) dev_set_colored (12) for Index:0 to |Files…

FFMPEG解码264文件步骤

本文以H264视频流为例,讲解解码流数据的步骤。 为突出重点,本文只专注于讨论解码视频流数据,不涉及其它(如开发环境的配置等)。如果您需要这方面的信息,请和我联系。 准备变量 定义AVCodecContext。如果…

Confluence 6 配置服务器基础地址示例

2019独角兽企业重金招聘Python工程师标准>>> 如果 Confluence 的安装是没有安装在非根目录路径(这个是上下文路径),然后服务器基础 URL 地址应该包括上下文地址。例如,你的 Confluence 正在运行在下面的地址&#xff1…

BootstrapValidator验证

bootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说。 需要引用css: bootstrap.min.css bootstrapValidator.min.css js: jquery-1.10.…

halcon找矩形顶点的一种方法

主程序: read_image (Image11, 11)*画仿射矩形 dev_set_color (green) draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)*生成仿射矩形xld gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2) *找顶点工具(基于卡…

H264关于RTP协议的实现

完整的C/S架构的基于RTP/RTCP的H.264视频传输方案。此方案中,在服务器端和客户端分别进行了功能模块设计。服务器端:RTP封装模块主要是对H.264码流进行打包封装;RTCP分析模块负责产牛和发送RTCP…

华为数通HCIE面试题目解密系列之RSTP边缘端口

以下是华为数通面试考试的一道真题,原题如下; 请举例说明 stp 的 edge port 的作用,用在什么场景,并且使用 edge port 会碰到什么问题,怎么解决和防止? 提到边缘端口,我们是在NP课程的交换部分第一次接触&a…

Django:视图和URL配置

一、视图1.在mysite文件夹下。创建views.py文件(文件名称没有特别的要求);from django.http import HttpResponsedef hello(request):return HttpResponse("Hello world")2.改动mysite文件夹下的urls.py文件;from djang…

u-boot 详细介绍 .

Bootloader 对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。6.1.1 Bootloader介绍Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们…

apicloud使用指南

ApiCloud ApiCloud平台介绍 ApiCloud首页在线教程文档ApiCloud是一个国内的Hybird APP平台,提供Hybird APP一站式开发服务。可以将使用HTML、CSS和JS制作的应用直接编译为能在安卓和IOS平台上运行的APP。另外,其所提供的代码托管和在线编译服务&#xff…