所以,到底什么是微服务?

2023-05-16

1、微服务是一种软件架构,是聚焦在单一的职责和业务功能,具有独立的进程,能够单独运行的服务,并且与外部服务是通过HTTP进行交互通信的服务。

2、微服务比较常见的特性是,具有单一职责,具有松耦合,具有高内聚等特点;

3、所理解的微服务特性,对比起单体应用来说,具有以下特点:

(1)屏蔽技术限制:

如何理解技术限制,就是假设你用的微服务是采用了java语言,如果需要验证新的语言特性,比方采用go语言,那单体应用是没法去单独验证的,只有不同的微服务才能对某个微服务进行语言的替换和验证;

(2)快速的部署:

可以采用Jenkins持续集成到kubernetes集群,进行快速的集成部署,并且区别与单体应用,单体应用需要整体进行集成部署,但是对于微服务,可以选择性的部署对应的功能模块,由于微服务体量相对更小,部署的速度会更加的具有效率;

(3)故障隔离:

所谓的故障隔离,是指比方支付宝中,你在进行订单支付的操作,如果此时账单查询的服务坏了,并不会影响你正常进行订单支付的操作;

(4)容易掌控:

对于开发者而言,每个微服务相对独立,并且专注在某个业务功能,掌控起来自然比大的单体应用要更加的简单;

(5)可伸缩性;

这个特性可能是最重要的,还是比方一个电商管理系统,假设订单查询服务的访问量逐渐增多,服务器原本的配置已经无法抗住请求量,那就可以增加查询微服务的服务实例,对请求进行分发,降低服务器压力,这种伸缩方式具有最实际的效用,并且能最大化提升应用的性能;

4、微服务怎么设计:

既然功能描述的比较好,那如何来进行微服务的设计呢?

目前来说,业界一般采用领域驱动设计进行微服务的设计,所谓的领域驱动设计,即通过拉齐业务语言,识别出该应用具体分为哪些领域,比如可以分为核心业务领域(核心域),支撑性领域(支撑域),通用的业务领域(通用域)等等,比如说物流管理系统,分为物流域(核心域),客服域(通用域),销售域、仓储域(支撑域)

先通过业务角度,识别出每个领域的边界和职责,上下文的联系关系,领域驱动设计的核心述求就是:松耦合,高内聚;将业务架构映射到系统架构上,在响应业务变化调整业务架构时,也随之变化系统架构。

简单来说,领域驱动设计就是一套设计方式,通过拉齐业务和技术语言,通过战略侧的事件风暴,合理划分出对应的领域和界限上下文,进而到战术侧,识别出对应的领域模型,从而构建出代码的层次结构,后续可以出一文专门讲解下领域驱动设计内容;

5、对我们来说怎么用,客观辩证看待微服务架构:

那对于我们来说,应该怎么用呢,其实这要仔细探讨下,是否每个项目都是需要以微服务方式来做,固然微服务的特性是很好,但是非所有应用都能适用;

(1)微服务所需的基础设施多:

比如一个简单的单体应用,部署在云上,则所需资源是:

①负载均衡器

②一个服务实例

③一个关系型(或者非关系型)数据库

④用于日志检索的kibana

如果换做是微服务:

①一个kubernetes集群

②一个应用的负载均衡

③应用和集群的多个实例

④一个或者多个数据库,具体看服务的策略(是否一个服务对应一个数据库)

⑤一个用于服务间通讯的消息中间件,kafka,rocketMQ等

⑥用于持续集成的jenkins

⑦用于日志的kibana

⑧用于监控的Prommetheus

⑨还有用于跟踪的Zipkin

如果只是从高级的层面来看微服务架构,自然是优势的特性会很多,但是如果落到具体实施层面,所需考虑的运维成本会比想象得更高,比如这些部署的中间件,如果集群出现问题,如果消息中间件宕机了,如果这些服务间的消息没有及时消费,等等,那这些运维成本也会很高;

(2)微服务所需配套的文化:

如果业务部门,并不关心底层的系统实现,那么会对实际实施影响很大;

比如说,现在有个很复杂的微服务应用,它牵涉的服务有十来个,那么现在产品负责人,或者说产品经理,需要实现一个小需求,原本只是一周的工作量,但是由于服务之间的互相调用,功能上的依赖,实现这个需求可能要比单体应用多出几倍的工作量。往往这个时候,就要看是否产品负责人,或者业务部门,能够认可这个底层带来的工作量变化。

(3)无法很好的划分微服务:

虽然现在有DDD(领域驱动设计)方法论进行引导,但是对于大部分项目而言,都需要有资深的架构师,并且具有微服务实战经验的,才能真正的落地出比较好的实践,不然对于新手或者接触不久的人而言,现在对微服务的划分,和业务领域的识别,是没法达到真正的高内聚,低耦合的。

这可能造成的后果是,无法将微服务拆分到合适的大小,并且有明确的边界,在后期扩展,迭代过程中,能够一直保持服务的独立性,非强依赖性。

而且微服务如果拆分太小,假设一个应用,拆了50+的微服务,那对应的部署速度不是更快了,而是更慢了,毕竟在jenkins部署时候,或者构建服务时候,都可能出现问题,服务越多,问题就越多,部署成本就越高。

综合来看,是否需要采用微服务架构,还是要看具体的应用复杂度,结合已有的资源,和运维成本,是否 能够覆盖,这样才能更全面判断是否要采用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

所以,到底什么是微服务? 的相关文章

  • 机器学习之:载入数据

    加载公共的开放数据 通过url链接下载 通常网上有很多开放数据供算法测试 通常要用到urllib从给定的链接下载 例如从UCI机器学习数据仓库中下载的数据 xff1a span class token keyword import span
  • shell脚本:如何记录计算时长以及如何保存日志文件

    python和matlab都有非常友好的记录时间的方式 xff0c 且不说python的time xff0c datetime工具包 xff0c matlab的tic xff0c toc命令简单好记 xff0c 都是程序时间很好的记录工具
  • MRI-FSL pipeline 多进程并发和并发数控制

    shell脚本并发 在MRI预处理pipeline串行执行非常耗时 非常有必要将pipeline并行化 在linux环境下 并行计算可以有多种实现方法 例如在shell中通过转入后台的方式 或者用xargs多进程并发 还可以用fifo管道实
  • 增长黑客 - 开源项目增长利器

    2012 年我开源了自己的第一个项目 https github com allwefantasy ServiceFramework 这个项目并不成功 xff0c 但对我个人的价值还是比较大的 xff0c 一直作为我工具箱用到现在 从 16
  • vagrant(三):网络配置

    网络配置 所有的网络设置都可以通过配置Vagrantfile来实现 具体来说 xff0c 就是在Vagrantfile中调用config vm network进行相关的设置 vagrant支持以下三种网络配置 xff1a Forwarded
  • vagrant(四):共享目录

    vagrant共享目录 共享目录synced folder 参数共享目录类型 共享目录 共享目录可以设置Vagrant在宿主机 host 和虚拟机 guest 之间同步文件 xff0c 这样做的好处是可以在宿主机上开发 xff0c 在虚拟机
  • FSL的python和R语言接口

    FSL除了本身支持shell命令调用以外 还有一些其他语言的工具包 例如 python和R fsl的python编程库称为fslpy 是可视化工具FSLeyes的一部分 fslpy目前支持python 3 5 3 6 and 3 7开发环境
  • linux rm 命令误删文件恢复

    不小心用rm命令删错了文件 该怎么办 查看分区和文件格式 误删的文件在哪里 首先 用rm命令误删了文件 并不是不可以恢复 首先需要查看一下误删文件所在的分区和文件格式 df T 文件系统 类型 1K 块 已用 可用 已用 挂载点 dev s
  • MRI相关的基本概念

    磁共振基础 磁共振 磁共振 mageticresonanceMR xff1b 在恒定磁场中的核子 xff08 氢质子 xff09 xff0c 在相应的射频脉冲激发后 xff0c 其电磁能量的吸收和释放 xff0c 称为磁共振 基本参数 TR
  • 服务器搭建: 用户管理

    文章目录 查看当前用户用户类型多用户管理用户和用户组的概念添加用户adduser命令useradd命令 用户组管理给用户添加sudo权限删除用户 备注 xff08 1 xff09 etc passwd文件 xff08 2 xff09 etc
  • scikit learn工具箱pipeline模块:串联方法

    scikit learn工具箱pipeline模块 xff1a 串联方法 pipeline模块 scikit learn工具箱的pipeline模块提供了将算法模型串联 并联的工具 xff0c 多个estimator并联起来用于模型结果比较
  • ANOVA与机器学习

    文章目录 方差分析ANOVA组间变异和组内变异均方差F分布与F值方差分析的关键条件 Anova在机器学习中的应用 特征选择总结更多阅读 方差分析ANOVA anova analysis of variance 方差分析 又称 34 变异数分
  • FSL 功能磁共振影像分析: single-session

    文章目录 什么是single session分析基于HRF的模型信号多元回归t contrastf contrast single session分析是fmri实验分析的最简单情况之一 xff0c 这里以FSL官方的例子为例 xff0c 总
  • MRI图像处理:VBM原理和步骤

    VBM是voxel based morphometry的缩写 xff0c 是对被试之间灰质体素粒度统计分析 VBM可以得到人群中volume和gyrification的不同 xff0c 对clinical score进行相关性分析 xff0
  • 创新不是靠痛点,而是靠对效率的持续追求

    什么都等到痛了才去做 xff0c 要你何用 在互联网行业做产品 xff0c 亦或是创业给投资人讲故事 xff0c 一个很核心的点就是要问自己或者告诉对方 xff0c 我的产品击中了什么痛点 xff1f 似乎一切都是靠痛点驱动的 但我认为这是
  • linux压缩文件解压

    文件格式解压方法 zipunzip FileName zip xzxz d FileName tar xz 或者 tar xvJf FileName tar xz bzbzip2 d FileName bz 或者 bunzip2 FileN
  • linux开机启动顺序

    文章目录 linux的开机启动顺序概述BIOS basic input output system 基本输入输出系统MBR master boot record 主引导记录 主引导程序总结 第一个程序 init运行等级System V in
  • 机器学习模型评估与改进: 交叉验证(cross validation)

    文章目录 交叉验证调用方法优势和不足注意事项 xff1a 分层k折交叉验证交叉验证的更多变形leave one out交叉验证Shuffle split交叉验证组间的交叉验证 总结 以监督学习的众多算法为例 xff0c 不管是分类还是回归
  • MRI机器学习工具箱nilearn: masker

    masker 对象的概念 对于任何基于神经影像的研究来说 第一步都是要加载数据 由于通常MRI是3D的 fmri加上时间这个轴 是4D的 对于机器学习模型来说 这种4D的数据结构不便于分析 nilearn中 masking data 本质上
  • 机器学习模型评估与改进:网格化调参(grid search)

    文章目录 简单网格化搜索参数过拟合的风险网格搜索与交叉验证 模型调参接口 GridSearchCV函数整体流程GridSearchCV 函数对交叉验证进一步分析不同核方法的情况网格化搜索中应用其他交叉验证策略嵌套交叉验证并行化 总结附注 x

随机推荐

  • 特征工程: 特征, 特征提取和特征选择

    文章目录 机器学习中的特征特征的重要性 特征提取和特征选择去除方差较小的特征单变量特征选择 Univariate feature selection F检验与互信息 其他特征选择方法重复性特征删除 用模型选择 并入pipeline 机器学习
  • 模型评估:评估矩阵和打分

    文章目录 目标优先二分类问题的评价指标第一类错误和第二类错误非均匀数据集混淆矩阵 正确率 精确率 召回率和f score不知道标签均匀性的情况精度 召回曲线和ROC曲线精度 召回曲线 xff08 precision recall curve
  • UEFI BIOS模式下Windows系统启动过程以及引导文件修复方法

    有关UEFI BIOS基础知识的简介 xff0c 一年前在网易博客做过详细的概述 鉴于某些网友仍然对UEFI下Windows的启动过程不甚了解 xff0c 虽然网上有各式各样的启动修复工具 xff0c 但是对于新手来说 xff0c 如果不明
  • spark python脚本在命令行的执行方法

    有时候我们的pyspark代码需要在服务器上运行 xff0c 那么具体的运行方法是什么呢 xff1f pysprk aa py 只需要在pyspark后面写上自己想要运行的python文件即可 xff0c 是不是很简单 xff0c 哈哈哈
  • 迁移Linode服务器

    迁移Linode服务器 从美国将Linode的一个服务器迁移到日本的机房 xff1a 1 首先为了保证数据的完整性 xff0c 把两台VPS主机都关机 2 到新的VPS主机控制面板那样把Disk Image和Swap Image给删除了 x
  • JAVA 正则表达式 (超详细)

    新网站上线 欢迎大家 网站交易中心 在这里你可以购买或者出售你的网站 网站信息发布中心 在这里有各种交易信息的发布 同时提供 一些软件的免费使用 xff08 附有源码 xff09 网站博客系统 这里你可以注册自己的博客 一个账户无限量博客
  • mysql查看binlog日志内容

    mysql的binlog日志位置可通过show variables like 39 datadir 39 查看 xff0c 直接打开无法查看 xff0c 要看其内容2个办法 xff1a 1 登录到mysql查看binlog 只查看第一个bi
  • 常用模拟器及ROM下载地址

    Nintendo Nintendo Entertainment System Super Nintendo Entertainment System Nintendo 64 Project64 https www pj64 emu com
  • Linux下安装jdk配置报错:-bash: java: command not found

    可能是jdk解压有问题 xff0c 重新解压然后source etc profile xff1a 使配置生效 再 java version来查看配置成功没
  • IP地址段范围写法

    A类IP段 0 0 0 0 到127 255 255 255 B类IP段 128 0 0 0 到191 255 255 255 C类IP段 192 0 0 0 到223 255 255 255 XP默认分配的子网掩码每段只有255或0 xf
  • 有时间细读这些书

    1 Windows程序设计 第5版 珍藏版 xff1a 这是很经典的一本介绍Win32 API编程的书了 xff0c 基本介绍到了大多数关于Windows程序设计的基本内容 2 Windows程序设计 王艳平版 xff1a 这本和上一本的区
  • linux中systemctl详细理解及常用命令

    一 systemctl理解 Linux 服务管理两种方式service和systemctl systemd是Linux系统最新的初始化系统 init 作用是提高系统的启动速度 xff0c 尽可能启动较少的进程 xff0c 尽可能更多进程并发
  • Linux查看网速命令

    watch 34 ifconfig eth0 grep byte 34
  • 软件正在改变世界,程序员应该得到足够尊重

    软件无处不在 xff0c 越来越多的人离不开软件 xff0c 你打开电脑 xff0c 你使用手机 xff0c 你购物娱乐 软件一直在帮你 xff0c 软件已经渗透到我们的工作 生活 娱乐的方方面面 xff0c 软件每一天都在改变着这个世界
  • apache2.4 配置多个版本的 php7,php8)

    不多说 xff0c 直接上配置修改 httpd conf lt IfDefine php7 gt Listen 82 LoadFile 34 D php 7 2 34 libssh2 dll 34 LoadModule php7 modul
  • 叉乘怎么记忆,计算

    以一个例子直观记忆叉乘 xff1a 引用自 向量积 百度百科 baidu com 在这个式子中 xff0c 我们可以清楚地看到三项分别是i xff0c j xff0c k 前面则是他们的系数 我们可以直接把i xff0c j xff0c k
  • 接口防重方案设计

    幂等性原理 xff1a 前台的多次请求 xff0c 对于后台 xff0c 也是同一次请求 xff1b 通常接口设计方式 xff1a 1 前端的页面提交按钮置灰 xff0c 防止用户重复点击 xff1b 2 对前端提交的token进行校验 x
  • Spark Streaming 与 Kafka 集成分析

    前言 Spark Streaming 诞生于2013年 xff0c 成为Spark平台上流式处理的解决方案 xff0c 同时也给大家提供除Storm 以外的另一个选择 这篇内容主要介绍Spark Streaming 数据接收流程模块中与Ka
  • 微信小程序-轮播图实现

    好久不见 xff0c 今天小h来分享一下如何实现一个微信小程序的轮播图实现方式 xff1a 前提条件是具有微信开发者工具 xff0c 还有对应的开发者ID xff0c 这些基础条件我这边就直接跳过了哈 xff0c 直接进入正题 xff1a
  • 所以,到底什么是微服务?

    1 微服务是一种软件架构 xff0c 是聚焦在单一的职责和业务功能 xff0c 具有独立的进程 xff0c 能够单独运行的服务 xff0c 并且与外部服务是通过HTTP进行交互通信的服务 2 微服务比较常见的特性是 xff0c 具有单一职责