微服务设计(第2版)读书笔记

server/2024/12/21 9:32:25/

微服务概述

什么是微服务

答:微服务(microservice)是基于业务领域建模的,可独立发布的服务。它会把业务内聚的功能封装起来,并通过网络供其他服务访问。将这样的服务组合起来构建出更复杂的系统。


微服务特点

  1. 可独立部署
  2. 围绕业务领域建模
  3. 状态自主,避免微服务之间共享数据库
  4. 服务大小,服务接口要可控
  5. 灵活性,微服务组织、技术、规模、健壮性等多个具有可观的灵活性
  6. 架构和组织的一致性

微服务与单体

单体

“系统中的所有功能必须一起部署时,我们可以视它为一个单体。

单体又细分为,单进程单体,模块化单体(依然是单进程),分布式单体

单体的优势

开发流程简单,系统监控,故障排除和测试工作大大简化

微服务的优势

  1. 技术的异构性,可以针对不同微服务业务特性使用不同技术,满足不同业务的不同诉求。
  2. 健壮性,实现故障隔离。
  3. 扩展性,扩展灵活,只需要按需扩展需要的微服务
  4. 部署便捷
  5. 组织协调
  6. 可组合

微服务的痛点

  1. 开发者体验,本地开发需要启动微服务多。
  2. 技术过载,引入大量新技术。
  3. 成本,
  4. 生成报表的成本变高
  5. 监控和故障排除较复杂,需要引入分布式可观测
  6. 安全,数据传输跨多服务,对安全性提出了更高的要求。
  7. 测试成本变大
  8. 延迟,数据在微服务之间进行序列化传输反序列化,容易造成系统延迟问题
  9. 数据一致性挑战

微服务建模

合理划分微服务边界

我们希望微服务能够独立更改和独立部署,并将功能发布给用户。能够独立更改一个微服务而不影响其他微服务的能力至关重要。微服务建模过程中合理的划分微服务边界尤为重要。

要掌握以下三点,对确立微服务边界至关重要。

  1. 信息隐藏
  2. 内聚
  3. 耦合

信息隐藏

将尽可能多的实现细节隐藏在微服务边界内部。

优势:

  1. 提升开发效率,“允许模块独立开发,我们可以并行完成更多的工作,并减少添加项目人员带来的影响。
  2. 可理解性,每个模块可以被独立的定位和理解,可以更清楚的认知模块的定位。
  3. 灵活性,每个模块可以被独立的修改,在不对其他模块修改的情况下,依然可以对系统功能进行更改。此外,模块还可以按不同的组合方式以提供新功能。

内聚

一起变化的代码应该组织在一起。将变更限制在尽可能小的范围内,当业务需要变更时就更加容易了。

将相关行为放在一起,将无关行为放在别处。如果一个功能的修改需要在很多地方更改,功能上线时就要发布很多不同的服务,一次部署很多服务是有风险的,这要尽量避免。对于微服务架构,我们的目标是要实现高内聚。

耦合

和内聚常常伴随出现的词汇就是耦合了,耦合高,就是一个服务的更改依赖于对另一个服务的更改。耦合低,服务的更改不会影响到其他服务。这也是内聚的目标,耦合和内聚的概念是一脉相承的。

目标:高内聚低耦合

通过采用合适的技术实现方案可以降低耦合

在实际开发中服务之间的耦合是不可避免的,但是我们要尽可能降低耦合,比如两个服务有依赖关系,根据对功能需求的评估,这个功能可以异步调用不需要同步返回结果,那么两个服务的调用可以尽量使用消息队列,而不是直接依赖。

耦合的类型

耦合程度从低到高排序如下:

  1. 领域耦合
  2. 传递耦合
  3. 公共耦合
  4. 内容耦合

(未完待续)


http://www.ppmy.cn/server/151912.html

相关文章

Vue.js前端框架教程13:Vue空值合并?? 可选链?.和展开运算符...

文章目录 ??(空值合并运算符)区别 | - 逻辑或(Logical OR)|| - 空值合并运算符(Nullish Coalescing Operator)?. - 可选链(Optional Chaining)... 展开运算符(Spread …

Web应用中的XSS防护实践

什么是XSS攻击? XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的网络安全漏洞。攻击者通过在网页中注入恶意脚本代码,当用户浏览这些页面时,恶意代码会在用户的浏览器中执行,从而盗取用户信息、篡改页面内容或进行其他恶意操作。 XSS攻击的主要类型 1. 反射型…

被裁20240927 --- 嵌入式硬件开发 前篇

前篇主要介绍一些相关的概念,用于常识扫盲,后篇开始上干货! 他捧着一只碗吃过百家的饭 处理器芯片处理器芯片制造商嵌入式处理器芯片制造商国内制造商国外制造商 与意法半导体对标的国产芯片制造商一、中芯国际二、华为海思三、紫光国微四、北…

uniapp Native.js 调用安卓arr原生service

最近搞了个uni小项目,一个定制的小平板,带一个nfc设备,厂家只给了一套安卓原生demo,头一次玩原生安卓,废了好半天劲打出来arr包,想镶进uniapp里,网上查了好久,都是错的,要…

113.PyQt5_QtPrintSupport_打印操作

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

关于IP代理API,我应该了解哪些功能特性?以及如何安全有效地使用它来隐藏我的网络位置?

IP代理API是一种服务,允许用户通过访问经过中间服务器的网络连接来改变其公开的互联网协议地址(IP),从而达到隐藏真实地理位置的效果。以下是您在选择和使用IP代理API时应关注的一些功能和安全性考虑: 匿名度&#xff…

第3节 测试套件数据驱动

创建Excel、 CSV测试数据 1. 从主菜单中选择 File > New > Test Data。将显示新的测试数据对话框。输入测试数据的名称并选择数据类型作为Excel File/ CSV File 。单击OK。 2. 浏览到要导入Katalon Studio的Excel File, 选择Excel中的sheetName,或者CSV文件…

在 Windows 系统上怎么看sqlserver的驱动版本呢

在 Windows 系统上,可以通过以下几种方法查看已安装的 SQL Server ODBC 驱动版本: 方法 1:通过 ODBC 数据源管理器 打开 ODBC 数据源管理器: 按下 Win S,搜索 ODBC 数据源管理器(32位或64位,根…