微服务架构介绍

news2024/12/23 8:23:37

e08cb6f80d334f16a8f6d169803e4f11.jpg系统架构的演变

 

 

1、技术架构发展历史时间轴

 

     

 

 ①单机垂直拆分:应用间进行了解耦,系统容错提高了,也解决了独立应用发布的问题,存在单机计算能力瓶颈。

 

   ②集群化负载均衡可有效解决单机情况下并发量不足瓶颈。

 

 

 

 ③服务改造架构

 

       虽然系统经过了垂直拆分,但是拆分之后发现有重复的功能,比如,用户注册、发邮件等等,一旦项目大了,集群部署多了,这些重复的功能无疑会造成资源浪费,所以会把重复功能抽取出来,名字叫"XX服务(Service)"。为了解决服务跟服务如何相互调用,需要一个程序之间的通信协议,所以就有了远程过程调用(RPC),作用就是让服务之间的程序调用变得像本地调用一样的简单。

 

     优点:在垂直架构的基础上解决了业务重用的问题。

 

 ④服务治理

 

  随着业务的增大,基础服务越来越多,调用网的关系由最初的几个增加到几十上百,造成了调用链路错综复杂,需要对服务进行治理。服务治理要求:当服务节点数几十上百的时候,需要对服务有动态的感知,引入了注册中心。当服务链路调用很长的时候如何实现链路的监控。单个服务的异常,如何能避免整条链路的异常(雪崩),需要考虑熔断、降级、限流。服务高可用:负载均衡。典型框架比如有:Dubbo,默认采用的是Zookeeper作为注册中心。

 

 

 

 ⑤微服务时代

 

 微服务是在2012年提出的概念,微服务的希望的重点是一个服务只负责一 个独立的功能。 拆分原则,任何一个需求不会因为发布或者维护而影响到不相关的服务, 一切可以做到独立部署运维。 比如传统的“用户中心”服务,对于微服务来说,需要根据业务再次拆分,可 能需要拆分成“买家服务”、“卖家服务”、“商家服务”等。 典型代表:Spring Cloud,相对于传统分布式架构,SpringCloud使用的是 HTTP作为RPC远程调用,配合上注册中心Eureka和API网关Zuul,可以做到细 分内部服务的同时又可以对外暴露统一的接口,让外部对系统内部架构无感, 此外Spring Cloud的config组件还可以把配置统一管理。

 

 

 

 

 

 

 

 

 

 

 

       Spring Cloud微服务架构存在的不足: Spring Cloud属于侵入式框架,在项目中需要添加spring cloud maven 依赖,加上spring cloud组件注解,写配置,打成jar的时候还必须要把非业务的代码也要融合在一起。 微服务中的服务支持不同语言开发,也需要维护不同语言和非业务代码 的成本; 业务代码开发者应该把更多的精力投入到业务熟悉度上,而不应该是非 业务上,Spring Cloud虽然能解决微服务领域的很多问题,但是学习成本还是较大的。 互联网公司产品的版本升级是非常频繁的,为了维护各个版本的兼容 性、权限、流量等,因为Spring Cloud是“代码侵入式的框架”,这时候 版本的升级就注定要让非业务代码一起,一旦出现问题,再加上多语言之间的调用,工程师会非常痛苦。 我们已经感觉到了,服务拆分的越细,只是感觉上轻量级解耦了,但是维护成本却越高了。

 

 

 

⑥服务网格新时期 (Service Mesh)

 

    Service Mesh主要解决的问题就希望开发人员对于业务的聚焦,服务发 现、服务注册、负载均衡等对于开发人员透明,可以更加专注业务逻辑的实 现。 如果将为微服务提供通信服务的这部分逻辑从应用程序进程中抽取出来, 作为一个单独的进程进行部署,并将其作为服务间的通信代理,可以得到如下 图所示的架构:

 

 

 

     当服务大量部署时,随着服务部署的Sidecar代理之间的连接形成了一个如下图所示的网格,该网格成为了微服务的通讯基础设施层,承载了微服务之间的所有流量,被称之为Service Mesh(服务网格)。

 

 

 

     服务网格中有数量众多的Sidecar代理,如果对每个代理分别进行设置,工作量将非常巨大。为了更方便地对服务网格中的代理进行统一集中控制,在服务网格上增加了控制面组件。

 

 

 

      服务网格用来描述组成这些应用程序的微服务网络以及它们之间的交互。随着服务网格的规模和复杂性不断的增长,它将会变得越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、度量和监控等。服务网格通常还有更复杂的运维需求,比如 A/B 测试、金丝雀发布、速率限制、访问控制和端到端认证。

 

 

 

Istio

 

    2017年5月24日,Google, IBM 和 Lyft 共同发布 Istio 的第一个公开版本(0.1)。Istio为一款开源的为微服务提供服务间连接、管理以及安全保障的平台软件,支持运行在Kubernetes、Mesos等容器管理工具,但不限于Kubernetes、Mesos,其底层依赖于Envoy。Istio提供一种简单的方法实现服务间的负载均衡、服务间认证、监控等功能,而且无需应用层代码调整。其控制平面由Pilot、Citadel 和 Galley组成,数据平面由Envoy实现,通常情况下,数据平面代理Envoy以sidecar模式部署,使得所有服务间的网络通信均由Envoy实现,而Istio的控制平面则负责服务间流量管理、安全通信策略等功能。

 

istio架构

 

 

 

     实际上Istio 就是 Service Mesh 架构的一种实现,服务之间的通信(比如这里的 Service A 访问 Service B)会通过代理(默认是 Envoy)来进行。而且中间的网络协议支持 HTTP/1.1,HTTP/2,gRPC 或者 TCP,可以说覆盖了主流的通信协议。代理这一层,称之为数据平面。控制平面做了进一步的细分,分成了 Pilot、Citadel 和 Galley,它们的各自功能如下:Pilot:为 Envoy 提供了服务发现,流量管理和智能路由(AB 测试、金丝雀发布等),以及错误处理(超时、重试、熔断)功能。Citadel:为服务之间提供认证和证书管理,可以让服务自动升级成 TLS协议。Galley:Galley 是 Istio 的配置验证、提取、处理和分发组件。它负责将其余的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。数据平面会和控制平面通信,一方面可以获取需要的服务之间的信息,另一方面也可以汇报服务调用的 Metrics 数据。

 

 为什么使用 Istio?

 

     通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理Istio,这包括:为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡。通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。可插拔的策略层和配置 API,支持访问控制、速率限制和配额。集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪。在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。Istio 为可扩展性而设计,可以满足不同的部署需求。

 

    

 

二、架构特点分析

 

1 单体应用架构(ALL IN ONE)

 

   单体应用架构应用大部分都是一个WAR包或者JAR包,包含前端页面,后端三层架构(web层,service层,dao层),即将所有的功能模块打包到一起并放在一个web容器中(如tomcat)运行。

 

   

 

优点: 所有功能集成在一个项目工程中,项目架构简单,前期开发成本低,要快速增加新功能或部署发布都比较简单,小型项目的首选,项目初期是一种比较好的方案。

 

缺点: 对于大型项目不易扩展。 系统性能受限,系统性能扩展只能通过扩展集群节点的方式,成本高,技术栈受限,有瓶颈。

 

2 垂直应用架构

 

   随着用户量越来越多,系统的压力也随之增长。当并发访问量提高到一定程度,单一应用通过增加机器提高性能的方式瓶颈越来越明显,在系统不能支撑当前的用户量后,需要将项目按照不同的业务来做拆分,拆分为多个子系统,系统之间通过Webservice或者HTTP接口来进行交互,系统不再那么臃肿了。当其中某一个模块使用的频率比较高,就对这个模块进行扩展,即多部署几个节点。再加一个Nginx用于负载均衡,刚开始还没什么大问题,当子系统越来越多的时候,每个子系统前面都要加一层负载,对运维人员来说工作量就增加了,因为要维护的也增多了。

 

 

 

优点: 通过垂直拆分,可在一定程度上突破原来单体应用的并发访问瓶颈,不同的子项目可采用不同的技术,技术栈相对丰富。

 

缺点:①随着用户量的增加及系统性能的提升,需要拆分的子项目越来越多,运维成本大幅度提升。

 

   ②按照业务拆分的子系统,各个子系统之间存在重合的服务,如用户注册、邮件发送等,重复的功能会造成资源浪费,需要进一步抽取公共功能作为独立服务。

 

3 分布式SOA架构

 

3.1 SOA

 

  SOA 全称为 Service-Oriented Architecture,即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进 程中。 站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,目的是把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。 即SOA 有如下几个特点:分布式、可重用、扩展灵活、松耦合。

 

  当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求

 

 

 

优点: 抽取公共的功能为服务,提高开发效率对不同的服务进行集群化部署解决系统压力 基于ESB/DUBBO减少系统耦合。

 

缺点: 抽取服务的粒度较大 服务提供方与调用方接口耦合度较高。

 

3.2 微服务架构

 

 

 

优点: 通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成 本也将大幅度下降 微服务遵循单一原则。微服务之间采用Restful等轻量协议传输。

 

缺点: 微服务过多,服务治理成本高,不利于系统维护。 分布式系统开发的技术成本高(容错、分布式事务等)。

 

 3.3 SOA与微服务的关系

 

  SOA( Service Oriented Architecture )“面向服务的架构”:是一种设计方法,其中包含多个服 务,服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。

 

  微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。 这些小应用之间通过服务完成交互和集成。

 

 

 

4 分布式核心知识

 

1) 分布式中的远程调用

 

    在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等,目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。

 

 (1)RESTful接口 REST,即Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架 构。

 

  资源(Resources)

 

  所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图 片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它, 每种资

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

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

相关文章

操作系统备考学习 day3 (2.1.1 - 2.1.6)

操作系统备考学习 day3 二、进程与线程2.1 进程与线程2.1.1 进程的概念和特征2.1.2 进程的状态与转换2.1.3 进程的组织2.1.4 进程控制2.1.5 进程间通信(IPC)2.1.6 线程和多线程模型 二、进程与线程 2.1 进程与线程 2.1.1 进程的概念和特征 进程&#…

通达OA漏洞检查工具V1.3

​注意 注意:通达OAv11.6前台任意文件删除任意文件上传漏洞会删除auth.inc.php,这可能会损坏OA系统谨慎操作 工具更新 本工具webshell采用蚁剑连接,密码均为x TongdaOATool本工具支持以下漏洞的验证和利用: 1、通达OA任意用户…

Vue通过ref修改 <el-input-number> 增减按钮的样式

Vue 为一个 <el-input-number> 设置了ref为‘inputNumberRef’, 通过这个ref获取<el-input-number>组件中的增、减按钮所在的<i>标签&#xff0c;并将它们的class分别改为el-icon-plus 和 el-icon-minus。 可以通过以下代码实现&#xff1a; <template&g…

Long类型雪花算法ID返回前端后三位精度缺失问题解决

目录 一、问题描述二、问题复现1.Maven依赖2.application.yml 配置3.DemoController.java4.snowflakePage.html 页面5.DemoControllerAdvice.java 监听6.问题复现 三、原因分析四、问题解决方案一方案二 一、问题描述 Java 后端使用雪花算法生成 Long 类型的主键 ID&#xff0…

【Unity】万人同屏, 从入门到放弃之——Entities 1.0.16性能测试

当前测试使用的Entities版本为1.0.16 Unity Entities 1.0.16使用方法&#xff1a; Create a component for the spawner example | Entities | 1.0.16 1. 创建SubScene 2. 在SubScene下创建挂载Authoring脚本&#xff1a; Authoring是MonoBehaviour脚本&#xff0c;主要用来…

网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置

Firefox 的全屏方式与 Chrome 不同&#xff0c;Chrome 自带全屏模式以及APP模式&#xff0c;通过简单的参数即可设置&#xff0c;而Firefox暂时么有这个功能&#xff0c;Firefox 的全屏功能可以通过全屏插件实现。 全屏模式下&#xff0c;按 F11 不会退出全屏&#xff0c;鼠标…

【微信小程序】文章样式,标题样式,及设置背景~

| background-size 设置背景图片大小。图片可以保有其原有的尺寸&#xff0c;或者拉伸到新的尺寸&#xff0c;或者在保持其原有比例的同时缩放到元素的可用空间的尺寸。 | background-size: cover;适配屏幕大小 文章样式&#xff0c;标题样式&#xff0c;及设置背景~ index.w…

AGV小车、机械臂协同作业实战02-开源opentcs 项目调研

这个项目是从0到1 的一个过程&#xff0c;碰到这种项目给我的第一反应就是先查查有没有轮子&#xff0c;往往站在巨人的肩膀上 事情就会变得简单多了。各种搜索后发现网站这类的项目少之又少&#xff0c;唯一一个值得参考的项目 就是Opentcs 了&#xff0c;而且这个项目最近也在…

echarts-图表(非常规图开发记录)

echarts-图表&#xff08;非常规图开发记录&#xff09; 环形刻度图横向左右柱形图3D饼图渐变柱子-柱状图3D柱状图雷达图动态滚动图-并加图片 以下图表数据源&#xff0c;allData.value 均为如下格式 [{"id": "1","name": "在职在岗",…

企业邮箱功能详解:提升办公效率的多面手

企业邮箱是一种专为企业打造的电子邮件服务&#xff0c;它可以帮助企业提高工作效率、加强内部沟通和保护企业信息安全。本文将介绍企业邮箱的一些主要功能和优势。 一、邮件收发 企业邮箱提供了一个专门的电子邮件账户&#xff0c;员工可以通过这个账户收发工作相关的邮件。相…

基于SSM的校园自助洗衣系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

GIS跟踪监管系统电子围栏

GIS跟踪监管系统电子围栏 &#xff08;1&#xff09;电子围栏展示。① 显示&#xff1a;② 隐藏&#xff1a;&#xff08;2&#xff09;电子围栏修改。① 新增电子围栏。② 修改电子围栏。工具箱&#xff08;1&#xff09;测量。① 测量距离&#xff1a;② 测量面积&#xff1a…

洛科威多功能岩棉板助力节能减碳战略,推动碳达峰目标实现

国家相关部门提出了要“协同推进降碳、减污、扩绿、增长&#xff0c;推进生态优先、节约集约、绿色低碳发展”的总要求&#xff0c;未来相当长的时间里&#xff0c;降碳都将是一项重要工作&#xff0c;节能降碳是实现碳达峰碳中和的有效途径&#xff0c;也是着力解决资源环境约…

基于springboot+vue的企业面试预约管理系统

基于springbootvue的企业面试预约管理系统 预约面试管理系统&#xff0c;可以通过学生&#xff0c;企业角色进行登录 登录后可以查看发布的岗位&#xff0c;发布人&#xff0c;发布时间&#xff0c;面试时间&#xff0c;招聘时间&#xff0c;招聘单位简介等 查看用户管理信息

云组网案例分享

最近遇到了一个客户场景&#xff0c;是个非常典型的跨云组网场景&#xff0c;我们梳理了下这个客户的需求以及我们提供的解决方案&#xff0c;出于保密要求&#xff0c;文章不会涉及任何客户信息。如果您想体验我们的产品&#xff0c;可以登录我们的控制台免费使用&#xff0c;…

【Axure原型素材】扫一扫

今天和粉丝们免费分享扫一扫的原型素材&#xff0c;"扫一扫"是一项常见的移动应用功能&#xff0c;通常通过手机或平板电脑上的摄像头来扫描二维码或条形码以实现各种功能。下面是和大家分享扫一扫的常用素材~~~ 【原型效果】 【Axure原型素材】扫一扫 【原型预览】…

石油天然气工程用热轧型钢

声明 本文是学习GB-T 42678-2023 石油天然气工程用热轧型钢. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了石油天然气工程用热轧型钢的订货内容、牌号表示方法、尺寸、外形、重量、技术要求、 试验方法、检验规则、包装、标志…

springboot日志配置(logback+slf4j配置)

1.为什么要配置日志 故障排查和问题分析&#xff1a; 日志记录允许开发人员和运维人员在系统发生问题或故障时追踪问题的根本原因。通过查看日志文件&#xff0c;他们可以了解系统在特定时间点发生了什么事情&#xff0c;从而更容易定位和解决问题。 性能监控和优化&#xff1a…

YOLOV7改进:在C5模块不同位置添加D-LKA Attention(同时拥有SA注意力和大卷积核的能力)

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 3.涨点效果:D-LKA Attention注意力机制,实现有…

有没有一款让人爱不释手的知识库工具?知识库管理工具不难选!

对于企业来说&#xff0c;因为其本身的业务需求、外部各类标准规范的要求、数字化转型趋势带来的便利&#xff0c;使得更多的企业开始自主搭建知识库&#xff0c;开始试图通过知识管理去提升组织的效率和创新能力。 虽然说市面上有不少关于知识笔记的管理工具&#xff0c;比如有…