《微服务架构设计模式》第一章 逃离单体地狱

news2024/12/23 22:46:05

内容总结自《微服务架构设计模式》

逃离单体地狱

    • 一、单体架构
      • 1、好处
      • 2、弊端
    • 二、微服务架构
      • 1、定义
      • 2、好处
      • 3、弊端
    • 三、模式的概念
      • 1、定义
      • 2、构成
      • 3、引申微服务

一、单体架构

1、好处

  1. 易于对应用程序进行大规模的更改:可以更改代码和数据库模式,然后构建和部署。
  2. 测试相对简单直观:开发者只需要写几个端到端的测试,启动应用程序,调用RESTAPI,然后使用Selenium这样的工具测试用户界面。
  3. 部署简单明了:开发者唯一需要做的,就是把WAR文件复制到安装了Tomcat的服务器上。
  4. 横向扩展不费吹灰之力:FTGO可以运行多个实例,由一个负载均衡器进行调度。

2、弊端

  1. 过度复杂性会吓退开发者
  2. 开发速度缓慢
  3. 代码提交到实际部署的周期很长,而且容易出问题
  4. 难以扩展
  5. 交付可靠的单体应用是一项挑战
  6. 需要长期依赖某一个可能已经过时的技术栈



二、微服务架构

1、定义

microservice用来指代微服务这类架构设计风格,而构成微服务架构的是每一个具体的实例,是service(服务)。所以我们应该说,“这个系统采用了微服务架构设计,由若干个服务构成”。

这里借助了Martin Abbott和Michael Fisher的名著《The Art of Scalability》 的启发,该书中描述了一个三维可扩展模型:“扩展立方体”,这个模型描述了一个应用程序的三个维度

  • X轴扩展:在多个实例之间实现请求的负载均衡
  • Z轴扩展:根据请求的属性进行路由请求(并未网关转发,而是根据请求参数值,定点打到某台固定的机器上)
  • Y轴扩展:根据功能把应用拆分为服务

服务本质上是一个麻雀虽小但五脏俱全的应用程序,它实现了一组相关的功能,例如订单管理、客户管理等。服务可以在需要的时候借助X轴或Z轴方式进行扩展。例如,订单服务可以被部署为一组负载均衡的服务实例。

我对微服务架构的概括性定义是:把应用程序功能性分解为一组服务的架构风格。请注意这个定义中并没有包含任何与规模有关的内容。重要的是,每一个服务都是由一组专注的、内聚的功能职责组成。微服务作为模块化的一种形式,每个服务都有自己的数据库。


2、好处

  1. 使大型的复杂应用程序可以持续交付和持续部署。
  2. 每个服务都相对较小并容易维护。
  3. 服务可以独立部署。
  4. 服务可以独立扩展。
  5. 微服务架构可以实现团队的自治。
  6. 更容易实验和采纳新的技术。
  7. 更好的容错性。

3、弊端

  1. 服务的拆分和定义是一项挑战
  2. 分布式系统带来的各种复杂性,使开发、测试和部署变得更加困难
  3. 当部署跨域多个服务的功能时需要谨慎地协调更多开发团队
  4. 开发者需要思考到底应该在应用的什么阶段使用微服务架构



三、模式的概念

1、定义

模式是一个客观的工具,在通过模式的形态描述一项技术时,必须包括它的弊端。模式是针对特定上下文中发生的问题的可重用的解决方案,是Christopher Alexander创造的,他是一位显示世界中的建筑架构师。(类比设计模式理解)

2、构成

模式的价值远远超出了要求架构师考虑问题的背景,它迫使架构师认真描述解决方案的其他关键但经常忽视的方面(类比开发前的技术方案)。常见的模式结构包含三个重要部分:

  1. 需求:描述了必须解决的问题和围绕这个问题的特定上下文环境
  2. 结果上下文:采用模式后可能带来的后果
    1. 好处:好处和解决了什么需求
    2. 弊端:弊端和没有解决哪些需求
    3. 问题:使用模式后引入了什么新的问题
  3. 相关模式:这个模式与其他模式之间的关系
    1. 前导:前导模式是催生这个模式的需求的模式,例如微服务架构模式是除单体架构模式以外整个模式语言中所有模式的前导模式
    2. 后续:用来解决当前模式引入的新问题的模式
    3. 替代:当前模式的替代模式,提供了领导的解决方案
    4. 泛化:针对一个问题的一般性解决方案
    5. 特化:针对特定模式的具体解决方案

此外,你可以把解决类似问题的模式组成一组模式。对相关模式的明确描述为如何有效解决特定问题提供了有价值的指导。


3、引申微服务

img

微服务中的这些模式被分为三组:基础设施相关模式组、应用基础设施相关模式组、应用相关模式组。这些模式根据所解决问题的不同可以进一步的分组,主要分为:

  1. 服务拆分相关模式
    • 根据业务能力分解
    • 根据DDD域划分
  2. 通信相关模式
    • 通信风格
    • 服务发现
    • 可靠性
    • 事务性消息
    • 外部API
  3. 实现事务管理的数据一致性相关模式
    • 每个服务数据库独立配置,传统事务不适用
  4. 在微服务架构中查询数据的相关模式
    • LEFT JOIN变为多个API接口结果聚合
  5. 服务部署的相关模式
    • WAR上传服务器变为自动化部署平台
  6. 可观测性的相关模式
    • 健康检查API
    • 日志聚合
    • 分布式追踪
    • 异常跟踪
    • 应用指标
    • 审计日志
  7. 实现服务自动化测试的相关模式
    • 消费端驱动的契约测试:验证服务满足客户端所期望的功能
    • 消费端契约测试:验证服务的客户端可以正常与服务通信
    • 服务组件测试:在隔离的环境中测试服务
  8. 解决基础设施和边界问题的相关模式
    • 需要一个微服务基底,否则每开一个新服务,都需要重复处理可观测性模式、服务发现模式以及实现外部化配置模式
  9. 安全相关的模式
    • 用户身份验证

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

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

相关文章

华为OD机试真题 Java 实现【单词倒序】【2023Q1 100分】,附详细解题思路

一、题目描述 输入单行英文句子,里面包含英文字母,空格以及.? 三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。 二、输入描述 输入字符串S,S的长度1≤N≤100。 三、输出描述 输出逆序后的字符串 …

有道云笔记也挺速度,也搞了个AI助手,能抗衡Notion AI?

前言 小编平时做技术笔记的时候,经常使用到的软件就是有道云笔记,最近无意间发现,笔记编写的页面中,竟然集成了AI助手!网易有道可真是低调!毕竟最近AI圈大火,竟然没有蹭一波热度,直…

Spring Security 核心解读(二)自定义认证授权体系

自定义认证授权体系 概述自定义认证定义登录接口配置 Security 放行策略定义通用登录过滤器并将其配置到 Security 过滤器链上定义资源接口在 Security 授权设置中放行启动项目 结尾 概述 以前使用Spring Security 时,基本都是按部就班参考文档开发。 基本是从 Use…

【Python开发】FastAPI 06:处理错误

某些情况下,有必要向客户端(包括前端浏览器、其他应用程序、物联网设备等)返回错误提示,以便客户端能够了解错误的类型,从而做出应对。 目录 1 默认处理 1.1 错误介绍 1.2 使用 HTTPException 2 自定义处理 2.1 自…

论旅行之收获2

论旅行之收获2 概况站点第一站:北京市大兴区大兴机场基本情况吐槽小小趣事 第二站:云南省昆明长水机场云南省昆明市五华区基本概况经济分析 第三站:昆明站大理站云南省大理白族自治州大理市下关基本情况 第四站:云南省大理白族自治…

操作系统-进程和线程-处理机调度

目录 一、调度的概念 1.1调度的层次 1.1.1高级调度(作业调度) 1.1.2中级调度(内存调度) 1.1.3低级调度(进程调度) 1.2状态模型 1.3调度的时机 1.4调度方式 1.5进程的切换与过程 二、调度算法的评价指标 2.1CPU利用率 2.2吞吐量 2.3周转时间 2.4带权周转时间 2.5等…

Ansible基础6——文件模块、jinja2模板

文章目录 一、常用文件模块1.1 blockinfile模块1.2 file模块1.2.1 创建文件并赋予权限1.2.2 创建目录并赋予权限1.2.3 创建软连接1.2.4 删除文件或目录 1.3 fetch模块1.4 lineinfile模块1.5 stat模块1.6 synchronize模块 二、jinja2模板2.1 构建jinja2模板2.2 管理jinja2模板2.…

LVGL学习(1):中文字体的转换和汉字显示

在使用LVGL的过程中,我们难免需要显示汉字,所以这篇文章就来介绍一下如何转换中文汉字并成功显示到LVGL中。 文章目录 1 字体转换1.1 GUI Guider自动转换1.2 在线转换 2 字体的使用 1 字体转换 1.1 GUI Guider自动转换 打开GUI Guide,创建…

SAP-MM-批次删除归档操作

对于物料主数据的批次管理,一旦一个物料设置了批次管理,并已经产生了业务数据,但是发现当初业务主数据搞错了,此物料不需要在SAP系统进行批次管理,是否就无法取消其批次管理了呢,因为如果要取消此批次管理&…

Java: 字符集详解

1.计算机的存储规则 在计算机中,任意数据都是以二进制的形式来存储的。 每一个二进制数表示的0,1被称为比特位,8个比特位组成一个字节。 字节:计算机最小的存储单元。 2.ASCII字符集 用于存储英文字符,查询制定AS…

阿里云服务器开通全部端口流程

阿里云服务器端口怎么全部打开?在安全组中开启端口号,在安全组中把端口范围设置为-1/-1,授权对象填0.0.0.0/0,即可开通全部端口号,阿腾云来详细说下阿里云服务器端口全部打开教程: 阿里云服务器端口全部开…

结题报告范文

结题报告范文篇一 项目名称:__________ 项目编号: 项目负责人:_________ 专业年级:__________ 所在学院:__________ 起止年月: 电 话:__________ E-mail: 填表时期: 福建…

Vue基础入门(下)

<script src"https://unpkg.com/vuenext"></script> mixin混入&#xff08;局部使用&#xff09; 定义mixin对象 <script>// mixin 混入const mymixin{data(){return {number:2,count:1}},created(){console.log(mymixin created);},methods:{…

【Unity3D】Bloom特效

1 Bloom 特效原理 Bloom 特效是指&#xff1a;将画面中较亮的区域向外扩散&#xff0c;造成一种朦脓的效果。实现 Bloom 特效&#xff0c;一般要经过 3 个阶段处理&#xff1a;亮区域检测、高斯模糊、Bloom 合成。 本文完整资源见→Unity3D Bloom 特效。 1&#xff09;亮区域检…

OS-内存管理1- 4种基本管理方式(连续分配,页式,段式,段页)。

一&#xff0c;内存管理四种方式。 二&#xff0c;连续分配管理方式。 连续分配方式&#xff1a;为用户分配连续的内存空间。 1.单一连续分配方式 2.固定分区分配方式 3.动态分区分配方式 4.三种连续分配方式的对比。 三&#xff0c;基于页式存储管理。 1.页式 为进一步提高…

嵌入式系统中I2C总线通信基本方法

将 I2C spec 文章总结为一篇&#xff0c;目录如下 I2C Introduction I2C Architecture I2C Transfer I2C Synchronization And Arbitration I2C Hs-mode1、I2C Introduction 1、I2C 历史 I2C&#xff1a;Inter-Integrated Circuit&#xff0c;集成电路总线。 I2C 是 Philips…

部分网络结构记录

CVPR 2022 | Mobile-Former来了&#xff01;微软提出&#xff1a;MobileNetTransformer轻量化并行网络 文章链接: CVPR 2022 | Mobile-Former来了&#xff01;微软提出&#xff1a;MobileNetTransformer轻量化并行网络 - 知乎 (zhihu.com) Mobile-Former架构图 Mobile-Form…

Mybatis学习笔记一

目录 一、Mybatis特性二、快速入门1.导入依赖2.mybatis-config.xml配置3.创建mapper接口4.创建MyBatis的映射文件5.通过junit测试功能 三、MyBatis获取参数值的两种方式&#xff08;重点&#xff09;1.单个字面量类型的参数2.多个字面量类型的参数3.map集合类型的参数4.实体类类…

【六一特别文章】Python编写一个六一儿童节问答小游戏及趣味比赛

随着六一儿童节的到来&#xff0c;我们可以为孩子们编写一个有趣的小游戏&#xff0c;让他们在游戏中学习有关六一儿童节的知识。本文将介绍如何用Python编写一个六一儿童节问答小游戏及趣味比赛。 首先&#xff0c;我们需要准备一些有关六一儿童节的问题和答案。这里我准备了…

云原生之docker详解

目录 1.云原生概念 1.1 云原生定义 1.2 云原生元素 1.2.1 微服务 1.2.2 DevOps 1.2.3 持续交付 1.2.4 容器化 2. Docker 2.1 Docker概述 2.1.1 Docker 定义 2.1.2 Docker应用场景 2.1.3 Docker的架构 2.2 Docker命令 2.2.1 docker进程相关命令 2.2.2 docker镜像…