软件架构模式-读书笔记(4)-微服务架构

2023-11-05

微服务架构模式作为替代单体应用和面向服务架构的一个可行的选择,在业内迅速取得进展。微服务架构的每个组件都作为一个独立单元进行部署,让每个单元可以通过有效、简化的传输管道进行通信,同时它还有很强的扩展性,应用和组件之间高度解耦,使得部署更为简单。要理解这种模式,最重要的概念就是服务组件(service         component)。

模式拓扑

虽然有很多方法来实现微服务架构模式,但三个主要的拓扑结构为:基于REST API的拓扑结构,基于REST的应用拓扑结构和集中式消息拓扑结构。

1)基于REST的API拓扑

基于REST的API拓扑适用于网站,通过某些API对外提供小型的、自包含的服务。这种拓扑结构,如下图所示,由粒度非常细的服务组件(因此得名微服务)组成,这些服务组件包含一个或两个模块并独立于其他服务来执行特定业务功能。在这种拓结构扑中,这些细粒度的服务组件通常被REST-based的接口访问,而这个接口是通过一个单独部署的web API层实现的。此种拓扑的例子包含一些常见的专用的、基于云的RESTful     web service,大型网站都在使用。

2)基于REST的应用拓扑

基于REST的应用拓扑结构与基于REST API的不同,它通过传统的基于web的或胖客户端业务应用来接收客户端请求,而不是通过一个简单的API层。如下图所示,应用的用户接口层(user interface layer)是一个web应用,可以通过简单的REST-based接口访问单独部署的服务组件(业务功能)。该拓扑结构中的服务组件与API-REST-based拓扑结构中的不同,这些服务组件往往会更大、粒度更粗、代表整个业务应用程序的一小部分,而不是细粒度的、单一操作的服务。这种拓扑结构常见于中小型企业等复程度相对较低的应用程序。

3)集中式消息拓扑

微服务架构模式中另一个常见的方法是集中式消息拓扑。该拓扑与前面提到的基于REST的应用拓扑类似,不同的是,application REST-based拓扑结构使用REST进行远程访问,而该拓扑结构则使用一个轻量级的集中式消息代理(如ActiveMQ, HornetQ等等)。不要将该拓扑与面向服务架构模式混淆或将其当做SOA简化版(“SOA-Lite”),这点是极其重要的。该拓扑中的轻量级消息代理(Lightweight Message Broker)不执行任何编排,转换,或复杂的路由;相反,它只是一个轻量级访问远程服务组件的传输工具。

集中式消息拓扑结构通常应用在较大的业务应用程序中,或对于某些对传输层到用户接口层或者到服务组件层有较复杂的控制逻辑的应用程序中。该拓扑较之先前讨论的简单基于REST的拓扑结构,其好处是有先进的排队机制、异步消息传递、监控、错误处理和更好的负载均衡和可扩展性。与集中式代理相关的单点故障和架构瓶颈问题已通过代理集群和代理联盟(将一个代理实例为分多个代理实例,把基于系统功能区域的吞吐量负载划分开处理)解决。

避免依赖和编排

微服务架构模式的主要挑战之一就是决定服务组件的粒度级别。如果服务组件粒度过粗,那你可能不会意识到这个架构模式带来的好处(部署、可扩展性、可测试性和松耦合),然而,服务组件粒度过细将导致服务编制要求,这会很快导致将微服务架构模式变成一个复杂、容易混淆、代价昂贵并易于出错的重量级面向服务架构。

如果你发现需要从应用内部的用户接口或API层编排服务组件或者你发现你需要在服务组件之间执行服务间通信来处理单个请求,那么很有可能你服务组件的粒度太细了。服务间通信,可能导致组件之间产生耦合,但可以通过共享数据库进行处理。

共享数据库可以处理信息需求,但是共享功能呢?如果一个服务组件需要的功能包含在另一个服务组件内,或是一个公共的功能,那么有时你可以将服务组件的共享功能复制一份(因此违反了DRY规则:don’t repeat yourself)。为了保持服务组件独立和部署分离,微服务架构模式实现中会存在一小部分由重复的业务逻辑而造成的冗余,这在大多数业务应用程序中是一个相当常见的问题。小工具类可能属于这一类重复的代码。

如果你发现就算不考虑服务组件粒度的级别,你仍不能避免服务组件编排,这是一个好迹象,可能此架构模式不适用于你的应用。

微服务架构模式解决了很多单体应用和面向服务架构应用存在的问题。由于主要应用组件被分成更小的,单独部署单元,使用微服务架构模式构建的应用程序通常更健壮,并提供更好的可扩展性,支持持续交付也更容易。该模式的另一个优点是,它提供了实时生产部署能力,从而大大减少了传统的月度或周末“大爆炸”生产部署的需求。因为变化通常被隔离成特定的服务组件,只有变化的服务组件才需要部署。由于微服务架构模式是分布式的架构,他与事件驱动架构模式具有一些共同的复杂的问题,包括约定的创建、维护,和管理,远程系统的可用性,远程访问身份验证和授权。

微服务架构优劣势分析

方向

评级

分析

整体灵活性

整体的灵活性是能够快速响应不断变化的环境。由于单独部署单元的概念,变化通常被隔离成单独的服务组件,使得部署变得快而简单。同时,使用这种模式构建的应用往往是松耦合的,也有助于促进改变。

易于部署

整体来讲,由于该模式的解耦特性和事件处理组件使得部署变得相对简单。

可测试性

由于业务功能被分离成独立的应用模块,可以在局部范围内进行测试,这样测试工作就更有针对性。对一个特定的服务组件进行回归测试比对整个单体应用程序进行回归测试更简单、更可行。而且,由于这种模式的服务组件是松散耦合的,从开发角度来看,由一个变化导致应用其他部分也跟着变化的几率很小,并能减小由于一个微小的变化而不得不对整个应用程序进行测试的负担。

性能

虽然你可以从实现该模式来创建应用程序并可以很好的运行,整体来说,由于微服务架构模式的分布式特性,并不适用于高性能的应用程序。

伸缩性

由于应用程序被分为单独的部署单元,每个服务组件可以单独扩展,并允许对应用程序进行扩展调整。

易开发性

由于功能被分隔成不同的服务组件,由于开发范围更小且被隔离,开发变得更简单。程序员在一个服务组件做出一个变化影响其他服务组件的几率是很小的,从而减少开发人员或开发团队之间的协调。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件架构模式-读书笔记(4)-微服务架构 的相关文章

  • [架构之路-211]- 需求- 软架构前的需求理解:ADMEMS标准化、有序化、结构化、层次化需求矩阵 =》需求框架

    目录 前言 一 什么是ADMES 首先 需求是分层次的 其次 需求是有结构的 有维度的 再次 不同层次需求 不同维度需求之间可以相互转化 难点 经验积累 最终 标准化的ADMEMS需求矩阵 二 软架构前的需求理解 1 目标 2 时机 3 四
  • 信创-大数据平台CPU架构支持

    一 CDH和HDP CDP CDP数据中心类似于CDH和HDP 直接安装在硬件服务器上 目前支持市面上主流的X86服务器 包括国内海光服务器 CDH不支持ARM 以上两种大数据平台都仅支持x86架构 早在几年期RedHat联手clouder
  • 【架构设计】阿里开源架构Cola4.0的项目实践:订单系统

    项目介绍 使用SpringBoot MybaitsPlus Cola 整洁面向对象分层架构 4 0重构订单功能 项目地址 Gitee https gitee com charles ruan smile cola Github https
  • K8s 架构简介(一)

    一 前言 在开始学习K8s之前 让我们对容器有一个基本的了解 1 1 什么是容器 一个容器镜像是一个可运行的软件包 其中包含了一个完整的可执行程序 包括代码和运行时需要应用 系统库和全部重要设置的默认值 通过将应用程序本身 和其依赖容器化
  • 人工智能大模型加速数据库存储模型发展 行列混合存储下的破局

    数据存储模型 专栏内容 postgresql内核源码分析 手写数据库toadb 并发编程 toadb开源库 个人主页 我的主页 座右铭 天行健 君子以自强不息 地势坤 君子以厚德载物 概述 在数据库的发展过程中 关系型数据库是一个里程碑式的
  • 为什么程序员招聘都要5年经验起?因为他们懂Java8底层优化!

    一 前情回顾 上篇文章给大家聊了一下volatile的原理 具体参见 入坑两个月自研非外包创业公司 居然让我搞懂了volatile 这篇文章给大家聊一下java并发包下的CAS相关的原子操作 以及Java 8如何改进和优化CAS操作的性能
  • dubbo分布式服务

    架构 节点角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次调和调用时间的监控中心 Container 服务运行容器 调
  • API架构的选择,RESTful、GraphQL还是gRPC

    文章目录 一 RESTful 1 什么是RESTful 2 RESTful架构的原则 3 RESTful的适用场景 4 RESTful的优点 5 RESTful的缺点 二 GraphQL 1 什么是GraphQL 2 GraphQL的原则
  • 英伟达最新开源

    Title FasterViT Fast Vision Transformers with Hierarchical Attention Paper https arxiv org pdf 2306 06189 pdf Code https
  • 【实践篇】领域驱动设计:DDD工程参考架构

    背景 为什么要制定参考工程架构 不同团队落地DDD所采取的应用架构风格可能不同 并没有统一的 标准的DDD工程架构 有些团队可能遵循经典的DDD四层架构 或改进的DDD四层架构 有些团队可能综合考虑分层架构 整洁架构 六边形架构等多种架构风
  • RabbitMQ集群架构模式

    搭建Mirror镜像集群 4369是erlang的发现端口 5672是rabbitmq的通信端口 15672是rabbitmq的可视化控制台的端口号 25672是erlang底层发送消息和分配消息的底层端口 firewall cmd zon
  • 从0开始,做一个后台项目的架构

    作为一名架构师 老板要求你把公司的后端技术栈搞一下 那你该如何去做呢 对我而言我 我的答案是综合考虑下面的这些内容然后进行决定 团队协助基础工具链的选型和培训 搭建微服务开发基础设施 选择合适的RPC框架 选择和搭建高可用的注册中心 选择和
  • 谁能想到Java技术能跟看小说一样学习,用故事给技术加点料

    Java是现阶段中国互联网公司中 覆盖度最广的研发语言 掌握了Java技术体系 不管在成熟的大公司 快速发展的公司 还是创业阶段的公司 都能有立足之地 大家都知道 阿里P7高级技术专家 基本上是一线技术人能达到的最高职级 也是很多程序员追求
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • 浅谈小程序开源业务架构建设之路

    一 业务介绍 1 1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态 我们的愿景是 定义移动时代最佳体验 建设智能小程序行业标准 打破孤岛 共建开源 开放 繁荣的小程序行业生态 百度智能小程序的生态玩家有三类 分
  • Python 微服务架构指南

    概要 微服务架构作为一种设计风格 它将应用程序构建为一套小服务的集合 每个服务实现特定的业务功能 这些服务可以独立部署 扩展并围绕特定业务能力构建 Python 凭借其简洁易读的语法和强大的库生态系统成为实现微服务的受欢迎选择 本文将详细介
  • 如何解读服务器的配置和架构?

    在当今数字化时代 服务器作为企业或组织的重要基础设施 其配置和架构对于保障业务的稳定运行至关重要 如何解读服务器的配置和架构 成为了一个备受关注的话题 本文将围绕服务器配置和架构的解读进行深入探讨 帮助读者更好地理解服务器的性能 扩展性和安
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • [机缘参悟-131] :《洞见》:为什么佛学是真的 -2-从进化心理学了解佛家的三毒“贪嗔痴”的进化机制

    目录 一 佛家的三毒 贪嗔痴 二 进化心理学对贪嗔痴的解释 2 1 贪欲 2 1 1 贪欲的满足与快乐的本质 2 1 2 贪欲得不到满足与痛苦的本质 2 2 恶意和愤怒 2 3 愚痴和无知 2 3 1 大众对痴的解释 2 3 2 佛对痴的解

随机推荐

  • 还不会gdb?看这一篇就够了

    目录 gdb是什么 它有啥威力 gdb常用命令 gdb实战 基本使用 解决coredump 总结 大家好 我是小李 今天这一篇博客来跟大家介绍一个非常有用的工具 gdb 不管是学习还是工作中 用好gdb 能让你的程序更加丝滑 gdb是什么
  • react+ant design pro+dva项目阶段型总结(不定时更新)

    1 如果你熟悉 HTML 那么 JSX 对于你来说是没有任何压力的 因为 HTML 中的所有标签 在 JSX 中都是支持的 基本上没有学习成本 只有如下几点略微的不同 class 属性变为 className tabindex 属性变为 t
  • JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 直播商城 短视频商城 springcloud商城 spring cloud商城

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • Mathsphere Latex产品介绍

    需求描述 对于工科生和从事科研工作的同学而言 他们在写作过程中可能需要编辑数学公式 本文将介绍一款好用的Latex公式编辑器 Mathsphere Latex Mathsphere Latex 简介 Mathsphere Latex是一款基
  • bootloader 详细介绍

    Bootloader 对于计算机系统来说 从开机上电到操作系统启动需要一个引导过程 嵌入式Linux系统同样离不开引导程序 这个引导程序就叫作Bootloader 6 1 1 Bootloader介绍 Bootloader是在操作系统运行之
  • 【VIM配置文件】

    1 vim配置文件在 vimrc中 设置完成后保存source即生效 2 插件安装 1 先下载plug vim文件 放置在 vim autoload目录下 下载命令 curl O https raw githubusercontent co
  • 了解typename的双重意义

    1 声明template参数时 前缀关键字class和typename可互换 2 请使用关键字typename表示嵌套从属类型名称 但不得在base class lists 基类列 或member initialization list 成
  • UART的Rx和Tx引脚如何互换,电平如何反转( SWAP-交换算法)

    今天给大家分享关于STM32关于UART的一些新特性 主要针对较新系列STM32 如 STM32H7 F0 G0 G4等 的UART 可通过软件改变Rx和Tx引脚 电平反转 高低反序 介绍超时等 有些时候 我们在外接RS232芯片时 会犯这
  • libdbus 实例以及使用d-feet查看接口方法

    libdbus 实例以及使用d feet查看接口方法 libdbus介绍 总线 linux系统进程间通过dbus通信 D BUS由总线构成 总线分为两种 系统总线 system bus 和会话总线 session bus 系统总线在引导时就
  • 关于win10系统system_service_exception蓝屏(hardwareprotect_x64.sys)

    hardwareprotect x64 sys报错蓝屏主要是由win10系统更新后 系统与鲁大师不兼容 win10会将鲁大师下hardwareprotect x64 sys文件映射到系统文件 导致报错蓝屏 建议在第一次报错蓝屏后 就删除鲁大
  • layui文件上传+ThinkPHP5.1

    引入文件 1 前端html代码
  • 逻辑回归分类器(Logistic Regression Classifier)

    Logistic regression 逻辑回归 是当前业界比较常用的机器学习方法 用于估计某种事物的可能性 也用来进行分类 在分类的情形下 经过学习之后的LR分类器其实就是一组权值w0 w1 wm 当输入测试样本集中的测试数据时 这一组权
  • 元组,字典,集合

    元组 字典 集合的基本操作 python 元组 tuple 基本操作 元组被称为只读列表 数据可被查询 但不能被修改 类似于列表的切片操作 元组写在小括号里面 元素之前用逗号隔开 对于一些不想被修改的数据 可以用元组来保存 创建元组 1 创
  • ModbusRTU协议封装,控制RJ45报警器,复制一下就能用哦~

    本文只对 写保持寄存器 HoldingRegister 做操作 其他类型的寄存器方法方法也在ModbusWriteOrRead类中 可自行测试 报警器设备型号 USB版 JD01AX07 01 设备外观及亮灯 文档说明 部分 注 以下图第一
  • Matlab桌面启动失败java.lang.​NullPointe​rException

    最全的解决方案集合 考虑到之前安装CubeMX时装了java 而Matlab底层是Java 先拿第四条试 成功了 然后删掉改动的部分 nodesktop nojvm再重启 也能用了
  • React event.preventDefault使用方法

    event preventDefault 定义和用法 取消事件的默认动作 简单看一下下面代码 class NameForm extends React Component constructor props super props this
  • 基于布谷鸟优化LSTM的短时电力负荷预测

    0 引言 短期电力负荷预测是电力系统安全调度 经济运行的重要依据 随着电力系统的市场化 负荷预测的精度直接影响到电力系统运行的可靠性 经济性和供电质量 LSTM 为短期电力负荷预测提供了一个新的研究方向 本文将LSTM用于短期电力负荷预测
  • css 上下左右居中的几种方法

    html结构 div class father div class son div div 1 父元素宽高固定 子元素宽高固定 那么子元素可以通过上 左右的固定margin left 父元素宽度 子元素宽度 2 margin top 父元素
  • Spring Data Elasticsearch 3.13 操作摘要

    1 4 7 异步查询结果 可以使用Spring的异步方法执行功能异步运行存储库查询 这意味着该方法在调用时立即返回 而实际的查询执行发生在已提交给Spring的任务中TaskExecutor 异步查询执行与响应式查询执行不同 不应混合使用
  • 软件架构模式-读书笔记(4)-微服务架构

    微服务架构模式作为替代单体应用和面向服务架构的一个可行的选择 在业内迅速取得进展 微服务架构的每个组件都作为一个独立单元进行部署 让每个单元可以通过有效 简化的传输管道进行通信 同时它还有很强的扩展性 应用和组件之间高度解耦 使得部署更为简