作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。
热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。
2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人
InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家
如果此文还不错的话,还请关注、点赞、收藏三连支持一下博主~
文末获取联系 精彩专栏推荐订阅收藏
专栏系列(点击解锁)
学习路线(点击解锁)
知识定位
Redis从入门到精通与实战
Redis从入门到精通与实战
围绕原理源码讲解Redis面试知识点与实战
MySQL从入门到精通
MySQL从入门到精通
全面讲解MySQL知识与企业级MySQL实战 计算机底层原理
深入理解计算机系统CSAPP
以深入理解计算机系统为基石,构件计算机体系和计算机思维
Linux内核源码解析
围绕Linux内核讲解计算机底层原理与并发
数据结构与企业题库精讲
数据结构与企业题库精讲
结合工作经验深入浅出,适合各层次,笔试面试算法题精讲
互联网架构分析与实战
企业系统架构分析实践与落地
行业最前沿视角,专注于技术架构升级路线、架构实践
互联网企业防资损实践
互联网金融公司的防资损方法论、代码与实践
Java全栈白宝书
精通Java8与函数式编程
本专栏以实战为基础,逐步深入Java8以及未来的编程模式
深入理解JVM
详细介绍内存区域、字节码、方法底层,类加载和GC等知识
深入理解高并发编程
深入Liunx内核、汇编、C++全方位理解并发编程
Spring源码分析
Spring核心七IOC/AOP等源码分析
MyBatis源码分析
MyBatis核心源码分析
Java核心技术
只讲Java核心技术
本文目录
本文导读
一、应用架构演进过程
1、单体应用-J2EE
2、单体应用-MVC
3、分布式应用-SOA
4、分布式应用-微服务
5、分布式应用-云原生
二、什么是Dubbo
1、Dubbo发展历史
2、Dubbo能做什么?
3、Dubbo核心概念和架构
总结
本文分析了应用架构演进过程,任何一门技术都是演进而来,单体应用J2EE和MVC,分布式应用SOA、微服务到云原生,引出Dubbo发展历史,Dubbo能做什么?什么是Dubbo?以及Dubbo核心概念和架构。
J2EE使用多层分布式应用程序模型,其中应用程序逻辑根据功能划分为组件,每个应用程序组件根据其层分布在不同的机器上。事实上,Sun公司设计J2EE的初衷是解决两层模式(客户机/服务器)的缺点。
在传统模式下,客户承担了太多的角色,显得臃肿。在这种模式下,第一次部署相对容易,但很难升级或改进,可扩展性不理想,而且通常基于专有协议,通常是数据库协议。这使得重用业务逻辑和接口逻辑变得非常困难。
目前J2EE的多层企业应用模型将两层模型中的不同层划分为许多层,多层应用程序可以为每个不同的服务提供一个独立的层,
MVC设计模式有着悠久的历史。它的变化至少从SmallTalk的早期就已经出现了。它侧重于应用程序的全局体系结构,并根据对象在应用程序中的一般角色对对象进行分类。它也是由其他几个更基本的设计模式组成的复合设计模式。
MVC设计模式识别三种不同类型的对象:Model、View和Controller。MVC模式定义了这些类型的对象在应用程序中所扮演的角色以及它们之间的交互。设计应用程序时,主要步骤是选择或创建属于这三个组之一的自定义类。这三种类型的对象由抽象边界分隔,并与其他类型的跨越边界的对象进行通信。
模型(Model):负责存储系统的中心数据;视图(View):向用户显示信息(可以定义多个视图);控制器(Controller):处理用户输入信息。它负责从视图中读取数据,控制用户输入,并将数据发送到模型,是应用程序中处理用户交互的部分。负责管理和控制用户交互。
SOA(Service-Oriented Architecture)的全名是面向服务的体系结构。它可以根据需求通过网络以分布式方式部署、组合和使用松散耦合的粗粒度应用程序组件(服务)。服务通常以独立的形式存在于操作系统进程中。
从功能的角度来看,将业务逻辑抽象为可重用和可组合的服务,并通过服务编排实现快速的业务再生。目标是将原来固有的业务功能转换为通用的业务服务,实现业务逻辑的快速重用。从上面的描述中可以看出,SOA具有以下特点:分布式、可重用、灵活扩展和松耦合
SOA体系结构,随着垂直应用程序越来越多,应用程序之间的交互是不可避免的。核心业务被提取为独立服务,逐渐形成稳定的服务中心,使前端应用能够更快地响应不断变化的市场需求。
为了解决早期SOA中的各种问题,微服务架构近年来进行了进一步的进化,逐渐形成了更细粒度的微服务架构。在微服务架构中,应用程序被划分为独立、可配置、可运行和可维护的子服务,极大地促进了服务重用,并通过不同的服务编排方法快速生成新的业务逻辑。微服务和SOA是一脉相承的,SOA的理念依然有效,并在微服务中得到升华。但微服务和SOA之间仍然存在一些差异。
不同的目的。ESB更加强调业务流程的编排和历史应用程序的集成。微服务使用一系列小服务来实现整个流程,可以有效地拆分服务,实现敏捷的部署和交付。
服务的粒度各不相同。微服务被拆分成更小的部分,从而可以方便地重用服务和编排新的业务逻辑。SOA通常是一个粗粒度的分区。
协议的差异。微服务通常是统一的交互协议,如HTTP和自定义协议,很难与旧系统兼容。
云原生(CloudNative)是一种构建和运行应用程序的方法,它是一种技术系统和方法论。云(Cloud)+原生(Native)Cloud表示应用程序位于云中,而Native表示应用程序从一开始就考虑了云环境,为云原生设计的,在云上以最佳姿态运行,充分利用和利用了云平台的灵活性和分布式优势。
云原生可以概括为四个关键点:DevOps+持续交付+微服务+容器。总之,符合云原生架构的应用程序应采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,以敏捷的方法和DevOps支持持续迭代和运营自动化,并利用云平台设施实现弹性扩展、动态调度,优化资源利用。
微服务:几乎所有云原生定义都包括微服务。微服务的反面是单一应用程序。微服务有一个理论基础,即指导如何细分服务的康威定律。它非常神秘。任何可以被称为理论定律的东西都不能简单地理解,否则就完全无关紧要了。它大致意味着组织结构决定了产品形式,不知道它是否与马克思影响生产力的生产关系有关。微服务架构的优势在于,根据功能切换后,服务解耦,更有凝聚力,更容易更改;另一种划分服务的技术据说是基于DDD的。
容器化:Docker是应用最广泛的容器引擎,广泛应用于思科和谷歌等公司的基础设施中。它基于LXC技术,为微服务提供实现保障,起到应用隔离的作用。K8S是一个容器编排系统,用于容器管理和容器之间的负载平衡。它是由谷歌开发的,Docker和K8S都是用Go编写的,这是一件好事。
DevOps:这是一个组合术语,Dev+Ops,指的是开发、运营和维护的集成。与开发和产品不同,DevOps经常会遇到彼此。事实上,DevOps还应该包括测试。DevOps是一种敏捷的思维方式、一种沟通文化和一种为云原生提供持续交付能力的组织形式。
持续交付:持续交付是指开发不拖延,更新不停歇,小步快跑,反对传统的瀑布式开发模式。这需要开发版本和稳定版本的共存,这实际上需要大量的流程和工具支持。
Apache Dubbo是一个RPC服务开发框架,用于解决微服务架构下的服务治理和通信问题。通过利用Dubbo提供的丰富的服务治理功能,可以实现服务发现、负载平衡和流量调度等服务治理需求。
Apache Dubbo最初是为了解决阿里内部的微服务架构问题而设计和开发的。在过去的十年里,它被广泛应用于公司内部的许多业务系统中。
2008年,阿里就向开源社区捐赠了Dubbo,这很快成为中国选择开源服务框架的事实上的标准框架,并在行业中得到了广泛应用。
2017年,Dubbo正式捐赠给Apache软件基金会,成为Apache顶级项目,开启了新的征程。Dubbo已被证明能够满足企业的大规模微服务实践,并有效降低微服务建设的开发和管理成本。阿里、工行、平安、携程等社区用户,通过多年的规模化生产环境流量,充分验证了Dubbo的稳定性和性能。
微服务的编程范例和工具:Dubbo支持基于IDL或特定语言方法的服务定义,提供各种形式的服务调用(如同步、异步、流等)
高性能RPC通信:Dubbo帮助解决微服务组件之间的通信问题,提供基于HTTP、HTTP/2、TCP的各种高性能通信协议实现,并支持串行化协议扩展,以解决网络连接管理和数据传输等基本问题。
微服务监控和治理:Dubbo提供的服务发现、动态配置、负载平衡、流量路由等基础组件可以有效地帮助解决微服务基础实践的问题。此外,您还可以使用管理控制台监控微服务的状态,并通过周围的生态系统实现限流降级、数据一致性和链接跟踪等功能。
在多个环境中部署:Dubbo服务可以直接部署在各种体系结构中,如容器、Kubernetes和Service Mesh。
根据抽象架构,它分为两层:服务治理抽象控制面和Dubbo数据面。
服务治理控制表面:服务治理控制表面并不是专门指注册中心等单个特定组件,而是Dubbo治理系统的抽象表达。控制包括协调服务发现的注册表、流量控制策略、Dubbo管理控制台等。如果采用service Mesh架构,它还包括Istio等服务网格控制表面。
Dubbo数据面:数据平面表示集群中部署的所有Dubbo进程,进程之间通过RPC协议实现数据交换。Dubbo定义了微服务应用程序开发和调用规范,并负责完成数据传输编码和解码工作。服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程;服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程。
本文分析了应用架构演进过程,任何一门技术都是演进而来,单体应用J2EE和MVC,分布式应用SOA、微服务到云原生,引出Dubbo发展历史,Dubbo能做什么?什么是Dubbo?以及Dubbo核心概念和架构。