聊聊微服务之什么是微服务及其好处

2023-05-16

一 什么是微服务

微服务就是一些协同工作的小而自治的服务

很小,专注于做好一件事

在单一模块系统中,随着新功能的增加,代码库会越来越大。时间久了代码库会变得非常庞大,以至于在什么地方修改都很困难。尽管有时候在巨大的项目中做到了清晰的模块化,但事实上这些模块之间的界限很难维护。相似的代码随处可见,使得修复bug或实现新功能更加困难。
我们在开发某个功能时的一个指导原则是“高内聚,低耦合”,微服务是将这一理念应用在独立的服务上。根据业务边界来确定服务的边界,这样就很容易确定某一功能代码该放在哪里。由于服务专注于某个边界之内,因此,可以很好地避免由于代码量过大而衍生出的各种问题。
一个微服务多小合适呢?这个没有统一的标准。按业务功能拆分也可,可以足够小,但不能太小。也可以根据团队的组织结构进行相匹配,一个团队五到十人。

自治性

  1. 一个微服务就是一个单独的尸体。它可以单独低部署在PAAS上,也可以作为一个单独的操作系统进程存在。
  2. 这些服务之间是通过网络调用进行通信的,从而加强了服务之间的隔离性,避免紧耦合。
  3. 微服务可以彼此单独进行修改,并且某个服务的部署不应该引起该服务的消费方的变动。
  4. 服务暴露的API的实现技术应该避免与消费方耦合。

二 微服务的主要好处

微服务有很多不同的好处,其中很多好处也适用于任何一个分布式系统。但相对于分布式系统或者面向服务的架构而言,微服务更胜一筹,它会把好处推向极致。

技术异构性

在一个有多个服务相互协作的系统中,可以在不同的服务中使用最适合该服务的技术。如果系统中的一部分需要做性能提升,可以使用性能更好的技术栈重新构建该部分。比如在社交网络系统中,可以使用图数据库处理用户之间的交互操作,文档数据库处理用户发的帖子。

弹性

在单块系统中,如果服务不可用,那么所有的功能都会不可用。虽然单块系统可以通过将相同的实例运行在不同的机器上来降低功能的完全不可用的概率,然而微服务本身就能很好地处理服务不可用和功能降级的问题。
微服务系统虽然可以改进弹性,但是也必须谨慎对待,因为一旦使用了分布式系统,网络就会是个问题。

扩展

庞大的单块服务只能作为一个整体进行扩展。即使系统中只有一小部分存在性能问题,也需要对整个服务进行扩展。如果使用较小的多个服务,则可以对只需要扩展的服务进行扩展,这样可以把不需要扩展的服务运行在更小,性能较差的硬件上。

简化部署

在有着几百万行代码的单块服务应用中,即使修改一行代码,也需要重新部署整个应用,这种部署的影响很大、风险很高。往往为了减少部署频率,一般都是做了很大改动后在进行异常部署。这样就带了另一个问题,两次发布之间的差异越大,出错的可能性就更大!
在微服务架构中,各个服务的部署是独立的,这样就可以更快地对特定部分的代码进行部署。万一出了问题,也只是影响一个服务,并且容易快速回滚。

与组织结构相匹配

在项目开发中,团队和代码过大很容易引起这样那样的问题。当团队是分布式的时候,问题更明显。微服务架构可以很好地将架构和组织结构相匹配,避免出现大量的代码库,从而获得理想的团队大小及生产力。

可组合性

在微服务架构中,系统会开放很多接口供外部使用。当情况发生改变是,可以使用不同的方式构建应用。

可替代性

我们经常在公司遇到维护旧系统的情况,一个庞大而丑陋的遗留系统,无人敢碰,更不敢重构,唯一的原因就是 工作量太大,并且风险极高。但是在微服务架构中,由于每个服务功能单一,并且代码量也很小,重新实现某个服务或者直接删除该服务都相对可操作。

三 没有银弹

微服务不是免费的午餐,更不是银弹,如果你想要得到一条通用准则,那么微服务是一个错误的选择。
每个公司、组织及系统都不一样。微服务是否适合你,或者说你能够多大程度上使用微服务,取决于很多因素。

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

聊聊微服务之什么是微服务及其好处 的相关文章

  • Docker指定网桥和指定网桥IP

    docker network ls NETWORK ID NAME DRIVER 7fca4eb8c647 bridge bridge 9f904ee27bf5 none null cf03ee007fb4 host host Bridge
  • Python Hash操作-MD5-SHA-HMAC

    Python标准库提供了计算数据Hash的功能 xff0c 支持许多不同的算法 xff0c 常见的MD5 SHA1 SHA256 HMAC均在其中 MD5 SHA1 SHA256在hashlib模块中 xff0c HMAC在hmac模块中
  • 离线环境下火狐浏览器Firefox完全信息迁移

    火狐浏览器Firefox是一个历史比较久的网页浏览器 xff0c 当前的火狐采用顺序数字命名的版本号演进 xff0c 迭代速度较快 xff0c Windows上可以自动升级 xff0c 升级带来了安全更新和功能特性上的变化 火狐浏览器具书签
  • 用SLF4J输出log的正确姿势

    slf4j是Java的一种Log Api xff0c 类似Apache Commons Logging 最直接的log方式 logger debug 34 Entry number 34 43 i 43 34 is 34 43 String
  • Thymeleaf消息表达式

    消息表达式用于从消息源中提取消息内容实现国际化 表达式的语法 xff1a span class token tag span class token tag span class token punctuation lt span p sp
  • Thymeleaf URL表达式

    URL在Thymleaf中是第一类公民 xff0c 有其专有的表达式语法 64 共存在2大类URL xff1a 绝对URL http www your domain相对URL xff0c 分为四类相对于页面 user login html相
  • Maven resources的include和exclude

    Maven resources plugin支持明确声明 lt directory gt 指定的资源目录中哪些资源需要处理 xff0c 哪些资源可以不被处理 lt include gt 指明需要包括的资源 xff0c 位于src my re
  • Thymeleaf条件判断

    th if th if属性求Bool值 xff0c 只有true的时候其所在的标签及该标签中的内容才会被渲染到输出结果中 lt a href 61 34 comments html 34 th href 61 34 64 product c
  • 2019 蓝桥杯省赛 A 组模拟赛(一)C. 结果填空:马的管辖 (暴力搜索)

    题目 xff1a 在中国象棋中 xff0c 马是走日字的 一个马的管辖范围指的是当前位置以及一步之内能走到的位置 xff0c 下图的绿色旗子表示马能走到的位置 如果一匹马的某个方向被蹩马脚 xff0c 它就不能往这个方向跳了 xff0c 如
  • Ubuntu下安装使用Xfce4

    安装 xff1a 代码 sudo apt get install xfce4 xfce4 taskbar plugin xfce4 taskbar plugin是我需要 xff0c 你可不用 xff0c 完整安装xfce4 的桌面环境 su
  • isdigit()函数如何判断负数

    在使用字符序列isdigt函数时 xff0c 我们会发现它无法判断负数 xff0c 如 xff1a a 61 39 2 39 39 3 39 4 5 print a 0 isdigit print a 1 isdigit 输出 xff1a
  • 用python操作浏览器的三种方式

    第一种 xff1a selenium导入浏览器驱动 xff0c 用get方法打开浏览器 xff0c 例如 xff1a import time from selenium import webdriver def mac driver 61
  • Linux-虚拟网络设备-veth pair

    基本概念 Virtual Ethernet CableBidirectional FIFOOften used to cross namespaces Linux container 中用到一个叫做veth的东西 xff0c 这是一种新的设
  • openstack-neutron-OVS agent(持续更新)

    概述 ML2Plugin的主要工作是管理虚拟网络资源 xff0c 保证数据正确无误 xff0c 具体物理设备的设置则由Agent完成 L2Agent通常运行在Hypervisor xff0c 与neutron server通过RPC通信 x
  • VUE中使用EventSource接收服务器推送事件

    Vue项目中 xff0c EventSource触发的事件中this指向变了 使用const that 61 this xff0c 然后在EventSource触发的事件中使用that if typeof EventSource 61 61
  • VNC

    一 安装tigervnc server 二 配置登录帐号 三 生成xstartup与log日志 注意 xff1a 如果没有使用vncserver来 设置密码 xff0c 则service vncserver restart 是不会成功的 这
  • DirectUI框架GUIFW

    前言 guifw是一款基于GDI 43 的DirectUI皮肤引擎 xff0c 借鉴了DuiLib和Qt的思想 效果预览 xff1a http download csdn net detail sllins 7707771 代码已开源 xf
  • keil 提示internal command error和no sw device

    1 使用keil烧录软件的时候 xff0c jlink stlink无法识别到芯片 需要排查的问题 1 xff09 换条线 2 xff09 是不是有程序禁用了Seral Wire xff1a 使用cubeide cubeMX xff0c 容
  • 多线程编程模式之Single Threaded Execution 模式

    一 Single Threaded Execution 模式介绍 简单的来说 xff0c Single threaded execution 模式描述了在一种多线程环境下各个线程对于公用资源的使用方式 任一时刻 xff0c 只有一个线程可以
  • NVIDIA Jetson TX2 查看系统相关+运行demo

    1 查看Jetson TX2 L4T版本 xff1a head n 1 etc nv tegra release 2 查看系统版本 xff1a cat etc lsb release 3 查看系统内核 xff1a uname a 4 查看内

随机推荐

  • Docker镜像迁移至新的服务器(全部数据)

    1 找到你想移动的 Docker 容器的 ID 2 提交你的变更 xff0c 并且把容器保存成镜像 xff0c 命名为 newimage docker commit span class token number 3 span a09b25
  • 配置VNC环境在windows主机访问阿里云linux服务器

    配置VNC环境在windows主机访问阿里云linux服务器 虽然作为服务器使用更多的是使用字符终端连接服务器 xff0c 进行操作 xff0c 因为图形界面很消耗性能和资源 xff0c 但有的时候使用图形界面进行操作更为便捷 xff0c
  • pythondataframe输出小结

    在使用dataframe时遇到datafram在列太多的情况下总是自动换行显示的情况 xff0c 导致数据阅读困难 xff0c 效果如下 xff1a coding utf 8 import numpy as np import pandas
  • 聊聊 Redis 为什么构建自己的简单动态字符串 SDS

    我们知道 xff0c Redis 支持字符串 哈希 列表 集合和有序集合五种基本类型 那么我们如何把图片 音频 视频或者压缩文件等二进制数据保存到 Redis 中呢 xff1f 之前在使用 Memcached 缓存这类数据时是把它们转换成
  • 聊聊 Redis 高可用之持久化AOF和RDB分析

    Redis 持久化概述 Redis 是内存数据库 xff0c 数据都是存储在内存中 xff0c 为了避免进程退出导致数据的永久丢失 xff0c 需要定期将 Redis 中的数据以某种形式把内存中的数据保存到磁盘中 xff1b 当 Redis
  • mysqldump: Got error: 1044: Access denied for user XXXX when doing LOCK TABLES

    一 报错信息 在使用mysqldump 执行远程备份数据库的时候报如下错误 xff1a mysqldump Got error span class token number 1044 span Access denied span cla
  • jmap -heap [pid]运行报:Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException(不允许的操作)

    一 运行环境 操作系统 xff1a Ubuntu 5 4 0 6 Java版本 xff1a JDK8 二 执行命令 jmap heap span class token punctuation span pid号 span class to
  • chkconfig: command not found

    问题描述 在 ubuntu1 16 04 10 执行 chkconfig 命令报 chkconfig command not found 说明此服务上没有安装 chkconfig 执行如下命令进行安装 span class token fu
  • Docker 基础篇 之 安装

    一 Docker安装 查看 CentOS 内核版本 Docker 要求 CentOS 系统的内核版本高于3 10 执行如下命令查询 内核版本 span class token function uname span r span class
  • Java 基础 之 Valid 验证

    一 64 Valid 简介 Bean Validation 内置的校验器 校验器说明 64 Null被注解的元素必须为 null 64 NotNull被注解的元素必须不为 null 64 AssertTrue被注解的元素必须为 true 6
  • HttpURLConnection链接详解

    HttpURLConnection链接详解 一 简介 简单来说 xff0c HttpURLConnection 是 Java 提供的发起 HTTP 请求的基础类库 xff0c 提供了 HTTP 请求的基本功能 xff0c 不过封装的比较少
  • Apache HttpClient 详解

    1 简介 HttpClient 是 Apache Jakarta Common 下的子项目 xff0c 用来提供高效的 最新的 功能丰富的支持 HTTP 协议的客户端编程工具包 xff0c 并且它支持 HTTP 协议最新的版本和建议 Htt
  • OKHttp使用详解

    1 简介 OkHttp 是一个默认高效的 HTTP 客户端 xff1a HTTP 2 支持允许对同一主机的所有请求共享一个套接字 连接池减少了请求延迟 xff08 如果 HTTP 2 不可用 xff09 透明 GZIP 缩小了下载大小 响应
  • python二维码生成与扫码

    1 import qrcode img 61 qrcode make 34 hello world 34 img get image show img save 39 hello png 39 2 import qrcode qr 61 q
  • C语言可变参数(从stdarg.h到应用)

    1 什么是可变参数函数 在C语言编程中有时会遇到一些参数可变的函数 xff0c 例如printf scanf xff0c 其函数原型为 xff1a span class token keyword int span span class t
  • OkHttp 缓存实战

    1 简介 在实际业务中可能某些查询数据 xff0c 不经常变化 xff0c 为了节省流量 提高响应速度和增强用户体验等 xff0c 把变化频率小的数据缓存到本地 xff0c 以实现复用 OkHttp 的缓存功能使用起来也比较简单和灵活 xf
  • Feign 详解

    1 Feign 是什么 Feign是一个http请求调用的轻量级框架 xff0c 可以以Java接口注解的方式调用Http请求 Feign通过处理注解 xff0c 将请求模板化 xff0c 当实际调用的时候 xff0c 传入参数 xff0c
  • @Transactional 注解失效情况及解决办法

    一 64 Transactional 注解在了非 public 方法上 如下所示 64 Transactional修饰在了非public方法上 span class token annotation punctuation 64 Servi
  • @Transactional 事务加了 锁 为什么还有并发问题?

    一 原因分析 Spring 中通过在方法上添加注解 64 Transactional 可以很好的处理事务问题 Spring对此的处理原理是对 加了 64 Transactional 注解的方法 添加 AOP切面来时先事务管理的 而 sync
  • 聊聊微服务之什么是微服务及其好处

    一 什么是微服务 微服务就是一些协同工作的小而自治的服务 很小 xff0c 专注于做好一件事 在单一模块系统中 xff0c 随着新功能的增加 xff0c 代码库会越来越大 时间久了代码库会变得非常庞大 xff0c 以至于在什么地方修改都很困