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

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(使用前将#替换为@)

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

  • CentOS7部署FTP

    文章目录 1 安装FTP2 配置FTP3 创建登录用户4 修改 etc pam d vsftpd 文件5 新建系统用户vsftpd xff0c 用户目录为 home vsftpd6 建立虚拟用户个人配置文件7 重启 1 安装FTP 0 关闭
  • Ceph-Quincy-17.2.1版本集群部署

    文章目录 1 环境准备1 1 关闭防火墙1 2 关闭Selinux1 3 配置yum源1 4 时间同步1 5 cephadm下载 2 部署2 1 环境依赖2 2 cephadm部署集群2 3 扩容节点2 4 添加OSD服务2 5 创建一个文
  • Ceph文件存储-挂载文件系统

    文章目录 1 创建文件系统1 1 方法11 2 方法2 2 挂载文件系统3 卸载 1 创建文件系统 1 1 方法1 span class token number 1 span 创建存储池 ceph osd pool create tgmf
  • sshd: Cloudn‘t open /dev/null : permission denied

    1 问题 在通过 MobaXterm 链接节点时 xff0c 报错如下 xff1a Remote side unexpectedly closed network connection systemctl restart sshd 重启 s
  • CentOS8联网部署Ceph-Quincy集群

    文章目录 1 环境准备1 1 关闭selinux1 2 关闭防火墙1 3 配置免密1 4 设置yum源1 5 安装依赖1 6 设置时间同步1 7 安装docker 2 安装Ceph2 1 安装cephadm2 2 部署ceph集群2 3 集
  • 有时间细读这些书

    1 Windows程序设计 第5版 珍藏版 xff1a 这是很经典的一本介绍Win32 API编程的书了 xff0c 基本介绍到了大多数关于Windows程序设计的基本内容 2 Windows程序设计 王艳平版 xff1a 这本和上一本的区
  • reStructuredText(.rst)语法规则快速入门

    reStructuredText是一种轻量级的文本标记语言 xff0c 直译为 xff1a 重构建的文本 xff0c 为Python中Docutils项目的一部分 其一般保存的文件以 rst为后缀 在必要的时候 xff0c rst文件可以被
  • VHDL移位操作

    通过SLL实现五比特数的移动 xff0c 另外常见的还有 SRL 逻辑右移 实现数据右移 xff0c 左端补0 xff1b SLA 算术左移 实现数据左移 xff0c 同时复制最右端的位 xff0c 填充在右端空出的位置 xff1b SRA
  • 过孔----通孔,盲孔,埋孔

    过孔 xff08 via xff09 是多层 PCB 的重要组成部分之一 xff0c 钻孔的费用通常占 PCB 制板费用的 30 40 简单的来说 xff0c PCB 上的每一个孔都可以称之为过孔 从作用上看 xff0c 过孔可以分成两类
  • RS-422与RS-485传输线上的匹配

    对RS 422与RS 485总线网络一般要使用终接电阻进行匹配 但在短距离与低速率下可以不用考虑终端匹配 那么在什么情况下不用考虑匹配呢 xff1f 理论上 xff0c 在每个接收数据信号的中点进行采样时 xff0c 只要反射信号在开始采样
  • 小明分享:SSD201/202系统烧录篇,多种烧录方式,小明都做了分享,有需要的小伙伴拿走不谢哈!更多资料需求可以关注我,我是启明云端的小明MM!

    一 ISP 烧录 当 flash 没有烧过系统或系统损坏时 xff0c 可以先通过 ISP 烧录 boot xff0c 然后再通过 eth usb 或 sd 烧录完整的系统 下载并解压 tools ssd201 ISP 5 0 15 rar
  • CAN总线详解

    概述 CAN xff08 Controller Area Network xff09 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 xff0c 它起初用于实现汽车内ECU之间可靠的通信 xff0c 后因其简单实用可靠等
  • 终端电阻对CAN总线的作用和影响

    在CAN总线测试中 xff0c 会遇到找不出原因的错误 xff0c 那你可能忽略了一个解决异常的利器 终端电阻 究竟终端电阻对CAN总线有什么重要作用和影响呢 xff1f 电信号在电缆中的传播与光相似 xff0c 光从空气射入水中会发生光的
  • CAN总线

    最近在看stm32的通讯部分由于can总线在工业上的应用 xff0c 我选择以can总线为突破口进行学习 实际上在串口通讯所有的协议中 xff0c can总线也是我认为最复杂的一个协议 看了几天 xff0c 为了能够更加通俗的理解can的原
  • 「过孔盖油」、「过孔塞油」

    作为刚接触PCB板的新手 xff0c 是否有遇到过这样的疑问 xff1a 过孔盖油和过孔塞油听起来差不多 xff0c 是不是同一种东西 xff1f 确实两者听起来很像 xff0c 但实际上这是两个完全不一样的的制作要求 过孔盖油的专业解释是
  • 【转】过孔

    在一个高速印刷电路板 PCB 中 xff0c 通孔在降低信号完整性性能方面一直饱受诟病 然而 xff0c 过孔的使用是不可避免的 在标准的电路板上 xff0c 元器件被放置在顶层 xff0c 而差分对的走线在内层 内层的电磁辐射和对与对之间
  • HDC2021技术分论坛:OpenHarmony驱动框架解读和开发实践

    转自 xff1a OpenAtom OpenHarmony 作者 xff1a yuanbo xff0c 华为高级工程师 在IoT时代下 xff0c 终端设备差异较大 形态各异 尺寸各异 交互方式各异 xff0c 解决设备适配问题无疑是实现万
  • UR5+robotiq_85_gripper GAZEBO模拟视觉抓取平台仿真-2

    6 视觉算法 这里我以OpenCv中的SIFT描述子检测目标物体相对于相机的位姿 这里有个开源的包 find object 2d是ROS平台下一个功能强大的识别物体的功能包 由于对于纯颜色物体具有很少的特征 xff0c 所以我决定把另外两个
  • 浅析ros下修改订阅话题

    通过rostopic list 可以查看发布的话题 xff0c 可以看到有 tag detections和 tf话题 xff0c 那麽我们先编写订阅 tag detections xff0c 然后根据此模板订阅成 tf 1 xff0c 首先
  • 软件正在改变世界,程序员应该得到足够尊重

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

随机推荐

  • Ubuntu20.04 通过DD命令克隆自动驾驶开发环境

    第一 准备环境 双硬盘 xff08 Ubuntu20 04系统盘 存储镜像文件盘 xff09 说明 xff1a 本人机器是自动驾驶环境 xff0c 所以系统有些大 xff0c 约180G 第二 命令执行 xff1a 进入命令控制台 xff1
  • Gazebo学习笔记4:模型编辑器

    原文链接 xff1a http gazebosim org tutorials cat 61 guided b amp tut 61 guided b3 文章目录 模型编辑器 Model Editor 用户界面选项板 左面板 Palette
  • error while loading shared libraries的解決方法

    自己编译一些程序 xff0c 而程序难免会引用到别的so文件 xff0c 但是有些so问总是找不到 报 xff1a error while loading shared libraries 类似的错误 Rserve error while
  • Android 使用自定义字体

    Android 使用自定义字体 自定义字体介绍 Android在早期的时候 xff0c 没有使用自定义字体的方案 xff0c 设备只能使用原生字体 xff0c 想要使用自定义字体必须编写大量的代码 最近 xff0c Google为Andro
  • SpringBoot整合MyBatis-Plus实现分页

    使用MyBatis Plus实现分页 配置MyBatis Plus分页插件 span class token annotation punctuation 64 Configuration span span class token key
  • Shiro+JWT实现前后端分离登录验证

    Shiro 43 JWT实现前后端分离登录验证 导入相关的jar包 span class token generics span class token punctuation lt span dependency span class t
  • 过两小时后,自动更新mysql中的字段

    现在的项目中有一个需求 xff0c 就是扫码支付的二维码有效期只有两个小时 xff0c 两个小时后二维码就会失效 xff0c 想要记录这个失效的状态 xff0c 就要用mysql中的定时器来自动更新字段 创建存储过程 span class
  • 微信扫码支付

    微信扫码支付用的是apiv3接口 xff0c 点击查看微信扫码支付官方文档 编写微信支付封装实体类 span class token comment 微信平台证书VO 64 author shenlu 64 date 2020 12 21
  • MongoDB查询时根据对象中的对象的属性进行判断

    接受同事留下来的项目 xff0c 没想到运行的时候还有bug xff0c 无法对对象的对象的属性进行条件查询 xff0c 非常操蛋 xff0c 琢磨了一下午终于解决了 话不多说 xff0c 贴代码 span class token anno
  • 解决Nacos服务注册使用Docker容器内网ip问题

    一 问题 使用docker部署的jar启动时注册到nacos上的ip会使用docker的内网ip跟端口作为注册地址 xff1a 这样会导致使用gateway路由转发时报错 xff1a span class token class name
  • Dubbo3.0 整合 Nacos

    首先呢 xff0c 这个项目分为provider提供者和consumer消费者 xff0c 使用的版本是dubbo3 0 7 xff0c nacos是2 0 4 xff08 注意 xff1a 要使用dubbo3 xff0c nacos的版本
  • Kafka动态启用消费者

    1 设置监听器禁止自启动 span class token class name KafkaListenerContainerFactory span span class token generics span class token p
  • Gazebo 学习笔记之构建一个Robot 1:模型目录的结构和要求

    文章目录 概述1 模型数据库存储库2 模型数据库的结构2 1 插件目录2 2 Meshes 目录2 3 Material 目录2 4 数据库配置 Database Config2 5 模型配置 Model Config2 6 模型 SDF2
  • 已解决:Android Studio 报错No IDEA annotations attached to the JDK 1.8, some issues will not be found

    今天把sdk删了 xff0c 重装 xff0c 然后打开AS后发现 No IDEA annotations attached to the JDK 1 8 some issues will not be found 的警告 项目无法运行 x
  • Android Studio配置模拟器AVD移动至其他盘

    平时我们在Android Studio中使用的模拟器 xff0c 这些模拟器会在C盘中创建模拟器镜像文件 在C Users UsersName android中 xff0c avd文件夹就是用来存放模拟器镜像文件的 xff0c 为了节省c盘
  • Python3 虚拟环境激活

    如果你正在使用Python3 xff0c 虚拟环境已经成为内置模块 xff0c 可以直接通过如下命令来创建它 xff1a python3 m venv venv 注 xff1a 这个命令不一定能够执行成功 xff0c 比如译者在Ubuntu
  • 培训机构众多,如何选择优秀嵌入式培训机构?

    为什么说选择一个优秀的 专业的嵌入式培训学校很重要 xff1f 选择优秀的嵌入式培训学校 xff0c 学习嵌入式技术 xff0c 您将可能找到一份好工作 xff0c 得到10倍 xff0c 甚至100倍价值回报 xff1b 从此你将有独立生
  • 接口防重方案设计

    幂等性原理 xff1a 前台的多次请求 xff0c 对于后台 xff0c 也是同一次请求 xff1b 通常接口设计方式 xff1a 1 前端的页面提交按钮置灰 xff0c 防止用户重复点击 xff1b 2 对前端提交的token进行校验 x
  • 微信小程序-轮播图实现

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

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