单体到微服务架构服务演化过程

news2024/9/29 17:43:11

架构服务化

聊聊从单体到微服务架构服务演化过程

单体分层架构

在 Web 应用程序发展的早期,大部分工程是将所有的服务端功能模块打包到单个巨石型(Monolith)应用中,譬如很多企业的 Java 应用程序打包为 war 包,最终会形成如下的架构:

alt

巨石型应用易于搭建开发环境、易于测试、易于部署;其缺陷也非常明显,无法进行局部改动与部署,编译时间过长,回归测试周期过长,开发效率降低等。集中式架构分为标准的三层:数据访问层、服务层和 Web 层。

在 Web2.0 时代刚刚流行的时候,互联网应用与企业级应用并没有本质的区别,集中式架构分为标准的三层:数据访问层、服务层和 Web 层。

  • 数据访问层用于定义数据访问接口,实现对真实数据库的访问;
  • 服务层用于对应用业务逻辑进行处理;
  • Web 层用于处理异常、逻辑跳转控制、页面渲染模板等。

面向服务架构 - SOA

SOA(Service-Oriented Architecture) 面向服务架构,是在互联网应用规模迅速增长,集中式架构已无法做到无限制地提升系统的吞吐量的背景下,产生的涉及模块化开发、分布式扩展部署等相对宽泛的概念。

SOA 是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。SOA 中的接口独立于实现服务的硬件平台、操作系统和编程语言,采用中立的方式进行定义。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是 SOA 的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。

实施 SOA 的关键目标是实现企业 IT 资产的最大化作用。要实现这一目标,就要在实施 SOA 的过程中牢记以下特征:可从企业外部访问、随时可用、粗粒度的服务接口分级、松散耦合、可重用的服务、服务接口设计管理、标准化的服务接口、支持各种消息模式、精确定义的服务契约。

alt

服务消费者(Service Consumer)可以通过发送消息来调用服务,这些消息由一个服务总线(Service Bus)转换后发送给适当的服务实现。这种服务架构可以提供一个业务规则引(Business Rules Engine),该引擎容许业务规则被合并在一个服务里或多个服务里。这种架构也提供了一个服务管理基础(Service Management Infrastructure),用来管理服务,类似审核,列表(billing),日志等功能。此外,该架构给企业提供了灵活的业务流程,更好地处理控制请求(Regulatory Requirement),例如 Sarbanes Oxley(SOX),并且可以在不影响其他服务的情况下更改某项服务。

由于分布式系统十分复杂,因此产生了大量的用于简化分布式系统开发的分布式中间件和分布式数据库,服务化的架构设计理念也被越来越多的公司所认同。如下是 Dubbo 官方文档公布了一张有关 SOA 系统演化过程的图片:

alt

微服务架构 - Microservices

微服务(Microservices Architecture Pattern)由 Martin Fowler 在 2014 年提出的,是希望将某个单一的单体应用,转化为多个可以独立运行、独立开发、独立部署、独立维护的服务或者应用的聚合,从而满足业务快速变化及分布式多团队并行开发的需求。如康威定律(Conway’s Law)所言,任何组织在设计一套系统(广义概念)时,所交付的设计方案在结构上都与该组织的通信结构保持一致,微服务与微前端不仅仅是技术架构的变化,还包含了组织方式、沟通方式的变化。

alt

对于微服务,不同背景的人也有不同的见解,对于熟悉 SOA 的开发者,微服务也可以认为是去除了 ESB 的 SOA 的一种实现方案;ESB 是 SOA 架构中的中心总线,设计图形应该是星形的,而微服务是去中心化的分布式软件架构。SOA 更多强调重用,而微服务偏向于重写。SOA 偏向水平服务,微服务偏向垂直服务;SOA 偏向自上而下的设计,微服务偏向自下而上的设计。

alt

微服务与微前端原理和软件工程,面向对象设计中的原理同样相通,都是遵循单一职责(Single Responsibility)、关注分离(Separation of Concerns)、模块化(Modularity)与分而治之(Divide & Conquer)等基本的原则。从巨石型应用到微服务的衍化也并非一蹴而就,如下图也演示了简单的渐进式替代过程:

alt
alt

云原生架构 - Cloud Native

云原生是通过构建团队、文化和技术,利用自动化和架构来管理系统的复杂性和解放生产力。 — Joe Beda,Heotio CTO,联合创始人

alt

Pivotal 是云原生应用的提出者,并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者。早在 2015 年 Pivotal 公司的 Matt Stine 写了一本叫做迁移到云原生应用架构的小册子,其中探讨了云原生应用架构的几个主要特征:符合 12 Factors 应用、面向微服务架构、自服务敏捷架构、基于 API 的协作以及抗脆弱性。2015 年 Google 主导成立了云原生计算基金会(CNCF),起初 CNCF 对云原生(Cloud Native)的定义包含以下三个方面:应用容器化、面向微服务架构、应用支持容器的编排调度。

alt

云原生应用程序简单地定义为从头开始为云计算架构而构建应用程序;这意味着,如果我们将应用程序设计为预期将部署在分布式、可扩展的基础架构上,我们的应用程序就是云原生的。随着公共云将承载越来越多的算力,未来云计算将是主流的 IT 能力交付方式,CNCF 也对云原生进行了重新定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用;云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。

  • Codeless 对应的是服务开发,实现了源代码托管,你只需要关注你的代码实现,而不需要关心你的代码在哪,因为在整个开发过程中你都不会感受到代码库和代码分支的存在。
  • Applicationless 对应的是服务发布,在服务化框架下,你的服务发布不再需要申请应用,也不需要关注你的应用在哪。
  • Serverless 对应的则是服务运维,有了 Serverless 化能力,你不再需要关注你的机器资源,Servlerless 会帮你搞定机器资源的弹性扩缩容 这些技术组合搭配,能够构建容错性好、易于管理和便于观察的松耦合系统;再结合可靠的自动化手段,云原生技术能够使工程师轻松地对系统作出频繁和可预测的重大变更。由此可见,云原生是保障系统能力灵动性地有效抓手;云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。微服务架构非常适合云原生应用程序;但是,云原生同样存在着一定的限制,如果你的云原生应用程序部署在 AWS 等公有云上,则云原生 API 不是跨云平台的。
alt

云原生应用的关键属性包括了:使用轻量级的容器打包、使用最合适的语言和框架开发、以松耦合的微服务方式设计、以 API 为中心的交互和协作、无状态和有状态服务在架构上界限清晰、不依赖于底层操作系统和服务器、部署在自服务、弹性的云基础设施上、通过敏捷的 DevOps 流程管理、自动化能力、通过定义和策略驱动的资源分配。云原生是分布式应用当下重要的发展路径,其终态应当是 Distributionless,所有与分布式相关的问题由云平台解,分布式应用的开发会跟传统应用的开发一样方便,甚至更加便捷。

本文由 mdnice 多平台发布

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

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

相关文章

软文代发高效率推广方式解析-华媒舍

在这个时代,软文代发成为了一种非常实用的推广方法。如何有效地开展软文代发营销推广,并不是每个人都知道的。下面我们就以高效软文代发推广方式大曝光为主线,为书友详细介绍科谱有关的内容。 一、什么叫软文代发 软文代发是指由企业或个人必…

引入 LangChain4j 来简化 LLM 与 Java 应用程序的集成

作者:来自 Elastic David Pilato LangChain4j 框架于 2023 年创建,其目标如下: LangChain4j 的目标是简化将 LLM 集成到 Java 应用程序的过程。 LangChain4j 提供了一种标准方法: 根据给定内容(例如文本)创…

VSCode编程配置再次总结

VScode 中C++编程再次总结 0.简介 1.配置总结 1.1 launch jsion文件 launch.json文件主要用于运行和调试的配置,具有程序启动调试功能。launch.json文件会启用tasks.json的任务,并能实现调试功能。 左侧任务栏的第四个选项运行和调试,点击创建launch.json {"conf…

AI变现N种方式,新手小白必看!【保姆级教程】

风口!风口!风口! 终于不用再抱怨 “我们这代人啊,什么也没赶上” 因为我们现在正处于风口之上! 在当今数字化的时代 AI 绘画正以惊人的速度崛起 并向各行各业渗透 既然阻止不了时代的变化 那就让它为我们所用 …

打造高业绩朋友圈:策略与实践

在数字化时代,朋友圈不仅是个人生活的展示窗口,更是商业变现的有力平台。许多人通过精心经营朋友圈,实现了财富的增长,甚至达到了年入百万的惊人业绩。朋友圈已成为普通人实现逆袭的重要战场。 要打造一个业绩过万的朋友圈&#…

微积分入门(真的很入门)

前置知识 前置知识:极限 我们要求 lim ⁡ x → 1 x 2 − 1 x − 1 \lim\limits_{x \to 1}\dfrac{x^2-1}{x-1} x→1lim​x−1x2−1​。 右边我们都知道是什么意思,那左边是什么呢? 意思就是,当 x x x 无限接近 1 1 1 时&…

Java IO 和 NIO

在 Java 编程中,输入输出(IO)是不可或缺的部分,随着技术的发展,Java 的 IO 系统也经历了显著的变化。本文将深入探讨 Java IO 和 NIO 的历史、优缺点以及适用场景。 1. Java IO 的历史 Java IO 包(java.i…

JVM和GC监控技术

一、监控技术简介 JVM是什么?项目里面有JVM吗?JVM跟Tomcat有什么关系?为什么需要去分析JVM? 1. JVM(全称:Java Virtual Machine),Java虚拟机 是Java程序运行的环境,它是一个虚构的计算机&…

盛世欢歌,共庆华诞!祝大家国庆节快乐!

举国同庆 盛世中华 盛世欢歌,共庆华诞!在这美好的时光里,让我们一起欢庆国庆,感受祖国的强大和美好。数图祝大家国庆快乐! 国庆来临之际,根据国家有关规定,现将2024年国庆放假安排通知如下&…

JVM(HotSpot):虚拟机栈(JVM Stacks)与本地方法栈(Native Method Stacks)

文章目录 一、内存结构图二、数据结构-栈三、JVM栈四、本地方法栈五、问题辨析1、垃圾回收是否涉及栈内存?2、栈内存越大越好吗?3、方法内的局部变量是否线程安全?4、栈内存溢出问题 一、内存结构图 二、数据结构-栈 数据结构中,…

windows 系统服务在注册表中的位置

计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services 此注册表项下是系统服务安装信息 利用此注册表项可以获取服务详细信息

新版Android Studio Koala 导入github第三方依赖 maven仓库的处理方法 (java版)

以下是依赖的处理 这是由于Android Studio 构建项目模式发生改变了。 旧版项目构造 创建新的项目采用build.gradle.kts配置。 先看旧版同样的配置是什么样的。 再来查看新版带.kts后缀文件官方自带的库是怎么配置,模拟配置就OK。 先看libs文件这个库的写法。 …

隐藏SpringBoot自动生成的文件

第一种方法——删除 第二种方法——Settings——Editor——fail types

题库系统平台开发功能解析

题库系统开发功能介绍可以从多个方面进行阐述,以下是一些核心功能及其详细解释 1. 题库管理系统 题目录入与编辑:提供灵活的题目录入方式,支持手动输入、批量导入(如从Excel、Word等文件中导入)以及从其他题库中复制试…

HuggingChat macOS版正式发布!文章内附体验地址!我国打造糖尿病专用AI模型|AI日报

文章推荐 全新豆包AI视频模型发布!实测下的可灵与豆包!原来它们的差距不止一点点... 今日热点 我国团队打造糖尿病专用AI模型 上海交通大学清源研究院MIFA实验室携手复旦大学附属中山医院内分泌科,组建专家团队,联手开发一款名…

Spring Boot项目连接Oracle数据库启动报错:Undefined Error

描述:远程拉下来的代码,配置了maven仓库后,未进行其他修改,自己本地启动报错。 报错现状: 解决:添加参数-Duser.nameuser后,启动成功。 原因分析: 分析一: maven仓…

Altium Designer脚本系统内置函数汇总(2417个)

Altium Designer脚本系统内置函数汇总(2417个) ↑↑↑点击上方蓝字,关注我们! Altium Designer 2013脚本系统内置函数,一共2417个。 这些函数名称复制到Altium Designer 2013脚本编辑器中会自动变为褐红色(#800000),内部函数大部分…

跨境必备:3个必不可少的低预算营销渠道

不管是跨境电商卖家还是外贸从业人员,从个体到企业或品牌,流量都是宣传营销领域的重点。有流量才能让更多的消费者看到自己的产品,从而有机会了解产品并促成转化。 各大跨境电商平台、社交媒体平台和搜索引擎等平台都提供了付费营销功能&…

16.网络编程(下篇)

目录 1.网络编程概述 2.应用软件架构 3.网络编程三要素-IP地址 4.网络编程三要素-端口与协议 5.UDP通信程序 6.TCP通信程序 1.网络编程概述 1.1计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系…

【问题解决】win10日志错误:创建 TLS 客户端凭据时发生致命错误。 内部错误状态为 10013

背景 最近win10死机了一次,查看事件管理器发现有大量的报错:“创建 TLS 客户端凭据时发生致命错误。 内部错误状态为 10013”,如图: 解决 win键搜索internet选项 确定。 原因 参考错误:“ 创建 TLS 客户端凭据…