当前位置: 首页 > news >正文

微服务学习:基础理论

一、微服务和应用现代化

1、时代的浪潮,企业的机遇和挑战

在互联网化+数字化+智能化+全球化的当今社会,IT行业也面临新的挑战:

  • 【快】业务需求如“滔滔江水连绵不绝”,企业需要更快的交付
  • 【变】林子大了,百色用户,企业需要提供更个性化、更精细、随时变化的服务体验
  • 【巨】万川汇聚,一叶扁舟,企业需要处理浩如烟海般的请求与数据,同事确保平稳与准确

企业想要在竞争中取得优势,必须比对手更快地把产品推出市场;拥抱市场变化,随时快速地相应用户新需求;不断扩大用户规模,持续增加处理吞吐。如果不能在瞬息万变的市场情况下做出快速反应,那只能被远远地甩在身后。

2、新技术的出现,为微服务奠定了发展的基础

  • 移动化、云计算、物联化,促进了新型业务模式创新,需要依赖技术和新平台
  • 容器技术的出现,为服务多了以后如何自动化部署、如何运维提供了完美的解决方案,解决了微服务“最后一公里”落地的问题,从而完成了微服务生态最后一块拼图。
  • Devops理念已逐渐被业界广泛接受,越来越多的企业开始践行Devops实施。Devops为微服务的开发、测试及运维的自动化提供了坚实的基座。

3、新时代IT行业面临的四个变化

  • 用户行为的变化:业务应用的用户访问不可预估,突发性访问增多,微博事件和小红书海外流量突然激增就是最好的案例
  • 业务模式的变化:所有业务访问都是通过互联网渠道,包括Web、手机APP、微信小程序等
  • 业务系统开发的变化:应用再也不像以前半年/一年进行规划,随时会有需求变化,两周一个迭代成为常态。业务应用交付周期短,质量要求高
  • 运维模式的变化:要求全天候值守,在线升级和快速响应。不同团队特别是外包团队使用不同的技术栈,无法统一管控

因此,我们评估是否需要采用微服务架构,往往考察这五大关键条件:

  • 数据量和业务复杂度
  • 团队规模
  • 应对业务流量变化
  • 是否需要足够的容错容灾
  • 功能重复度和差错成本

二、服务理论基础与设计原则

什么是微服务?
一起合作独立小服务单元

1、微服务理论基础——康威定律

组织形式等同系统设计——设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构

  • 第⼀定律:Communication dictates design(组织沟通⽅式会通过系统设计表达出来)
  • 第⼆定律:There is never enough time to do something right, but there is always enough
    time to do it over(时间再多⼀件事情也不可能做的完美,但总有时间做完⼀件事情)
  • 第三定律:There is a homomorphism from the linear graph of a system to the linear graph
    of its design organization(线型系统和线型组织架构间有潜在的异质同态特性)
  • 第四定律: The structures of large systems tend to disintegrate during development,
    qualitatively more so than with small systems(⼤的系统组织总是⽐⼩系统更倾向于分解)
    在这里插入图片描述

第⼀定律:组织沟通⽅式会通过系统设计表达出来

5个⼈的项⽬组,需要沟通的渠道是 5*(5–1)/2 = 10
15个⼈的项⽬组,需要沟通的渠道是15*(15–1)/2 = 105
50个⼈的项⽬组,需要沟通的渠道是50*(50–1)/2 = 1,225
150个⼈的项⽬组,需要沟通的渠道是150*(150–1)/2 = 11,175

⼈与⼈的沟通是⾮常复杂的,⼀个⼈的沟通精⼒是有限的,所以当问题太复杂需要很多⼈解决的时候,我们需要做拆分组织来达成对沟通效率的管理

在团队内部进⾏频繁的、细粒度的沟通。对于团队外部,定义好接⼝,契约,只进⾏粗粒度的沟通。这样可以降低沟通成本,同时也符合⾼内聚,低耦合原则
在这里插入图片描述

第二定律:时间再多⼀件事情也不可能做的完美,但总有时间做完⼀件事情

复杂的系统需要通过容错弹性的⽅式持续优化,不要指望⼀个⼤⽽全的设计或架构,好的架构和设计都是慢慢迭代出来的

复杂系统包括但不限于以下模块:

  • 持续集成
  • 敏捷开发
  • 弹性伸缩
  • 监控告警
  • 灰度发布
  • 熔断隔离

拥抱变化,解决当下,先完成一个一个小目标

第三定律:线型系统和线型组织架构间有潜在的异质同态特性

你想要什么样的系统,就搭建什么样的团队,反之亦然。
在这里插入图片描述

第四定律:合久必分,分而治之

⼀个⼤的组织因为沟通成本/管理问题,总为被拆分成⼀个个⼩团队(2 pizza team)
在这里插入图片描述

2、微服务的标准

通过康威定律可以得出行为标准:

  • ⽤⼀切⼿段提升沟通效率。能2个⼈讲清楚的事情,就不要拉更多⼈,每个⼈每个系统都有明确的分⼯,出了问题知道⻢上找谁,避免踢⽪球。
  • 通过MVP(最⼩化可实⾏产品,Minimum Viable Product)的⽅式来设计系统,通过不断的迭代来验证优化,系统应该是弹性设计的。
  • 你想要什么样的系统设计,就架构什么样的团队。最好按业务来划分团队,让团队⾃然⾃治内聚,明确的业务边界会减少和外部的沟通成本。
  • 做⼩⽽美的团队,⼈多会带来沟通的成本,让效率下降。

从而得出微服务的核心标准:

  • 分布式服务组成的系统
  • 按照业务而不是技术来划分组织
  • 做有生命的产品而不是项目
  • 去中心化
  • 自动化运维(Devops)
  • 容错
  • 快速演化

3、微服务设计战略

在这里插入图片描述

三、微服务改造

1、微服务架构VS单体架构

在这里插入图片描述

2、微服务架构面临的挑战

  • 运维要求较高:需要保证几十甚至几百的微服务的正常运行与协作,给运维带来很大的挑战
  • 分布式固有的复杂性:系统容错、网络延迟、分布式事务等问题需要解决
  • 接口调整成本高:修改一个微服务的API,可能需要所有使用该接口的微服务做出调整
  • 可能得重复劳动:多个微服务可能使用相同的功能,但功能本身并没有达到可以分解成微服务的程度,从而导致代码重复

3、如何改造

改造路径:

在这里插入图片描述

微服务与微服务平台

在这里插入图片描述

单体架构的微服务化

在这里插入图片描述

相关文章:

微服务学习:基础理论

一、微服务和应用现代化 1、时代的浪潮,企业的机遇和挑战 在互联网化数字化智能化全球化的当今社会,IT行业也面临新的挑战: 【快】业务需求如“滔滔江水连绵不绝”,企业需要更快的交付【变】林子大了,百色用户&…...

C++实现设计模式---迭代器模式 (Iterator)

迭代器模式 (Iterator) 迭代器模式 是一种行为型设计模式,它提供了一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 意图 提供一种方法,可以顺序访问一个容器对象中的元素,而无需暴露其…...

海康工业相机的应用部署不是简简单单!?

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 笔者使用的设备及环境:WSL2-Ubuntu22.04MV-CS016-10UC 不会吧?不会吧?不会还有人拿到海康工业相机还是一脸懵叭?不会还有人…...

Windows电脑安装File Browser与cpolar轻松搭建本地云盘

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队,都希望能够有一个高效、安全的解决方案来…...

mac配置 iTerm2 使用lrzsz与服务器传输文件

mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…...

【HBuilderX 中 Git 的使用】

目录: 一:安装必要的版本控制工具二:把Github上的项目克隆到本地三:将本地的项目上传到Github上 一:安装必要的版本控制工具 1️⃣ 安装 TortoiseGit 工具,下载地址:https://tortoisegit.org/do…...

Golang结合MySQL和DuckDB提高查询性能

要在Golang中组合MySQL和DuckDB以提高查询性能,请考虑使用混合查询执行方法。这种方法利用了MySQL强大的事务管理和DuckDB闪电般的分析处理能力。本文介绍如何充分利用两者的方法。 各取所长 用MySQL处理事务,用DuckDB处理分析 MySQL应该处理常规的INS…...

学技术学英语:TCP的三次握手和四次挥手

单词 汉语意思 音标 acknowledge 承认,确认 /əkˈnɒl.ɪdʒ/ acknowledgment 确认,承认 /əkˈnɒl.ɪdʒ.mənt/ duplex 双向的 /ˈdjuː.pleks/ establish 建立 /ɪˈstb.lɪʃ/ handshake 握手,握手协议 /ˈhnd.ʃeɪk…...

xiao esp32 S3播放SD卡wav音频

本文旨在使用xiao esp32 S3 播放SD卡上的音频文件 1 硬件准备 SD卡 2 代码实现 2.1 依赖库 ESP32-audioI2S-master 2.2 代码 #include "Arduino.h" #include "Audio.h" #include "SD.h"// Digital I/O used #define I2S_DOUT 6 #defi…...

Unity中实现伤害跳字效果(简单好抄)

第一步骤安装并导入Dotween插件(也可以不用导入之后直接下载我的安装包) 官网DOTween - 下载 第二步: 制作跳字预制体 建议把最佳适应打开,这样就不怕数字太大显示不全了。 第三步:创建一个空对象并编写脚本JumpNumbe…...

GaussDB日常维护操作

GaussDB日常维护操作 日常维护检查操作系统参数数据库健康状态日志收集日志清理应用连接数表的例行维护索引重建慢SQL诊断 日常维护检查 实例状态检查: #检查集群实例状态 gs_check -U omm -i CheckClusterStatecm_ctl query -Cvipd#检查主备DN的角色和同步状态 g…...

redis实现限流

令牌桶逻辑 计算逻辑: 代码: import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;/*** ClassName RedisRateLimiterTokenBucket* Description TODO* Author zhang zhengdong* DATE 2025/1/17 20:22* Version 1.0*/ public class…...

基于SpringBoot和PostGIS的各国及所属机场信息检索及可视化实现

目录 前言 一、空间数据简介 1、全球国家信息表 2、机场信息表 3、国家机场检索实现 二、SpringBoot后台实现 1、模型层实现 2、控制层实现 三、WebGIS可视化实现 1、Leaflet界面实现 2、国家及其机场可视化成果 3、全球机场数量排行榜 四、总结 前言 新春佳节即将…...

python http server运行Angular 单页面路由时重定向,解决404问题

问题 当Angular在本地ng server运行时候,可以顺利访问各级路由。 但是运行ng build后,在dist 路径下的打包好的额index.html 必须要在服务器下运行才能加载。 在服务器下我们第一次访问路由页面时是没有问题的,但是尝试刷新页面或手动输入路…...

GPT-4o背后的语音技术

GPT-4o背后的语音技术 GPT-4o是一个any2any的多模态模型,能够接受文本、音频、图像、视频等多模态输入,也能够生成包含文本、语音、图像和视频等混合内容的多模态输出。本文主要谈语音多模态的实现,并分享一些对于语音研究未来发展的看法。 GPT-4o (“o” 代表 “omni”) …...

微透镜阵列精准全检,白光干涉3D自动量测方案提效70%

广泛应用的微透镜阵列 微透镜是一种常见的微光学元件,通过设计微透镜,可对入射光进行扩散、光束整形、光线均分、光学聚焦、集成成像等调制,进而实现许多传统光学元器件难以实现的特殊功能。 微透镜阵列(Microlens Array&#x…...

Spring boot框架下的RocketMQ消息中间件

1. RocketMQ 基础概念 1.1 核心概念 以下是 RocketMQ 核心概念在 Spring Boot 的 Java 后端代码中的实际使用方式: Producer(生产者) 定义:Producer 是负责发送消息到 RocketMQ 的组件。它可以将消息发送到指定的 Topic。 实…...

记录一次 centos 启动失败

文章目录 现场1分析1现场2分析2搜索实际解决过程 现场1 一次断电,导致 之前能正常启动的centos 7.7 起不来了有部分log , 关键信息如下 [1.332724] XFS(sda3): Internal error xfs ... at line xxx of fs/xfs/xfs_trans.c [1.332724] XFS(sda3): Corruption of in-memory data…...

C++学习第五天

创作过程中难免有不足,若您发现本文内容有误,恳请不吝赐教。 提示:以下是本篇文章正文内容,下面案例可供参考 一、构造函数 问题1 关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下…...

openharmony标准系统方案之瑞芯微RK3568移植案例

标准系统方案之瑞芯微RK3568移植案例 ​本文章是基于瑞芯微RK3568芯片的DAYU200开发板,进行标准系统相关功能的移植,主要包括产品配置添加,内核启动、升级,音频ADM化,Camera,TP,LCD&#xff0c…...

用Python+OpenCV手把手实现Prewitt边缘检测(附完整代码与效果对比图)

用PythonOpenCV手把手实现Prewitt边缘检测(附完整代码与效果对比图) 边缘检测是计算机视觉中最基础也最关键的预处理步骤之一。想象一下,当你需要让计算机"看清"一张照片中的物体轮廓时,边缘检测算法就是它的"视觉…...

网易云音乐NCM转MP3终极指南:ncmdump工具完整使用教程

网易云音乐NCM转MP3终极指南:ncmdump工具完整使用教程 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经从网易云音乐下载了心爱的歌曲,却发现只能在特定播放器上收听?NCM格式的限制让音乐…...

从Gamma函数到泊松分布:一个概率论中的含参量积分实用案例解析

Gamma函数与泊松分布:概率论中的数学之美 在数据科学和机器学习的实践中,概率分布构成了建模的基石。当我们深入探究这些分布背后的数学原理时,Gamma函数以其优雅的性质和广泛的应用脱颖而出。它不仅连接了离散与连续概率世界,更在…...

CANoe诊断测试没CDD文件怎么办?手把手教你用Fault Memory窗口和CAPL脚本读取解析DTC故障码

CANoe诊断测试无CDD文件的实战解决方案:从Fault Memory到CAPL脚本全解析当CDD文件缺失或定义不清晰时,诊断测试工程师常常陷入困境。本文将深入探讨如何利用Fault Memory窗口的基础功能,并通过CAPL脚本实现更灵活、更强大的故障码读取与解析方…...

Graphin高级应用:结合GISDK构建配置化图分析模块的完整指南

Graphin高级应用:结合GISDK构建配置化图分析模块的完整指南 【免费下载链接】Graphin 🌌 A React toolkit for graph visualization based on G6. 项目地址: https://gitcode.com/gh_mirrors/gr/Graphin 在当今数据驱动的时代,图可视化…...

榨干Codex!OpenAI工程师亲授Codex真正用法

你可能把 Codex 当编程助手用,改改代码,跑跑测试。但它的能力远不止于此。OpenAI 的客户支持工程师 Jason(jxnlco)告诉你,Codex 其实是一套完整的电脑工作系统,从语音输入到自动化,从浏览器操控…...

真可用!美团数字人模型开源,MV、电商等统统拿下

美团开源的数字人视频生成框架 LongCat-Video-Avatar 刚刚更新到 1.5 版本。是真能用。这版更新把音频编码器换了,推理步数砍到8步,在770人、13240条主观评分的大规模评测里,雷达图面积全面领先。音频编码器换血,8步出图LongCat-V…...

Unity项目DrawCall降不下来?试试用Mesh Baker合并贴图集,保姆级图文教程

Unity性能优化实战:用Mesh Baker合并贴图集降低DrawCall全流程解析当你的Unity项目帧率开始卡顿,Profiler里DrawCall数字居高不下时,合并贴图集往往是解决问题的关键一步。本文将以一个实际项目为例,带你从零开始使用Mesh Baker的…...

零基础怎么学Agent?这个工程师考试内容拆给你看

站在 AI Agent(智能体)爆发的十字路口,很多既没有深厚算法背景、也没有丰富写代码经验的“小白”常常感到迷茫:动辄谈及的大模型交互、复杂的业务编排,零基础真的能学会吗? 事实上,智能体开发早…...

英雄联盟回放播放难题终极解决方案:ROFLPlayer完整使用指南

英雄联盟回放播放难题终极解决方案:ROFLPlayer完整使用指南 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为英雄联盟旧…...