microservices 简介

news2025/1/12 8:54:00

油鹳视频 Microservices explained - the What, Why and How?
https://www.youtube.com/watch?v=rv4LlmLmVWk&t=2s


microservices 是一种软件体系结构, microservices architecture(微服务架构) 是与传统的 monolithic architecture(整体式架构,一体式架构) 相对而言的。简单地说,微服务架构就是将一个大的 app 进行拆分,分成若干小的的应用程序,各自独立开发部署。

1 一体式架构 monolithic architecture

1.1 一体式架构的特点

  1. 所有组件都合属于一个单一的整体: user-auth, product-catalog, shopping-cart, payment…
  2. 所有组件都作为一个整体进行开发,部署以及扩展。
  3. App 各组件必须使用同一技术栈。
  4. 组件相互依存,各个组件开发团队必须小心避免影响到其他团队的开发。
  5. 一个组件被修改,整个 app 重新部署。

1.2 一体式架构面临的挑战

  1. app 太大太复杂
  2. 各个组成部分纠缠在一起
  3. 如果需要扩展就必须扩展整个 app,不能是单个模块,单个服务。
  4. 不同的组件依赖于相同的第三方组件,然而各自依赖的版本却不同,该如何解决这个问题?

在这里插入图片描述

  1. 任何组件发生改变,整个 app 必须重新测试,重新构建,重新部署。
  2. 任何模块的 bug 都能让整个 app crash。

为了应对如上问题,出现了 microservices architecture 微服务软件架构 。

2 微服务架构 microservices architecture

使用微服务架构,将一体式的 app 进行拆分,分成多个更小的、独立的应用程序 / 微服务,这些相互独立的微应用程序共同组成一个大型的 app。

这些不同的微服务可以由不同的 team 使用不同的技术栈独立进行开发部署。

在这里插入图片描述

要使用这种架构,需要考虑如下问题:

  1. 如何拆分 app?

  2. 要拆分成多少个 microservices?

  3. microservices 的规模?

  4. 如何组织这些 microservices?

  5. 这些被拆分的 microservices 之间如何通信?

2.1 app 的拆分

根据业务功能对 app 进行拆分,以在线购物 app 为例,拆成 user, products, shopping carts, checkout 等不同的 micorservice,一个 micorservice 负责一项特定的工作。
各个 micorservice 高内聚,micorservice 之间低耦合,各个 micorservice 的开发、部署与扩展与其他 micorservice 互相独立。各个 micorservice 也因此拥有各自独立的版本,发布周期各自独立,如果更新并部署 一个 micorservice,其他 micorservice 不受影响。

在这里插入图片描述

2.2 微服务之间如何通信

2.2.1 使用 API 调用通信

在这里插入图片描述

各个微服务之间使用 API 通信,这种通信方式为同步通信

2.2.2 使用 Message Broker 通信

一种 Message Broker: RabbitMQ

在这里插入图片描述

在这里插入图片描述

微服务首先与 Message Broker 通信,再由 Message Broker 转发,这种通信方式为异步通信

2.2.3 使用服务网格 service mesh 进行通信

这种通信方式也被 Kubernetes 广为使用。

在这里插入图片描述

3 微服务架构的缺点以及解决方案

微服务架构本质上是一个分布式系统,这种体系结构比整体式架构复杂。首先需要配置各个微服务之间的通信,而且监视分布在多个服务器上的微服务实例也非易事。

Kubernetes 是运行大型微服务应用程序的完美平台, 除此以外, HashiCorp 也可以用于微服务架构开发。

在这里插入图片描述

4 微服务的 CI/CD 管道

CI /CD: Continuous Integration/ Continuous Delivery
持续集成 / 持续交付,
( delivery: 分发,交付,部署 )
在这里插入图片描述
一些大型应用程序由上百个 microservice 组成,每天进行数千次的部署,CI/CD 管道用于配置 release 过程。

5 代码管理:Monorepo vs Polyrepo

组织和管理代码有两种方法, Monorepo (单个库) vs Polyrepo (多个库)

在这里插入图片描述

1, 使用单个 git 库,存放若干工程代码。缺点,容易产生高耦合代码,代码库巨大,push pull 等操作变慢,需额外设置 CI/CD 管道。(CI/CD 平台有 gitlab, jenkens) 虽有缺点,但 Google 就使用 monorepo.

2,使用多个 git 库,一个库一个微应用程序。
Gitlab 使用 group 将多个共属于一个app的工程放到相同的组。

在这里插入图片描述

Polyrepo 也有缺点,例如多个项目之间资源共享变得困难,项目之间的切换变得繁琐等等。

所以这两种方法各有优缺点,基本的原则是,小的项目使用单个库 monorepo,如果开发大型 app,有多个 team,使用多个库 polyrepo 则是更好的选择。


  1. https://aws.amazon.com/cn/microservices/

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

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

相关文章

微信转盘抽奖小程序如何制作?

微信转盘抽奖小程序如何制作?大概需要多少钱? 价格方面,平台按年收费,一年1498至2498元。 明码标价,7天退款制度,随时退。 微信转盘抽奖小程序如何制作步骤: 1.进入第三方微信转盘抽奖小程序制作平台官…

计算机结构体系:指令调度与循环展开题型 (非凭感觉的方法详解)

文章目录题目初始分析1.确定所使用的各个寄存器的作用2.将循环体内容语句和控制语句分开3.找出每一条循环体内容指令的代价并排序4.找出每一条循环体控制指令的代价并排序5.基于贪婪算法的最优循环展开体系结构这门课程中,指令调度和循环展开可以说是课程最困难的地…

负载均衡反向代理下的webshell

负载均衡(Load Balance) 是一种廉价的扩容的方案,它的概念不是本文的重点,不知道的可以去查资料学习。实现负载均衡的方式有很多种,比如 DNS 方式、HTTP 重定向方式、IP 负载均衡方式、反向代理方式等等。 其中像 HTTP 重定向方式、DNS方式等…

BioPython ② | 面向对象编程Object Oriented Programming

BioPython ② | Python面向对象编程 题目要求 定义分子类(Molecule)作为基类,包含集合elements和weight作为其属性,用初始化函数,将elements初始化为空集,weight初始化为None;定义show_weight…

进阶 - Git的远程仓库

本篇文章,是基于我自用Windows(Win10)系统当做示例演示 Git的远程仓库 之前我们一直在探讨 Git 的一些命令,也提及了仓库的概念。如果只是在一个仓库里管理文件历史,Git 和 SVN 真没啥区别。 Git 是分布式版本控制系…

02 stata入门【计量经济学及stata应用】

安装:建议直接在微信搜索,很多公众号有安装包资源及下载教程 不同版本在基本功能上无较大差异,一般为SE,更为专业MP,只是在处理变量个数或容量等存在不同 界面 历史命令;结果窗口&命令窗口&#xff1b…

字节跳动岗位薪酬体系曝光,看完感叹:不服不行,想高薪还得是学这个。。。。

目录:导读 前言 01岗位职级 02岗位薪酬 03绩效考核与晋升 大厂软件测试岗经验分享 一、软件测试基础篇:2022版 二、MySQL篇:2022版 三、 Linux篇:2022版 四、 Web测试 五、接口测试 六、APP测试 七、性能测试 八、Se…

Nacos一些理解

下载Mysql //下载mysql docker pull mysql:5.7 //运行容器 docker run -p 3306:3306 --name mysql -v /home/mysql/log:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORDxx -d mysql:5.7 将导入数据库 1.新建数据库 nacos /*Navicat Premiu…

HyperMesh宝典 | 跟着老师学,你也可以做好二次开发

说到二次开发,你的脑海里是不是浮现出了“码农”两个字?有人可能会问,码农又是什么? 你是不是觉得二次开发这种码农干的事情感觉起来也太困难了吧? 其实有时候二次开发真的很简单,懂一点二次开发会让你的工…

机器学习中的数学原理——多项式回归

这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言!这一篇就更新一下《白话机器学习中的数学——多项式回归》! 目录 一、什么多项式回归 二、算法…

Java#33(IO流)

目录 一.IO流 作用: (对于程序而言)用于读写数据(本地数据, 网络数据) 二.IO流体系 1.字节输出流 2.字节输入流 3.文件拷贝 3.字符集 字符流 字符输入流 字符输出流 缓冲流 转换流 序列化流 ​编辑反序列流 打印流 一.IO流 I: input O: output 流: 想流…

Linux下创建动态链接库与静态链接库

动态链接库 Linux下的动态链接库文件扩展名为so,可以用多个文件生成一个动态链接库。 在头文件中定义三个函数,三个函数分别于三个cpp文件中实现。 将三个cpp文件编译成动态库libdynamic.so -fPIC表示编译为位置独立的代码,如果不选择默…

使用YOLOv5练自己的数据集

说明 上次使用学习了如何运行yolov5检测自己的数据,这次学习yolov5如何训练自己的数据集 本次记录如何使用yolov5训练自己的数据集以及遇到报错解决方案 数据 使用数据:水果数据集 数据包含了png图片和相应的标注文件 切分数据 代码如下&#xff1…

[ vulhub漏洞复现篇 ] solr 远程命令执行(CVE-2019-0193)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

Kubernetes的基础概念

一、Kubernetes的介绍 用于自动部署、扩展和管理"容器化(containerized)应用程序"的开源系统 可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是一个生态极其丰富的容器编排框架工具 …

【现场问题】zookeeper的集群,其中两台起来了,但是另外一台就是起不来,或者起来也是standalone

zookeeper问题现象集群的配置zookeeper的启动以及状态查看问题报错点问题现象 1、总共三台机器,node92,node93,node94 其中node92做了拉起,但是node93(leader)和node94(follower)&a…

浅谈MVVM ——Model-View-View-Model

浅谈MVVM ——Model-View-View-Model 前言: 笔者最近接到这样一个机器人项目,接入他们的机器人平台做二次开发,开发自己的opk移植到机器人上做医院展示使用。opk是必须使用机器人厂家提供的经过一定封装过的,该opk的架构是MVVM。…

48W字?GitHub上下载量破百万的阿里:图解Java、网络、算法笔记

Java基础这个东西,无论在哪个公司都被看得尤为重要,而面试中关于基础的问题也是层出不穷。所以基础可以说是重中之重,当你的基础打牢了,其他的也就没有那么重要了。 说到基础,无外乎操作系统,网络&#xf…

pikachu-CSRF-SSRF-RCE速通

pikachu-CSRF-SSRF-RCE速通 目录pikachu-CSRF-SSRF-RCE速通CSRFCSRF(get)CSRF(post)CSRF TokenSSRFSSRF(curl)SSRF(file_get_content)RCEexec "ping"RCE exec "eval"CSRF 跨站请求伪造,说的通俗一点就是攻击者构造出某个网站的数据包请求并部署…

p3.第一章 基础入门 -- Python编程基本概念 (三)

1.2.2 Python语言 1.2.2.1 Python发展 1989年圣诞节期间,为了打发无聊的时间,荷兰人Guido van Rossum(吉多范罗苏姆)(数学、计算机双硕士,2005年加入Google,2013年加入DropBox)&am…