软件架构的演进过程

❶ 单体架构

理解: 全部功能集中地挤在一个项目内。

优点: 架构很简单,开发成本低,开发周期短,因此很适合小型项目。

缺点: 全部功能挤在一起,不利于扩展和维护;单一语言技术栈;系统性能扩展只能靠集群,成本高。

垂直架构

理解: 按照业务,对单体架构进行了基础的切割。

优点: 每个子项目可以使用不同的语言技术栈。

缺点: 几乎没有改良单体架构的缺点,依旧是扩展和维护困难、提高性能只能靠集群,甚至还多了各个子项目之间会耦合的缺点。

SOA架构

理解: 将业务逻辑高度抽象为一个个服务,项目取调用服务

优点: SOA(Service-Oriented Architecture)即面向服务的架构,这一个个服务很好维护和扩展;最重要的,各个服务组件可以进行分布式部署,性能大大提高。

缺点: 这一个个服务的粒度依旧不小,所以依旧有耦合现象。

微服务架构

理解: 一个个微服务非常小,几乎完全独立

优点: 几乎没有耦合,每个微服务各自进行维护、扩展、优化、迭代、分布式,自然效率更高。

缺点: 微服务数量会很大,因此开发和维护的难度会高许多,是对团队的挑战。

从单体/垂直架构到SOA/微服务架构,在性能上有较大的提升,这正是从集群到分布式的变化。怎样理解集群与分布式的区别呢?

举个通俗的例子,一个厨师做菜太慢忙不过来,这是单机;又请来几个厨师同时做菜,这是集群;有的洗菜有的切菜有的炒菜,这是分布式——集群就是通过简单的怼单机数量,来解决单机问题;而分布式是对任务的拆解和结果的归并。

你会发现,抽象出的这一个个服务,与分布式的思想恰好契合。高度抽象,分布部署,正是当今时代的趋势。

简介

Apache Dubbo 是一款高性能的Java RPC框架,且可以与Spring框架无缝集成。

谈一谈对RPC的理解?

RPC全称Remote Procedure Call,即远程过程调用。比如有两台服务器A和B,A上的应用想要调用B上的服务,但是A和B在物理上压根不在一起,更别提在同一内存中,所以直接调用是不可能的;这时便需要通过网络,来传达语义和数据。

需要注意的是,RPC并不是一个具体的技术,而是泛指借助网络进行远程调用的一切手段。各个开发语言都有自己的RPC框架,Java的RPC框架比较多,被广泛使用的就有RMI、Hessian、Dubbo。

简要说一下Dubbo的核心功能有哪些?

面向接口的远程方法调用、智能容错与负载均衡、服务的自动注册和发现。

架构图解

节点角色说明

1)Provider,暴露服务的服务提供者

2)Consumer,调用服务的服务消费者

3)Registry,注册(与订阅)中心

4)Monitor,统计服务调用次数和调用事件的监控中心

5)Container,容器

箭头关系说明

0)加载容器,开启服务提供者

1)提供者在启动时,向注册中心注册自己提供的服务

2)消费者在启动时,向注册中心订阅自己所需的服务

3)注册中心返回给消费者以提供者地址列表,如果有变更,注册中心也会通知消费者

4)消费者根据负载均衡算法,从提供者地址列表中挑选一台提供者进行远程调用

5)在内存中统计调用次数与调用时间,定时每分钟发送一次统计数据给监控中心

新需求

在大规模服务化之前,只是通过RMI、Hessian等工具,简单的暴露服务、一个服务一个URL、并通过F5等硬件进行负载均衡。

当服务越来越多,各个服务的URL管理变得困难。此时需要一个注册中心,动态的注册和订阅服务,使服务透明化。

同时,F5硬件负载均衡器逐渐力不从心。此时还是要借助注册中心,告诉消费者以提供者地址列表,实现软负载均衡和Failover。

当进一步发展,服务器依赖关系变得错综复杂,甚至分不清哪个应用要在哪个应用之前启动。这时,需要自动画出应用间的依赖关系图,以帮助架构师理清关系。这种拓扑关系也是可以由Dubbo来维护的。

接着,服务的容量问题也暴露出来,这个服务需要多少个机器支撑?什么时候该加机器?为了解决这个问题,就是要统计出服务的调用次数和调用时间,作为容量规划的参考指标。

⭐️

【Dubbo】图解Dubbo官方文档相关推荐

  1. dubbo官方文档_不可忽视的Dubbo线程池

    问题描述 线上突然出现Dubbo超时调用,时间刚好为Consumer端设置的超时时间. 有好几个不同的接口都报超时了 第1次调用超时,第2次(或第3次)重试调用非常快(正常水平) Dubbo调用超时的 ...

  2. dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

    狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习.未经作者授权,禁止转载 分布式理论 什么是分布式系统? 在<分布式系统原理与范 ...

  3. OpenCV-Python官方文档学习笔记(上)

    整理自OpenCV-Python官方文档 一. OpenCV-Python Tutorials 1 安装及验证 2 图片读写,展示 3 视频读写,展示 4 绘图功能(绘制几何形状:线.圆.椭圆.矩形. ...

  4. Ant Design 入门-参照官方文档使用组件

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 先来一个按钮组件使用的对比,官方文档的(不能直接用)和实际能用的. 官网demo: import { Tabl ...

  5. 坑爹的微软官方文档:SQL无人值守安装

    我在部署项目的时候,需要用批处理无人值守安装SQLserver,.Net等组件. 于是查了微软官方文档,其中一项内容如下: http://msdn.microsoft.com/zh-cn/librar ...

  6. Tomcat官方文档关于数据源配置的内容

    虽然有网上有网友自己总结的文章,但说明得总是不够清晰,还是参考官方文档理解得比较透彻: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html h ...

  7. python-66:BS4实例--下载BS4官方文档

    2019独角兽企业重金招聘Python工程师标准>>> 前面已经对BS4有了简单的认识和讲解,该讲的都讲了,原本也已经想好了一个实例,但是现在想往后推一推,因为我实在受不了了,我们前 ...

  8. k8s多master建议用几个_Kubernetes 教程之跟着官方文档从零搭建 K8S

    前言 本文将带领读者一起, 参照者 Kubernetes 官方文档, 对其安装部署进行讲解. Kubernetes 更新迭代很快, 书上.网上等教程可能并不能适用于新版本, 但官方文档能. 阅读这篇文 ...

  9. 文件标识符必须为双精度类型的整数值标量_【翻译】VTK官方文档 - vtk文件格式

    本文翻译自vtk官方文档:vtk_file_format 文末有链接 VTK提供了许多源对象和编写器对象,用于读取和写入流行的数据文件格式,此外,VTK也提供了自己的文件格式.创建一种数据文件格式的主 ...

  10. 深入理解Java 8 Lambda表达式(Oracle官方文档版)

    Java 8 问世三年了,9马上也要问世了,所以,嗯,我要开始学8了-- 官方文档:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdae ...

最新文章

  1. android --相机使用详解概述
  2. VC解决error C2065: 'timeGetTime' : undeclared identi
  3. Linux命令:sed
  4. Android热更新方案Robust
  5. zabbix自定义监控
  6. 的优缺点_折叠门的优缺点
  7. PAT:1032. Sharing (25) AC
  8. dbnetlib sqlserver不存在或拒绝访问_部署IIS+PHP+SQL server环境
  9. thinkphp多语言设置
  10. apache poi教程_Apache POI教程
  11. [Reinforcement Learning] 动态规划(Planning)
  12. 【笔记】西门子1200PLC和V90伺服电机连接
  13. 威纶触摸屏与电脑连接_如何将威纶通tk6070ip触摸屏程序上传到电脑里。请大侠讲解具体步骤...
  14. ab st语言编程手册_罗克韦尔ab plc micrologix 1400 编程手册中文高清版 .pdf
  15. MATLAB信号处理---学习小案例(2)---采样定理
  16. 阿里巴巴android开发规范,阿里巴巴开发手册|阿里巴巴Android开发手册 PDF电子版_最火软件站...
  17. 计算机上机模拟试题答案,[计算机类试卷]国家二级VB机试(上机操作)模拟试卷420及答案与解析.doc...
  18. WIN10 禁用 credentital guard Device Guard或Credential Guard与Workstation不兼容
  19. Yolo-v3算法改进-Poly-Yolo-v3
  20. FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介

热门文章

  1. k8s中helm的使用
  2. 拓润服装ERP管理系统
  3. 基于Qt的FreeType字体轮廓解析
  4. 论文笔记:基于深度学习的遥感影像变化检测综述
  5. 7个流行的强化学习算法及代码实现
  6. IT人生知识分享:博弈论的理性思维
  7. linux内核态real cred,Linux内核源码分析 -- 更新当前进程的 cred -- commit_creds
  8. cd28v2虚拟服务器,科技知识:华为荣耀CD28v2路由器初始密码
  9. python中可选参数是什么意思_什么是python的必选参数
  10. 应试教育的困惑,如今得到了解答。