软件架构模式-读书笔记(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)-微服务架构 的相关文章

随机推荐

  • 还不会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)-微服务架构

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