垂直应用架构

也叫单体架构。以 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、微服务架构,主要目标是实现新功能、并可以快速拓展开发团队。

参考资料

Java应用架构演变史的更多相关文章

  1. [转载]大型网站应用中 MySQL 的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  2. 大型网站应用中MySQL的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  3. 窥探QQ基础数据库架构演变史

    作为腾讯最核心最基础的后台服务之一,QQ基础数据库是存储QQ用户帐户信息和关系链信息的海量集群,它承载了百万级每秒的访问量.十亿级的账户数.百亿级关系链.如此大规模的集群,它是如何从300万的数量级一 ...

  4. 从100PV到1亿级PV网站架构演变

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不 ...

  5. 浅谈JavaWeb架构演变

    一  JavaWeb架构演变 在java架构模式中,我们可以将MVC架构模式抽象为如下结构: 1.View层.View层即UI层,可采用的技术如JSP,Structs,SpringMVC等 2.Con ...

  6. [转载]从100PV到1亿级PV网站架构演变

    原文地址:http://www.uml.org.cn/zjjs/201307172.asp 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有 ...

  7. 从单一WAR到多活, 记述一个创业公司的架构演变

    从单一WAR到多活, 记述一个创业公司的架构演变 本故事纯属虚构,如有雷同,实属巧合 程 是一个爱折腾,喜欢交朋友的程序员. 某一天,程一个朋友介绍了另外一个朋友 创 给他,创说他有个点子,可以改变世 ...

  8. 从100PV到1亿级PV网站架构演变(转)

    http://www.linuxde.net/2013/05/13581.html 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有共同的原 ...

  9. 电商系统的演变可以看出架构演变 Dubbo入门 远程过程调用 需要解决的问题

    Dubbo入门---搭建一个最简单的Demo框架 - CSDN博客 https://blog.csdn.net/noaman_wgs/article/details/70214612 Dubbo背景和 ...

  10. 从100PV到1亿级PV站点架构演变

    假设你对项目管理.系统架构有兴趣,请加微信订阅号"softjg".增加这个PM.架构师的大家庭 一个站点就像一个人,存在一个从小到大的过程. 养一个站点和养一个人一样.不同一时候期 ...

随机推荐

  1. 使用axios发送请求的几种方式

    1.是什么? axios 它的底层是用了 XMLHttpRequest(xhr)方式发送请求和接收响应,xhr 相对于之前讲过的 fetch api 来说,功能更强大,但由于是比较老的 api,不支持 ...

  2. 【最佳实践】京东小程序-LBS业务场景的性能提升

    一.前言 1.1 京东LBS门详业务介绍 京东LBS门详目前已经支持了仓网.药急送.天选.小时达POP多种业务,并且具备了多端的能力,一套代码可以在京东app.健康app.微信小程序中运行,一定程度上 ...

  3. 【开源项目推荐】OpenMetadata——基于开放元数据的一体化数据治理平台

    大家好,我是独孤风. 这几年数据治理爆火,但迟迟没有一个优秀的开源数据治理平台的出现.很多公司选择元数据管理平台作为基础,再构建数据质量,数据血缘等工具. 今天为大家推荐的开源项目,是一个一体化的数据 ...

  4. C# 输出的格式转换,占位/补位,字符串拼接、字符串内插法

    // "0"描述:占位符,如果可能,填充位           Console.WriteLine(string.Format("{0:000000}", 12 ...

  5. 构建健康游戏环境:DFA算法在敏感词过滤的应用

    现在的游戏有敏感词检测这一点,相信大家也不陌生了,不管是聊天,起名,签名还是简介,只要是能让玩家手动输入的地方,一定少不了敏感词识别,至于识别之后是拒绝修改还是星号替换,这个就各有各的做法了,但是绕不 ...

  6. 开源、强大的Linux服务器集群管理工具,比宝塔好用!

    在这之前肯定很多人都接触过Linux管理面板:宝塔,宝塔的确非常方便而且好用,安装也简单,复制粘贴几句命令即可安装完成,且提供免费版.今天呢,民工哥向大家介绍另一个Linux的服务器管理面板--App ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (174)-- 算法导论13.3 3题

    三.用go语言,假设图13-5 和图13-6 中子α.β.γ.δ和ε的黑高都是k.给每张图中的每个结点标上黑高,以验证图中所示的转换能保持性质 5. 文心一言: 在Go语言中,你可以通过以下步骤来为图 ...

  8. JavaScript 常见错误与异常处理

    一.为什么要了解常见JS错误 1.调试和故障排除: 了解常见的JavaScript错误可以帮助你更好地调试和故障排除代码.当你遇到错误时,能够快速识别错误类型并找到解决方法,可以节省大量的时间和精力. ...

  9. 如何实现gif格式图片倒放效果?

    不知道大家看电影的时候有没有发现出现过这样的一个神奇场景: 一个子弹竟然从远处飞回到手枪中,整个场景呈现一种时空倒流的感觉? 正文 先来几个有趣的倒放动图娱乐一下~ 猫:我谢谢你们全家 萌娃快乐针 尊 ...

  10. HDU 4893 线段树延迟标记

    原题链接 题意 初始有一长度为n,全为0的序列 每次我们可以对这个序列进行三种操作: 1.将某个位置的数加上d 2.输出某个区间的和 3.将某个区间内每个数字变为与其最接近的斐波那契数,如果有两个最相 ...