微服务容器化实践——微服务引入的问题和解决方案

2023-11-02

什么是微服务?

使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且它们可以通过自动化的方式部署。

在这里插入图片描述
关于微服务的其他内容,我的以下文章可以一一说明:

多微才算微服务?
其实微服务这个微不是以代码量或者开发时间来度量的,它传递的是一种开发思想,而不是固定的一个量。其思想表现如下:

  1. 单一职责
    紧密相关的业务放在一起,“高内聚低耦合”,比如说订单和支付可以作为一个服务,登录和注册可以作为一个服务,又比如邮件服务、短信服务。
  2. 轻量级的通信
    微服务与微服务之间的通信,应该使用轻量级的通信。什么是轻量级的通信呢,其应该做到与平台无关,和语言无关,比如说HTTP就是轻量级的通信。什么不是轻量级的通信呢,比如JAVA的RMI,.NET的remoting,虽然它们在各自的语言环境中都非常的方便,但是无法跨语言。
  3. 隔离性
    微服务都运行在自己的进程中,不会相互干扰。
  4. 业务数据的独立性
    要求每个微服务都有自己独立的数据存储系统,以降低数据结构的复杂度。
  5. 技术的多样性
    能够根据业务选择技术工具,并且提供自己的API以供调用。比如有的是Java、golang、nest.js开发,但是能够互相访问。

微服务的不足

  1. 服务的拆分和定义是一项挑战
    服务的拆分是一门很深的学问,感兴趣可以详细了解TDD、DDD。拆分的太小,服务太细,服务之间的调用过于复杂,会造成不必要的性能损失,而且也要考虑团队的数量。服务太大,就会丧失微服务的优势。

  2. 分布式系统的一致性
    微服务有自己的数据库。

  3. 沟通成本
    微服务API的改变带来的沟通成本。

微服务的好处

  1. 可以持续交付和持续部署
    微服务拥有持续交付和部署的可测试性可部署性。开发团队是松散解耦合的。
  2. 每个服务相对较小并容易维护
  3. 服务可以独立扩展
  4. 具有更好的容错性
  5. 更容易实验和采纳新技术

微服务架构引入的问题及解决方案


  1. 微服务之间如何通讯?

说到通讯呢,我们可能会想到,TCP/IP、HTTP、WEBSOCKET或者想到DUBBO、ZOOKEEPER等等,这么多的通讯方法,如何抉择?我们可以从两个方向来考虑通讯的问题。

从通讯模式的角度考虑
在这里插入图片描述
从通讯协议的角度考虑

  • REST API
  • RPC
  • MQ

  1. 微服务如何发现彼此?

服务发现的本质其实是服务调用者如何来发现服务提供者的ip和端口号。

传统服务一般就是通过Nginx进行负载均衡的转发,Nginx指定ip和端口号,一般是通过配置文件指定的,是写死的。配置文件的更新需要运维人员来手动操作。

如果是微服务的话,由于微服务数目众多,如果靠运维人员来手动操作的话,消耗人力也很大。所以微服务一般都是自动的服务发现,并且分为两类:

  • 客户端发现
  • 服务端发现

在这里插入图片描述
微服务启动的时候,会把自己的ip和端口号告诉注册中心,然后客户端通过查询注册信息得知微服务的ip端口号和列表,然后通过本地的负载均衡策略,来进行微服务的访问。
在这里插入图片描述
服务同样的把自己的ip和端口号注册到注册中心,但这客户端不会去访问注册中心了。客户端通过一个固定的ip访问到具有服务发现和负载均衡的服务,再由它将请求转发给后端的具体服务,并且将服务的应答转发给客户端。


  1. 微服务如何进行部署?更新?扩容?

微服务为了保证其高可用,一般会部署两个以上的相同服务,并且微服务很多,更新很频繁,这就需要服务编排

流行的服务编排工具:

  • Mesos
  • Swarm
  • Kubernetes

K8s以前介绍过很多了,也是这三者中处于霸主地位的工具,不多做介绍了。

单体架构与微服务架构的对比

微服务优势:

  • 交付速度
    服务拆分后,各个服务可以独立、并行开发测试和部署,交付效率会更快。代码规模越大,微服务的优势越明显。
  • 故障隔离范围
    单体是线程级的,微服务是进程级的。所以整体上,微服务的可用性更高。
  • 架构持续演进
    微服务粒度更小,不存在大规模重构导致的各种问题,但是存在服务粒度划分的问题。
  • 沟通效率
    关于这一点争论不一,我认为微服务将团队规模缩小,但是需要的沟通没有明显减少,主要还是看组织架构,如果权力下方,不出现决策瓶颈点(Netflix最初的决策就是:既然沟通太费时费力,那就划分团队,尽量不沟通),能够提高沟通效率。
  • 可重用性
    微服务,尤其是结合阿里提出的“大中台,小前台”的策略,其可重用性是单体不及的。

单体优势:

  • 一致性实现成本
    微服务一致性保障需要额外付出精力。
  • 时延
    服务划分后,调用次数增加,导致响应时间增加、吞吐降低。
  • 资源成本
    吞吐降低意味着更多的资源成本。
  • 运维和开发复杂度
    微服务更高。

一般来说,产品初期会优先选用单体架构,业务复杂到一定程度后,微服务架构消耗的成本才会体现出优势。

我认为,其过程应该是满足 单体–>组件化–>微服务–>中台 的。在《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》一书中,也说明了这一点,并不需要一开始就微服务化,成本过高,每个阶段都需要一定时间的沉淀。

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

微服务容器化实践——微服务引入的问题和解决方案 的相关文章

  • Spring Cloud微服务项目实战笔记(二)是什么推动了单体应用到微服务架构的演进?

    首先对比的是单体应用 一个有问题 大家都完蛋 重新回滚到上一版本 开发测试沟通成本也大 微服务架构的优势 每个微服务是一个小的完整单位 独立的代码库数据库 自己去快速迭代功能 快速迭代 快速回滚 资源利用大大提高 大幅降低协作成本 高可用
  • 面试官问:微服务的4种部署策略有哪些,什么区别?

    在项目迭代的过程中 不可避免需要 上线 上线对应着部署 或者重新部署 部署对应着修改 修改则意味着风险 目前有很多部署发布的技术 这儿将常见的做一个总结 上面所说难免有些抽象 举一个情景例子 加入你是微博项目负责人员 现在新版本较原来的老版
  • Nacos配置文件 Param ‘serviceName‘ is illegal, serviceName is blank

    今天学习NACOS配置文件时 报错Param serviceName is illegal serviceName is blank 但是我在bootstrap yml文件中配置了服务名 父工程引入的依赖版本为最新的2021 1
  • B站S11破亿直播在线稳定性保障秘籍——演讲实录

    英雄联盟 S11全球总决赛 决赛中国战队夺冠 赛事直播盛况空前 观赛人数破亿 B站作为英雄联盟2021全球总决赛直播独家版权方不仅在整个比赛过程中保证了直播整体总体运行的平稳 还抗住了超预期的流量 如此大型的直播活动 B站究竟是如何保障系统
  • 【项目实战】大文件断点续传,搞起

    今天给大家分享的又是一篇实战文章 也是最近私活里遇到的 万能的互联网给了我办法 分享一下 背景 最近接到一个新的需求 需要上传2G左右的视频文件 用测试环境的OSS试了一下 上传需要十几分钟 再考虑到公司的资源问题 果断放弃该方案 一提到大
  • The Raft Group [naming_instance_metadata] did not find the Leader node;caused: The Raft Group

    1 异常信息 caused errCode 500 errMsg do metadata operation failed caused com alibaba nacos consistency exception Consistency
  • 一直在说高并发,多少QPS才算高并发?

    高并发的四个角度 只说并发不提高可用就是耍流氓 可以从四个角度讨论这个问题 首先是无状态前端机器不足以承载请求流量 需要进行水平扩展 一般QPS是千级 然后是关系型数据库无法承载读取或写入峰值 需要数据库横向扩展或引入nosql 一般是千到
  • 微服务系列:Spring Cloud Alibaba 之 Sentinel 高级流控规则

    微服务系列 Spring Cloud Alibaba 之 Sentinel 基本流控规则 在上一篇中 我们学习完了 Sentinel 的基本流控规则 这篇我们来研究一下 Sentinel 的高级流控规则 话不多说 开始今天的学习 一 概述
  • MQTT-java使用说明

    MQTT java使用说明 本文的资料下载 链接 https pan baidu com s 1OCfsQ NqcehKy86kYkA wg pwd 1234 提取码 1234 MQTT基本介绍 MQTT是一个客户端服务端架构的发布 订阅模
  • Redis主从集群

    Redis主从集群 1 集群结构 我们搭建的主从集群结构如图 共包含三个节点 一个主节点 两个从节点 这里我们会在同一台虚拟机中开启3个redis实例 模拟主从集群 信息如下 IP PORT 角色 192 168 150 101 7001
  • 从零开始实现基于go-zero框架的微服务电商项目(二)——User服务的基础搭建

    从零开始实现基于go zero框架的微服务电商项目 二 User服务的基础搭建 项目地址 liuxianloveqiqi XianShop 使用go zero搭建的电商项目 github com API 首先在api包下新建user api
  • Thrift、Dubbo、Spring Cloud 和 gRPC

    何为RPC RPC Remote Procedure Call 远程过程调用 是一种进程间通信方式 是一种技术的思想 而不是规范 它允许程序调用另一个地址空间 通常是共享网络的另一台机器上 的过程或函数 而不用程序员显式编码这个远程调用的细
  • 只要 3 个注解,优雅的实现微服务鉴权!

    原创 不才陈某 码猿技术专栏 2023 04 17 08 50 发表于山东 大家好 我是不才陈某 前面的文章中介绍了网关集成Spring Security实现网关层面的统一的认证鉴权 有不清楚的可以看之前的文章 实战干货 Spring Cl
  • SpringCloud-服务注册与发现

    服务注册与发现 前面我们没有服务注册中心 也可以服务间调用 为什么还要服务注册 当服务很多时 单靠代码手动管理是很麻烦的 需要一个公共组件 统一管理多服务 包括服务是否正常运行 等 Eureka用于 服务注册 目前官网已经停止更新 1 Eu
  • 微服务+Jenkins 简单的linux自动部署脚本

    No 1 启停脚本 bin bash 加载配置 避免获取不到java home source etc profile SERVICE HOME 项目路径 SERVICE NAME 服务名称 cd SERVICE HOME SERVICE N
  • 微服务项目之项目简介

    目录 项目模式 技术栈 项目架构图 模块 主模块 项目模式 电商模式 市面上有5种常见的电商模式 B2B B2C C2B C2C O2O 1 B2B模式 B2B Business to Business 是指 商家与商家建立的商业关系 如
  • java脚本引擎Groovy实战

    前言 互联网时代随着业务的飞速发展 不仅产品迭代 更新的速度越来越快 个性化需求也是越来越多 如何快速的满足各种业务的个性化需求是我们要重点思考的问题 我们开发的系统如何才能做到热部署 不重启服务就能适应各种规则变化呢 实现业务和规则的解耦
  • 【SpringCloud】整合Consul+OpenFeign实现微服务+负载均衡(下)

    一 代码 由于篇幅有限 代码见上一篇文章 https blog csdn net forest long article details 129287941 分别启动Consul Service provider Service consu
  • SpringCloud概述

    SpringCloud概述 1 SpringCloud是什么 2 SpringCloud和SpringBoot关系 3 Dubbo和SpringCloud技术选型 4 SpringCloud作用 1 SpringCloud是什么 现代化的J
  • 微服务测试是什么?

    微服务测试是一种特殊的 测试类型 因为它涉及到多个独立的服务 以下是进行微服务测试的一般性步骤 1 确定系统架构 了解微服务架构对成功测试至关重要 确定每个微服务的职责 接口 依赖项和通信方式 了解这些信息可以帮助您更好地规划测试用例和测试

随机推荐

  • Android ImageView视图的七种图片缩放类型

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 前言 ImageView默认图片居中显示 默认图片的缩放类型为 scaleType属性为 fitCenter 一 scaleType属性
  • 【严重】vm2 <3.9.18 沙箱逃逸漏洞(存在POC)

    漏洞描述 vm2 是一个基于 Node js 的沙箱环境 可以使用列入白名单的 Node 内置模块运行不受信任的代码 代理对象用于拦截并重定义宿主对象的各种操作 vm2 3 9 18之前版本中 由于 prepareStackTrace 函数
  • 【转】OSI TCP/IP 浅析

    OSI是Open System Interconnect的缩写 意为开放式系统互联 国际标准组织 国际标准化组织 制定了OSI模型 这个模型把网络通信的工作分为7层 分别是物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 一 网络
  • unity控制物体显示和隐藏的方法总结

    首先是物体的获取 代码如下 GameObject Find SampleAnchorMe 找到并返回一个名字为SampleAnchorMe的游戏物体 不能用于inactive的物体即隐藏的物体无法用find发现 GameObject Fin
  • 4:eMMC command

    1 前言 本文主要对eMMC的command进行详细介绍 主要包含如下内容 1 command类型 2 command格式 2 command类型 command类型 说明 bc 不带response的广播命令 bcr 带有response
  • 华为机试C语言-最长方连续方波信号

    题目描述 https zhuanlan zhihu com p 546563566 代码分层有利于代码调试 include
  • Okhttp设置公共参数,以json对象放入@Body请求公共参数的配置方式

    当网络请求都是基于一个URL 所有的接口都是同一个地址 而请求不同接口数据则是通过command字段进行配置 然后所有的请求参数都是需要自己写一个bean类 再转成json格式放入请求body里发给后台 而不是通过表单form body发送
  • MySQL之MVCC

    事务隔离级别 对于一个MySQL服务 可以有多个客户端与其建立连接 并向其发送SQL语句 一条SQL语句可能是一个事务的一部分 MySQL可以同时处理客户端的多个事务 一次事务对应着一次完成的状态转换 事务执行完毕后 需要保证数据符合客观逻
  • 622. 设计循环队列

    622 设计循环队列 Java实现循环队列设计 题目描述 设计你的循环队列实现 循环队列是一种线性数据结构 其操作表现基于 FIFO 先进先出 原则并且队尾被连接在队首之后以形成一个循环 它也被称为 环形缓冲器 循环队列的一个好处是我们可以
  • 比MyBatis Generator更强大的代码生成器

    本文为 从零打造项目 系列第一篇文章 首发于个人网站 从零打造项目 系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 前言 工欲善其事 必先利其器 作为 从零打造项目 系列的第一篇文章
  • 服务器被放入后门文件,服务器被***了怎么办 rkhunter的简单安装及检测后门

    被 了 查看了下 var log messages和last都已经清理 sshd spawn bin echo c d mail s 标题 邮箱地址 邮件来报警 一 接着查看 host allow里面设置 禁止某个可疑ip的访问 二 用rk
  • STM32CubeMX----基本定时器(TIM6、TIM7)

    基本定时器TIM6 TIM7 的相关参数 Activated 激活TIM6 把前面的方框选中局表示激活了TIM6 One Pulse Mode STM32F103定时器的One Pulse Mode是一种特殊的计数模式 它只产生一个脉冲输出
  • win10 安装mysql-5.7.23-winx64

    下载MYSQL 官网下载MYSQL5 7 23版本 链接地址https www mysql com downloads 下载流程图如下 2 安装 直接解压到D盘 解压后的目录结构为 注不需要手动新建data和my ini文件 这两个是通过命
  • 关于element-ui表格table设置header-cell-class-name样式不起作用的原因分析

    在编写表格的时候想给表头添加样式 使用 header cell class name怎么都添加不上样式 检查元素发现连class都没添加上 查了很多资料有人说element之前版本不支持这属性 但我使用的并不是之前的版本啊 有人说是添加sc
  • 柚城后台管理系统--Vue+ElementUi+MySQL+NodeJs

    柚城后台管理系统 介绍 该项目是基于前后端分离的开发模式 基于Vue技术栈的SPA单页面项目 后端主要操作数据库并向前端暴露一些API接口 前端主要负责绘制页面同时 利用ajax调用后端提供的接口 具体实现功能有 用户管理 权限管理 商品管
  • Aviator表达式

    1 正则表达式 匹配 Map
  • 如何在Unity中使用AR Foundation和ARCore创建一个项目并编译到Android 11手机设备中

    最近又开始学如何使用Unity进行AR开发 因为Unity开发的AR Foundation在各种设备 例如Android iOS HoloLens 的原生AR SDK 例如ARCore ARKit Windows 10 SDK 上进行了封装
  • Flutter Overlay、OverlayState、OverlayEntry 叠加 Toast Demo

    叠加组件 可以悬浮在其他组件上边 我们通常使用他开发Toast PopupWindow弹窗等 虽然可以直接创建Overlay 但最常见的是在WidgetsApp或MaterialApp中使用导航器创建的叠加层 使用方法 获取实例 Overl
  • ajax用iframe,使用ajax Post请求更新iframe内容

    我正在制作Rich文本编辑器 我有一个textarea和一个iframe 我想更新一个iframe内容点击某个按钮 其中ajax post请求传递给它textareas值 这是我的HTML代码 这是js view function func
  • 微服务容器化实践——微服务引入的问题和解决方案

    文章目录 什么是微服务 微服务的不足 微服务的好处 微服务架构引入的问题及解决方案 单体架构与微服务架构的对比 什么是微服务 使用一套小服务来开发单个应用的方式 每个服务运行在独立的进程里 一般采用轻量级的通讯机制互联 并且它们可以通过自动