首页 > 编程语言 >Java应用架构演变史

Java应用架构演变史

时间:2023-06-02 15:57:01浏览次数:38  
标签:SOA 调用 服务 RPC Java 应用 架构 演变史

垂直应用架构

以MVC的垂直架构举例,MVC 架构通常分为3层,展示层、控制层、模型层。通常基于 MVC架构开发的应用代码会打成一个 war 包,部署在 Tomcat 等 Web容器中。不同的业务模块间通过本地 API进行调用,基本不存在跨进程的远程服务调用。

垂直应用架构面临的挑战:

  1. 复杂应用的开发和维护成本变高,部署效率逐渐降低。每次部署都要编译整个应用。
  2. 系统可靠性变差。高流量导致系统压力升高,单点故障服务器宕机,即使是集群也会由于单点故障导致流量集中,同样面临崩溃问题。
  3. 维护和定制困难。由于功能越来越复杂,已有垂直架构模式下无法对复杂的业务进行拆分,代码修改牵一发而动全身。
  4. 新功能上线周期变长。(1)公共 API 变更导致测试工作激增。(2)新特性无法独立部署和交付。

当垂直应用越来越多,应用之间交互不可避免,将核心业务和公共 API 抽取出来,作为独立的服务,供其他调用者消费,实现服务的共享和重用,降低了开发和运维的成本。应用拆分之后会按照模块独立部署,接口调用由本地 API 变为跨进程的远程方法调用,此时 RPC框架应运而生。

RPC

RPC(Remote Procedure Call)是一种进程间通信方式,允许像调用本地服务一样调用远程服务,它的具体实现方式可以不同。

RPC 框架原理:

RPC 框架的目的是让远程过程调用更简单、透明,让开发者只用关心谁在什么位置提供了远程服务接口即可,不用关心通信细节和调用过程。

RPC 框架的核心技术点:

  1. 远程服务提供者需要以某种形式提供服务调用相关的信息,如服务接口定义,数据结构。
  2. 远程代理对象:服务调用者调用的服务实际是远程服务的本地代理,对于Java则使用的是JDK的动态代理,通过动态代理的拦截机制,将本地调用封装为远程服务调用。
  3. 通信协议。
  4. 序列化:远程通信需要将对象转换为二进制码进行网络传输,不同的序列化框架的性能会不同。

一个优秀的RPC框架,内部一定会有其他辅助的基础设施来支持分布式服务管理、服务自动发现、和服务治理。单纯的RPC并不是完整的分布式服务框架。

SOA

SOA,面向服务的架构,是一种粗粒度、松耦合的以服务为中心的架构。

MSA

微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。

简单的说就是,将一个系统按业务划分成多个子系统,每个子系统都是完整的,可独立运行的,子系统间的交互可通过HTTP协议进行通信(也可以采用消息队列来通信,如 RocketMQ,Kafka 等)。

所以,不同子系统可以使用不同的编程语言实现,使用不同的存储技术。但是,因为子系统服务数量越多,管理起来越复杂,因此需要采用集中化管理,例如Eureka,Zookeeper等都是比较常见的服务集中化管理框架;同时,使用自动化部署(如Jenkins)减少人为控制,降低出错概率,提高效率。

微服务的特点:

  • 解耦:同一系统内的服务大部分可以被解耦。因此应用,作为一个整体,可以轻易地被构建、修改和扩展。
  • 组件化:微服务可以被看成相互独立的组件,这些组件可以被轻易地替换和升级。
  • 单一业务能力:微服务很小,它们可以专注于某种单一的能力。
  • 自治:开发者和团队可以独立地工作,提高开发速度。
  • 持续交付:允许持续发布软件新版本,通过系统化的自动手段来创建、测试和批准新版本。
  • 职责明确:微服务不把应用看成一个又一个的项目。相反,它们把应用当成了自己需要负责的项目。
  • 去中心化管理:关注于使用正确的工具来完成正确的工作。这也就是说,没有标准化的方式或者技术模式。开发者们有权选择最好的工具来解决问题。
  • 敏捷性:微服务支持敏捷开发。任何新功能都可以被快速开发或丢弃。

微服务的优势:

  • 独立开发:基于各个微服务所独有的功能,它们可以被轻易开发出来。
  • 独立部署:基于它们所提供的服务,它们可以被独立地部署到应用中。
  • 错误隔离:即便其中某个服务发生了故障,整个系统还可以继续工作。
  • 混合技术栈:可以使用不同的语言和技术来为同一个应用构建不同的服务。
  • 按粒度扩展:可以根据需求扩展某一个组件,不需要将所有组件全部扩展。

SOA和微服务的区别

一、架构划分不同
1、SOA强调按水平架构划分为:前、后端、数据库、测试等;
2、微服务强调按垂直架构划分,按业务能力划分,每个服务完成一种特定的功能,服务即产品。

二、技术平台选择不同
1、SOA应用倾向于使用统一的技术平台来解决所有问题;
2、微服务可以针对不同业务特征选择不同技术平台,去中心统一化,发挥各种技术平台的特长。

三、系统间边界处理机制不同
1、SOA架构强调的是异构系统之间的通信和解耦合;(一种粗粒度、松耦合的服务架构);
2、微服务架构强调的是系统按业务边界做细粒度的拆分和部署。

四、主要目标不同
1、SOA架构,主要目标是确保应用能够交互操作;
2、微服务架构,主要目标是实现新功能、并可以快速拓展开发团队。

标签:SOA,调用,服务,RPC,Java,应用,架构,演变史
From: https://www.cnblogs.com/cloudrich/p/17451995.html

相关文章

  • java中 static 关键词
    在Java中,static是一个关键字,可以用于变量、方法和代码块上。1.静态变量(staticvariable)静态变量是被声明为static的变量。它属于类,而不是属于任何一个对象的。因此,无论创建了多少个类的对象,静态变量只有一份拷贝,所有对象共享同一个静态变量。静态变量可以通过"类名.变量名"的方......
  • Java入门讲解之EditPlus的安装与配置
    正好在学习java,使用到EditPlus软件,跟大家分享一下editplus的安装与配置过程:也可以直接看视频安装,B站上动力节点老杜的Java17版入门教程,详细讲了关于Editplus的安装配置学习地址:https://www.bilibili.com/video/BV1ig4y1c7kPEditPlus的安装与配置为什么不建议初学者一开始就用......
  • eclipse集成Java性能分析神器JProfiler
    JProfiler是一款功能强大的Java开发分析工具,能帮助从事编程工作的朋友们分析你们的代码数据,确定内存泄漏并了解线程问题。1、下载JProfilerhttps://www.ej-technologies.com/download/jprofiler/files可以根据系统位数选择具体版本的JProfiler2、安装JProfiler下载绿色版本JPro......
  • 架构师提升思考力的建议
    架构师该如何通过独立思考来最大化自己的增值呢?1、架构师的思维定势指的是架构师在思考过程中的基本假设。从某种角度来说,思维定势就是你选择相信什么,或者说你在架构师的生涯中坚信和奉行的那些“主义”。比如整个经济学就建立在“人是理性的”这个基本假设之上。这些“主义”不是......
  • Java Properties类
    Properties处理两种行,自然行和逻辑行。逻辑行:用反斜线在一行的末尾,会和相邻的下一行形成逻辑行,如下org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration自然行就是以\n or \r or \r\n结尾......
  • JAVA爬数据也是杠杠的,爬下杜大哥
    上篇分析的网站是国家级,没有真正编写代码爬取对应的数据,今天以“1药网”为例来爬一爬药品数据https://www.111.com.cn/1、分析网站进入网站首页2、点击一下“所有商品分类”,对应的网站地址如下https://www.111.com.cn/categories/先爬取所有的“分类”,然后在根据“分类”获取......
  • JAVA通过oshi获取系统和硬件信息
    JAVA通过oshi获取系统和硬件信息 一、引入jar包本项目主要使用第开源jar包:https://github.com/oshi/oshi<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</vers......
  • Java+Js实现文件下载
    Maven依赖<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.0</version></dependency>页面<!DOCTYPEhtml><......
  • Java进行内存泄露​ GC 分析都有哪些常用好用的工具
    使用Java语言开发应用程序,虽然JVM帮我们进行了GC收集、清除工作;但是使用不当的话,还是会导致某些对象常驻堆空间无法给垃圾收集器清除,导致内存泄露、内存溢出等情况,今天盘点一下在项目中进行内存泄露分析和GC分析的一些常用、好用的工具。0x01:JDK自带工具在处理内存泄露方面JDK本身......
  • Jmeter:Beanshell调用java代码的三种方式
    阅读文本大概需要3分钟。0x01:BeanShell控制界面介绍每次调用前重置bsh.Interpreter:可以选择True和False。如果此选项为True,则将为每个取样器重新创建解释器。传递给BeanShell的参数(=>StringParametersandString[]bsh.args):传递给BeanShell脚本的参数,参数存在以下变量中。Param......