代码编织梦想

0a2cc418bc9a6057592d4cd90b9fd0a3.png

1. 微服务架构介绍

微服务架构是一种分布式系统架构,将一个大型应用程序拆分成多个小型服务。每个服务都是独立的、自治的,可以独立部署、升级和扩展。微服务架构的主要特点包括:

  1. 松耦合:微服务之间的通信采用轻量级的协议,服务之间可以独立演进,减少了各个服务之间的依赖。

  1. 可伸缩性:微服务可以根据负载自动扩展,实现水平扩展和垂直扩展,满足不同的业务需求。

  1. 独立部署:每个微服务都可以独立部署和升级,不影响其他服务的运行,可以快速发布新功能和修复缺陷。

  1. 多语言支持:由于每个微服务都是独立的,因此可以使用不同的编程语言和技术栈,以满足不同服务的需求。

微服务架构是一种灵活、可扩展、可维护的分布式系统架构,可以解决传统单体应用程序的问题,但是也存在一些复杂性和成本方面的挑战。

2. 微服务的优缺点

2.1 微服务的优点

微服务架构旨在解决传统单体应用程序的问题,包括代码复杂度、可扩展性、可维护性、可靠性和团队协作等方面。微服务架构可以带来以下优点:

  1. 灵活性:微服务架构可以根据业务需求,按需添加或删除服务,灵活应对业务变化。

  1. 可扩展性:微服务架构可以根据负载自动扩展,实现水平扩展和垂直扩展,满足不同的业务需求。

  1. 可维护性:每个微服务都可以独立部署和升级,可以快速发布新功能和修复缺陷,提高了系统的可维护性。

  1. 可靠性:微服务具有自治性,每个服务都有自己的数据库,避免了单点故障,提高了系统的可靠性。

  1. 团队协作:微服务架构可以将大型应用程序拆分为多个小型服务,每个服务都由一个小团队开发和维护,便于团队协作和沟通。

2.2 微服务的缺点

微服务架构也有一些缺点:

  1. 分布式系统的复杂性:微服务架构需要解决分布式系统的一些问题,如服务发现、负载均衡、故障处理等,增加了系统的复杂性。

  1. 部署和运维成本:由于微服务架构中有多个服务,每个服务都需要独立部署和运维,增加了部署和运维的成本和难度。

  1. 一致性和事务管理:微服务架构中的多个服务之间存在复杂的交互,需要解决一致性和事务管理等问题。

  1. 通信开销:由于微服务架构中的服务之间需要通信,可能会增加网络通信的开销,对性能产生影响。

2.3 缺点的解决方案

针对微服务架构的这些缺点,有以下常见的解决方案:

  1. 分布式系统的复杂性:可以采用微服务治理框架,如Spring Cloud、Dubbo等,来解决服务发现、负载均衡、故障处理等问题,简化分布式系统的复杂性。

  1. 部署和运维成本:可以采用容器化技术,如Docker、Kubernetes等,来实现服务的快速部署和运维,减少部署和运维的成本和难度。

  1. 一致性和事务管理:可以采用分布式事务管理框架,如Seata、TCC-Transaction等,来解决分布式系统中的一致性和事务管理问题。

  1. 通信开销:可以采用消息队列和异步通信等技术,来减少服务之间的通信开销,提高性能和可靠性。

3. 微服务治理框架

微服务治理框架管理分布式系统中的服务发现、负载均衡、故障处理等问题。以下是常用的微服务治理框架:

  1. Spring Cloud:是一套开源的微服务框架,包括服务发现、服务配置、断路器、负载均衡、网关等组件,提供了完整的微服务解决方案。

  1. Dubbo:一套高性能、轻量级的RPC(远程过程调用)框架,它提供了服务注册、发现、负载均衡、远程调用等一系列的服务治理功能,适用于构建大规模分布式系统。

  1. Istio:是一套开源的服务网格框架,可用于管理服务之间的流量、安全、策略等,提供了流量管理、安全控制、策略管理等功能。

3.1 服务发现

  1. Spring Cloud

Spring Cloud 提供了 Eureka、Consul、Zookeeper等多种服务发现实现。其中,Eureka是 Spring Cloud 自带的默认实现,Consul和Zookeeper需要额外引入依赖。

  1. Dubbo

Dubbo使用Zookeeper作为默认的服务注册中心,服务提供者会将自己的服务信息注册到Zookeeper上,服务消费者从Zookeeper上获取服务提供者的信息。

  1. Istio

Istio使用Envoy作为默认的服务代理,Envoy会负责服务发现和流量路由,它会从Kubernetes或者Consul等服务注册中心上获取服务提供者的信息。

3.2 负载均衡

  1. Spring Cloud

Spring Cloud提供了多种负载均衡的方式,包括Ribbon、LoadBalancer等。其中,Ribbon是Spring Cloud默认的负载均衡组件,支持多种负载均衡策略,包括轮询、随机、加权轮询、加权随机等。LoadBalancer是Spring Cloud Gateway中的负载均衡组件,支持多种负载均衡策略,包括轮询、随机、响应时间加权等。

  1. Dubbo

Dubbo支持多种负载均衡策略,包括随机、轮询、一致性哈希等。Dubbo默认采用的是随机策略,即在可用的服务提供者中随机选择一个作为调用目标。

  1. Istio

Istio中的Envoy代理支持多种负载均衡策略,包括轮询、加权轮询、随机等。Istio默认采用的是轮询策略,即将请求平均分配给所有可用的服务实例。

3.3 故障处理

  1. Spring Cloud

Spring Cloud通过断路器(Circuit Breaker)实现故障处理,当服务调用失败达到一定的阈值时,会打开断路器,阻止继续调用该服务。此时,Spring Cloud会使用预先定义好的回退机制(Fallback)来处理这些请求。一段时间后,Spring Cloud会尝试关闭断路器,重新调用该服务。

  1. Dubbo

Dubbo通过负载均衡器(Load Balancer)实现故障处理,当服务提供者出现故障时,Dubbo会将该服务提供者从可用服务列表中删除,并且在一段时间后重新检查该服务提供者的状态。如果该服务提供者恢复正常,则重新将其添加到可用服务列表中。

  1. Istio

Istio通过流量管理器(Traffic Manager)实现故障处理,当服务调用失败时,Istio会自动将流量转移到备用服务实例,以确保应用程序的可用性。此外,Istio还提供了故障注入(Fault Injection)和故障恢复(Fault Recovery)的功能,可以模拟服务出现故障的情况,测试应用程序在故障情况下的表现,并且可以在故障恢复后自动恢复正常的服务。

4. 容器化技术

4.1 减少部署和运维成本

容器化技术主要在以下几个方面减少微服务部署和运维成本:

  1. 简化部署:容器化技术可以将微服务及其依赖项打包为一个容器镜像,使得部署过程变得非常简单。只需要将镜像上传到镜像仓库,然后在目标服务器上运行一个容器实例即可。

  1. 快速迭代:容器化技术可以将应用程序及其依赖项打包为一个可移植的容器,方便快速迭代。容器可以在本地进行构建和测试,然后上传到云端运行。

  1. 节约资源:由于容器是轻量级的,每个容器只包含应用程序和其依赖的库,因此可以在一个宿主机上运行多个容器实例,节约了服务器资源。

  1. 简化配置管理:容器化技术可以使用容器编排工具如Kubernetes等对微服务进行自动化部署、管理、扩容、滚动更新等操作,使得微服务的配置管理变得更加简单和自动化。

  1. 提高可靠性:容器化技术可以保证微服务之间的隔离性,即使某个服务出现故障,也不会影响其他服务的运行,提高了整个系统的可靠性。

4.2 容器化技术栈

  1. 容器技术:如Docker、Containerd等,用于打包、部署和运行容器。

  1. 容器编排工具:如Kubernetes、Docker Swarm等,用于管理和编排多个容器的部署、伸缩和故障恢复等。

  1. 容器镜像仓库:如Docker Hub、Harbor等,用于存储和管理容器镜像。

  1. 编排配置管理工具:如Helm、Kustomize等,用于管理容器编排的配置文件。

  1. 服务网格:如Istio、Linkerd等,用于管理容器之间的通信和流量控制。

  1. 自动化部署工具:如Jenkins、GitLab CI/CD等,用于自动化构建和部署容器化应用程序。

5. 分布式事务管理框架

微服务架构中,由于各个服务之间的调用需要跨越不同的进程、甚至不同的物理机器,因此在分布式环境中实现一致性和事务管理变得更加复杂。为了解决这个问题,出现了一些分布式事务管理框架,如下所示:

  1. 两阶段提交(2PC):2PC是一种同步分布式事务协议,它将分布式事务分为两个阶段:准备阶段和提交阶段。在准备阶段中,协调者向参与者发出准备请求,并等待参与者的响应。如果所有参与者都返回“同意”响应,则协调者发出提交请求;否则,协调者发出回滚请求。

  1. TCC(Try-Confirm-Cancel):TCC是一种基于补偿的分布式事务协议,它将事务分为三个阶段:尝试阶段、确认阶段和取消阶段。在尝试阶段中,事务参与者尝试执行操作,如果成功则进入确认阶段;否则,进入取消阶段。

  1. Saga:Saga是一种基于补偿的分布式事务协议,它将事务分为多个步骤,并在每个步骤中执行一系列操作。如果某个步骤失败,则会执行补偿操作来撤销之前的操作。

  1. GTS(Global Transaction Service):GTS是蚂蚁金服提出的分布式事务解决方案,它基于阿里云提供的强一致性分布式事务服务XA-TS(eXtensible Architecture Transaction Service),提供了分布式事务的管理和控制。

6. 消息队列和异步通信

消息队列和异步通信是解决微服务通信开销的常用方法,具体可以从以下几个方面解决问题:

  1. 解耦服务:通过将服务之间的通信变成异步的消息传递,可以将服务解耦,避免服务之间的依赖关系过于紧密,从而使服务的部署和维护更加容易。

  1. 提高并发性:通过使用消息队列和异步通信,可以避免服务之间的同步调用,从而提高服务的并发性能。

  1. 实现异步处理:通过使用消息队列和异步通信,可以实现服务异步处理请求,从而避免服务阻塞等待响应,提高服务的性能和并发性能。

  1. 提高可靠性:通过使用消息队列,可以将数据持久化存储,避免因为服务宕机或者网络故障导致数据丢失,从而提高服务的可靠性。

  1. 削峰填谷:通过使用消息队列,可以将请求进行缓存,避免突发请求对服务造成的压力,从而实现削峰填谷的效果。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xsgnzb/article/details/129668961

微服务架构概述---扫盲片-爱代码爱编程

不知从何而起,与微服务相关的技术已然成为检验一个程序员是否合格的第一要素,微服务这一名词无论是博客、社交媒体还是会议讲演 其热度绝对可以拔得头筹。可是当我试图百度出什么是微服务时,发现度娘的介绍含糊其辞,一个“新技术”也是足够让你微醺一会。 图1、百度对微服务架构的解释 然后试图搜些帖子看看,不过很少有人能讲清楚微服务到底是什么。于是便忍痛花了点银

spring cloud sleuth(微服务跟踪) + zipkin(展现)扫盲知识-爱代码爱编程

spring cloud sleuth产生背景 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败. spring cloud sleuth是什么 spring cloud sleuth提供

【微服务扫盲篇】之微服务框架常见问题和解决思路-爱代码爱编程

目录 微服务框架常见问题 微服务框架常见概念 1、服务治理 2、服务调用 3、服务网关 4、服务容错 5、链路追踪 微服务架构, 简单的说就是将单体应用进一步拆分,拆分成一个个小的服务,每个服务都是一个可以独 立运行的项目。   微服务框架常见问题 这么的小服务,如何管理它们?(注册中心)这么的小服务,它们之间如何

扫盲帖:聊聊微服务与分布式系统_鸨哥学java的博客-爱代码爱编程

今天和大家聊一聊分布式系统的相关概念及其常见分布式组件和设计思想(不涉及计算机科学中分布式系统的技术理论之类的东西),之前为了准备这次的面试我是把市面上的很多分布式组件都看了一遍,我们公司所用的分布式组件基本也没出我了解的那个知识圈(公司用了Apollo我没提前了解,大E了) ​ 单体应用与集群 单体应用、集群和微服务,这个标题一出你

springcloud微服务技术栈.黑马跟学(三)-爱代码爱编程

SpringCloud微服务技术栈.黑马跟学 三 今日目标1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差

【微前端】qiankun-爱代码爱编程

专栏: 【微前端】什么是微前端【微前端】qiankun【微前端】qiankun + vite + vue3 一、qiankun 是什么 qiankun是一种前端微服务架构,旨在解决大型复杂应用的拆分和管理问题。 二、