微服务设计(第2版)读书笔记
微服务概述
什么是微服务?
答:微服务(microservice)是基于业务领域建模的,可独立发布的服务。它会把业务内聚的功能封装起来,并通过网络供其他服务访问。将这样的服务组合起来构建出更复杂的系统。
微服务特点
- 可独立部署
- 围绕业务领域建模
- 状态自主,避免微服务之间共享数据库
- 服务大小,服务接口要可控
- 灵活性,微服务在组织、技术、规模、健壮性等多个具有可观的灵活性
- 架构和组织的一致性
微服务与单体
单体
“系统中的所有功能必须一起部署时,我们可以视它为一个单体。
单体又细分为,单进程单体,模块化单体(依然是单进程),分布式单体
单体的优势
开发流程简单,系统监控,故障排除和测试工作大大简化
微服务的优势
- 技术的异构性,可以针对不同微服务业务特性使用不同技术,满足不同业务的不同诉求。
- 健壮性,实现故障隔离。
- 扩展性,扩展灵活,只需要按需扩展需要的微服务。
- 部署便捷
- 组织协调
- 可组合
微服务的痛点
- 开发者体验,本地开发需要启动微服务多。
- 技术过载,引入大量新技术。
- 成本,
- 生成报表的成本变高
- 监控和故障排除较复杂,需要引入分布式可观测
- 安全,数据传输跨多服务,对安全性提出了更高的要求。
- 测试成本变大
- 延迟,数据在微服务之间进行序列化传输反序列化,容易造成系统延迟问题
- 数据一致性挑战
微服务建模
合理划分微服务边界
我们希望微服务能够独立更改和独立部署,并将功能发布给用户。能够独立更改一个微服务而不影响其他微服务的能力至关重要。微服务建模过程中合理的划分微服务边界尤为重要。
要掌握以下三点,对确立微服务边界至关重要。
- 信息隐藏
- 内聚
- 耦合
信息隐藏
将尽可能多的实现细节隐藏在微服务边界内部。
优势:
- 提升开发效率,“允许模块独立开发,我们可以并行完成更多的工作,并减少添加项目人员带来的影响。
- 可理解性,每个模块可以被独立的定位和理解,可以更清楚的认知模块的定位。
- 灵活性,每个模块可以被独立的修改,在不对其他模块修改的情况下,依然可以对系统功能进行更改。此外,模块还可以按不同的组合方式以提供新功能。
内聚
一起变化的代码应该组织在一起。将变更限制在尽可能小的范围内,当业务需要变更时就更加容易了。
将相关行为放在一起,将无关行为放在别处。如果一个功能的修改需要在很多地方更改,功能上线时就要发布很多不同的服务,一次部署很多服务是有风险的,这要尽量避免。对于微服务架构,我们的目标是要实现高内聚。
耦合
和内聚常常伴随出现的词汇就是耦合了,耦合高,就是一个服务的更改依赖于对另一个服务的更改。耦合低,服务的更改不会影响到其他服务。这也是内聚的目标,耦合和内聚的概念是一脉相承的。
目标:高内聚低耦合
通过采用合适的技术实现方案可以降低耦合
在实际开发中服务之间的耦合是不可避免的,但是我们要尽可能降低耦合,比如两个服务有依赖关系,根据对功能需求的评估,这个功能可以异步调用不需要同步返回结果,那么两个服务的调用可以尽量使用消息队列,而不是直接依赖。
耦合的类型
耦合程度从低到高排序如下:
- 领域耦合
- 传递耦合
- 公共耦合
- 内容耦合
(未完待续)
相关文章:
微服务设计(第2版)读书笔记
微服务概述 什么是微服务? 答:微服务(microservice)是基于业务领域建模的,可独立发布的服务。它会把业务内聚的功能封装起来,并通过网络供其他服务访问。将这样的服务组合起来构建出更复杂的系统。 微服务…...
idea无法识别文件,如何把floder文件恢复成model
前景: 昨天,我在之前的A1214模块包下新增了一个demo类,然后又新建了一个A1216模块,写了算法题,后面打算用git提交,发现之前的A1214模块下的demo类和新建的模块源文件都已经被追踪了,都是绿色的&…...
vscode的keil assistant 中搜索不到全局变量
搜不到 但是在包含的文件中输入 ../../../,就是全局搜索的结果 我的文件结构是:\Desktop\LVGL文件系统移植(lvgl8.3)\Projects\MDK-ARM 盲猜是keil assistant 当前文件夹打开的时候是进入到了MDK-ARM文件夹层次&…...
html+css网页设计 美食 餐饮杰12个页面
htmlcss网页设计 美食 餐饮杰12个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1ÿ…...
重撸设计模式--代理模式
文章目录 定义UML图代理模式主要有以下几种常见类型:代理模式涉及的主要角色有:C 代码示例 定义 代理模式(Proxy Pattern)属于结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。 通过引入代理对象&am…...
Redis性能调优:深入剖析变慢原因及应对策略
如果观察到,这个实例的运行延迟是正常 Redis 基准性能的 2 倍以上,即可认为这个 Redis 实例确实变慢了。 1.如何查看实例的运行延迟 (1)redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 60 执行该命令,就可以测…...
Python联合Halcon的详细教程
以下是一份Python联合Halcon的详细教程: 一、简介 Halcon是一款由德国MVTec公司开发的高级机器视觉软件,提供了一套强大的图像处理库,包括特征检测、识别、测量等功能。Python联合Halcon是一种将Python编程语言与计算机视觉库Halcon集成的应…...
raid 状态查看 storcli64
场景 当磁盘报错的时候使用该命令排查 fdisk -l /dev/sdb fdisk: cannot open /dev/sdb: Input/output error进一步使用 smartctl 排查 smartctl -a /dev/sdb 输出 smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-144-generic] (local build) Copyright (C) 2002-19, B…...
时间管理系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...
使用Docker启用MySQL8.0.11
目录 一、Docker减小镜像大小的方式 1、基础镜像选择 2、减少镜像层数 3、清理无用文件和缓存 4、优化文件复制(COPY和ADD指令) 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 1.2 构建过程和优势 2、怎样在Dockerfil…...
Qt之修改窗口标题、图标以及自定义标题栏(九)
Qt开发 系列文章 - titles-icons-titlebars(九) 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时,经常需要修改窗口标题、更改软…...
每天40分玩转Django:Django测试
Django测试 一、今日学习内容概述 学习模块重要程度主要内容测试基础⭐⭐⭐⭐⭐TestCase、断言方法模型测试⭐⭐⭐⭐⭐模型方法、数据验证视图测试⭐⭐⭐⭐请求处理、响应验证表单测试⭐⭐⭐⭐表单验证、数据处理覆盖率测试⭐⭐⭐⭐coverage配置、报告生成 二、测试基础示例…...
JS子页面调用父页面函数,监听刷新事件
目录 1.子页面调用父页面的函数 2.监听刷新事件 1.子页面调用父页面的方法 我们先来说说什么是子页面,在我这里子页面就是域名一样,然后使用iframe引入的页面就是我所说的子页面,为什么需要用到这个功能,是为了实现跨页面交互与…...
Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能
背景:现在有一个新需求,需要借助树结构来实现词库的分类管理,树的节点是不同的分类,不同的分类可以有自己的词库,所以父子节点是互不影响的;同样为了选择的方便性,提出了新需求,选择…...
详细介绍如何使用rapidjson读取json文件
本文主要详细介绍如何使用rapidjson库来实现.json文件的读取,分为相关基础介绍、结合简单示例进行基础介绍、结合复杂示例进行详细的函数实现介绍等三部分。 一、相关基础 1、Json文件中的{} 和 [] 在 JSON 文件中,{} 和 [] 分别表示不同的数据结构&…...
【Qt】显示类控件:QLabel、QLCDNumber、QProgressBar、QCalendarWidget
目录 QLabel QFrame 例子: textFormat pixmap、scaledContents alignment wordWrap、indent、margin buddy QLCDNumber 例子: QTimer QProgressBar 例子: QCalendarWidget 例子: QLabel 标签控件,用来显示…...
设计模式-访问者设计模式
介绍 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 问题:在一个机构里面有两种员工,1.Teacher 2.Engineer 员…...
Spring框架IOC
目录 一、Spring框架的介绍 1.1 Spring框架的概述 1.2 Spring框架的优点 二、Spring的核心 IOC技术 2.1 什么是IOC 2.2 IOC的程序入门 2.3 IOC技术总结 2.4 Spring框架的Bean管理的配置文件方式 一、Spring框架的介绍 1.1 Spring框架的概述 Spring是一个开放源代码的…...
有哪些免费的 ERP 软件可供选择?哪些 ERP 软件使用体验较好?
想找个 “免费” 的 ERP 软件? 咱得知道,ERP 那可是涉及财务、人力、供应链、采购、销售等好多方面的重要企业软件。功能这么全,能免费才怪呢!真要是有免费的,早就火遍大江南北,说不定把市场都垄断了&…...
思科CCNA认证都学什么考什么?
关注 工 仲 好:IT运维大本营CCNA考试要学的东西很多,你不要看它只是一个初级认证,但是它的专业内容知识是不少的,你想要学好也是需要下一番苦功的。 那么考CCNA需要学哪些东西呢?下面我们就来了解一下吧。 01、考CCN…...
五分钟完成Python环境配置,用Taotoken调用大模型API
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 五分钟完成Python环境配置,用Taotoken调用大模型API 对于希望快速体验不同大模型能力的Python开发者而言,通…...
c#软件开发学习笔记--数据类型
c#软件开发学习笔记 一、 数据类型1.基本类型(值类型) 值类型存储在栈中,变量保存的值的本身,赋值是拷贝一份新数据 byte(字节) bit(位) 1byte 8bit byte(1字节) byte b 10; //0 - 255short(2字节) short s 100;…...
TortoiseGit实战:用‘拣选’功能精准移植单个提交,告别全量合并的烦恼
TortoiseGit实战:用‘拣选’功能精准移植单个提交,告别全量合并的烦恼 在团队协作开发中,我们常常遇到这样的场景:测试分支(feature/hotfix)中某个关键Bug修复已经验证通过,但该分支还包含大量未…...
程序员职业生涯系列:关于技术能力的思考与总结
工作几十年,我面试过几百个程序员,带过十几个团队,自己也从一个写CRUD都费劲的菜鸟成长为架构师。回头看,最让我困惑过的一个问题是:什么才是真正的技术能力? 是LeetCode刷到300题?是把某个框架源码啃得烂熟?是写过多少个高并发项目?还是那张挂在墙上的高级职称证书?…...
谷歌外链怎么发?靠1种图文形式自动吸引外链
写外链一直是SEO里最耗体力的活。很多公司招了三个实习生,每天坐在电脑前发几百封开发信,回复率往往不到0.5%。到了2026年,谷歌的算法已经能识别出绝大多数带有“交换”性质的人为链接。现在的行情是,想要稳住排名,得让…...
Linux用户与权限管理实战:从基础命令到SELinux/ACL高级应用
1. 项目概述:为什么用户管理是Linux系统的基石在Linux世界里,无论你是管理一台个人服务器,还是运维一个庞大的集群,用户和组的管理都是你绕不开的第一课。很多人觉得这无非就是useradd和passwd几个命令,但真正踩过坑的…...
Vidupe:3步快速清理重复视频的终极免费解决方案
Vidupe:3步快速清理重复视频的终极免费解决方案 【免费下载链接】vidupe Vidupe is a program that can find duplicate and similar video files. V1.211 released on 2019-09-18, Windows exe here: 项目地址: https://gitcode.com/gh_mirrors/vi/vidupe 您…...
FPGA时序约束避坑指南:Set Bus Skew与Set Max Delay到底有什么区别?
FPGA时序约束深度解析:Set Bus Skew与Set Max Delay的核心差异与工程实践 在FPGA设计的时序收敛过程中,工程师们常常面临一个关键抉择:何时使用Set Max Delay,何时又该选择Set Bus Skew?这两种约束看似都与路径延迟相关…...
如何快速构建完整的以太坊Go开发实战应用:从入门到精通指南 [特殊字符]
如何快速构建完整的以太坊Go开发实战应用:从入门到精通指南 🚀 【免费下载链接】ethereum-development-with-go-book 📖 A little guide book on Ethereum Development with Go (golang) 项目地址: https://gitcode.com/gh_mirrors/et/ethe…...
ncmdump终极指南:5分钟解锁网易云音乐NCM加密文件
ncmdump终极指南:5分钟解锁网易云音乐NCM加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾在网易云音乐下载了心爱的歌曲,却发现只能在特定客户端播放?当你想在车载音响、智能音箱…...
