微服务架构2.0--云原生时代

云原生

云原生(Cloud Native)是一种关注于在云环境中构建、部署和管理应用程序的方法和理念。云原生应用能够最大程度地利用云计算基础设施的优势,如弹性、自动化、可伸缩性和高可用性 。这个概念涵盖了许多方面,包括架构、开发、部署、运维和团队文化等

云原生特点和原则

  1. 容器化: 将应用及其依赖打包为容器,以实现一致性的运行环境。容器技术如Docker提供了隔离性、可移植性和快速部署的优势。
  2. 微服务架构: 将应用拆分为小型、独立的服务单元,每个单元专注于特定的业务功能。这提高了可维护性、可扩展性和敏捷性。
  3. 自动化: 强调自动化的开发、测试、部署和运维流程,包括持续集成、持续交付、自动扩展等,以提高效率和稳定性。
  4. 灵活性: 云原生应用通过微服务架构和容器化,使得每个服务单元可以独立开发、部署和扩展,增强了应对变化的能力。
  5. 弹性: 云原生应用能够根据负载自动扩展和缩减,以应对流量的变化。
  6. 服务治理: 强调服务的发现、负载均衡、流量管理以及容错机制,以确保服务的可靠通信。
  7. 声明式API和基础设施即代码: 通过声明式API和基础设施即代码的方式,实现应用的自动化部署和管理。
  8. 可观测性: 强调应用的监控、日志、追踪和指标,以便及时发现和解决问题。
  9. 开放性和多样性: 云原生技术不限于特定的语言、框架或云平台,鼓励采用开放标准和多样的技术栈。

云原生是一个综合性的概念,旨在使应用能够更好地利用云计算的优势 ,提供更高的可靠性、可扩展性和敏捷性容器化、微服务、自动化和弹性等原则是实现云原生应用的关键。

分布式系统固有问题

在微服务架构中,会面临一些必须解决的问题,比如注册发现、跟踪治理、负载均衡、传输通讯等。只要是分布式系统,就没办法完全避免这些问题,回过头来想一下:这些问题一定要由分布式系统自己来解决吗?

1、SpringCloud与Kubernetes

同一个分布式服务的问题,对比下 Spring Cloud 中提供的应用层面的解决方案,以及 Kubernetes 中提供的基础设施层面的解决方案

虽然 Spring Cloud 和 Kubernetes 的出发点不同,解决问题的方法和效果也不一样,但不容忽视的是,Kubernetes 的确提供了一条全新的、前途更加广阔的解题思路。

与业务无关的技术问题,便很可能从软件的层面剥离出来,在硬件的基础设施之内就被悄悄解决掉,让软件可以只专注于业务,真正"围绕业务能力构建"团队与产品。

那么原来只能从软件层面解决的分布式架构问题,于是有了另外一种解法:应用代码与基础设施软硬一体,合力应对。

Kubernetes的局限性

基础设施是针对整个容器来做整体管理的,它的粒度就相对粗犷。

有一些问题处于应用系统与基础设施的边缘,Kubernetes很难能完全在基础设施的层面中,去精细化地解决掉它们。

  1. 业务逻辑和基础设施的关系: 某些问题可能与特定的业务逻辑紧密相关,难以通过通用的基础设施解决。在这种情况下,微服务框架(如 Spring
    Cloud)可能更容易为业务提供定制化的解决方案。
  2. 微服务治理和业务规则: 一些问题涉及到业务规则和治理的结合,这可能需要更高层次的抽象和定制化。
  3. 业务复杂性: 对于某些复杂的业务流程,特定的定制化解决方案可能更适合,而通用的基础设施(如 Kubernetes)可能需要更多的适配。

2、服务网格(Service Mesh)与Sidecar Proxy

服务网格(Service Mesh)是一种用于管理和监控微服务架构中服务之间通信的基础设施层。它提供了一系列的工具和功能,以解决微服务架构中的一些共性问题,如服务发现、负载均衡、安全性、故障处理等。

**Sidecar Proxy(**边车代理)是一种在微服务架构中用于处理服务之间通信的模式。它将通信逻辑从应用程序代码中分离出来,作为一个单独的代理进程(sidecar)运行在同一容器、同一主机或同一虚拟机上,与主应用程序共同工作,处理诸如路由、负载均衡、安全性、监控等通信相关的任务。

边车代理主要使用场景

  1. 服务发现和负载均衡: 边车代理可以负责服务发现并在服务之间实施负载均衡,将请求动态分配给不同的服务实例。
  2. 安全性: 边车代理可以提供安全性功能,如认证、授权、加密等,确保只有授权的服务可以通信。
  3. 监控和跟踪: 边车代理可以收集和记录请求和响应数据,以便进行监控和跟踪,帮助分析和解决问题。
  4. 重试和超时: 边车代理可以处理请求的重试和超时,确保请求在一定时间内得到响应。
  5. 熔断和断路器: 边车代理可以实施熔断和断路器机制,当某个服务出现故障时,停止向其发送请求,以避免影响整个系统。
  6. 路由和流量控制: 边车代理可以实现流量的控制和路由策略,用于实现灰度发布、A/B测试等功能。
  7. 请求转换和响应加工: 边车代理可以对请求和响应进行转换和加工,实现协议转换、数据格式转换等。

边车代理优势

  1. 解耦通信逻辑: 服务网格将通信逻辑从应用程序中解耦,使开发人员可以专注于业务逻辑的开发,而不必担心通信细节。
  2. 可观察性: 服务网格通常提供丰富的监控、跟踪和日志功能,帮助开发人员和运维团队更好地了解和管理服务之间的通信。
  3. 流量管理: 服务网格允许对流量进行精细的控制,包括流量分流、A/B 测试、灰度发布等,从而提供更大的灵活性。
  4. 安全性: 服务网格可以提供安全功能,如认证、授权、加密等,确保服务之间的通信是安全的。
  5. 故障恢复: 服务网格可以处理故障检测和恢复,当某个服务实例失败时,可以自动切换到其他健康的实例。
  6. 跨语言支持: 服务网格通常支持多种编程语言和技术栈,适用于多样化的微服务生态系统。

边车代理成本

  1. 复杂性: 引入服务网格会增加系统的复杂性,特别是在小规模项目中可能会显得过度。
  2. 性能开销: 由于服务网格的代理需要处理通信逻辑,可能会引入一定的性能开销,尤其在高吞吐量的场景中。
  3. 学习曲线: 学习和部署服务网格需要时间,开发团队需要熟悉其概念和配置。
  4. 维护: 服务网格的部署和维护可能需要额外的工作,特别是在涉及多个服务的复杂环境中。
  5. 适用性: 并非所有微服务架构都需要服务网格,一些简单的场景可能不需要引入这种复杂的通信层。

常见的边车代理

Envoy: 由CNCF(Cloud Native Computing Foundation)维护的开源代理,具有强大的路由、负载均衡、故障恢复等功能。

Istio: 是一个由Google、IBM和Lyft共同开源的服务网格平台,旨在简化和改进微服务架构中服务之间的通信、管理和监控。Istio 提供了一系列功能和工具,用于解决微服务架构中的一些通用问题,如流量管理、故障恢复、安全性和可观察性等。

服务网格将会成为微服务之间通讯交互的主流模式,它会把"选择什么通讯协议""如何做认证授权"之类的技术问题隔离于应用软件之外,取代今天的 Spring Cloud 全家桶中的大部分组件的功能。

软件架构演进方向

让开发人员专注于业务逻辑,将与业务无关的技术问题从软件层面剥离出来",并通过基础设施和工具来处理这些技术问题。这有助于提高开发效率、降低维护成本,并使开发团队能够更专注于核心业务功能的创新。

业务与技术完全分离,远程与本地完全透明,也许这就是分布式架构最好的时代。

相关推荐
贵慜_Derek3 小时前
《从零实现 Agent 系统》连载 32|闭集 IE 与小模型:分类、意图与字段抽取
人工智能·架构·agent
江米小枣tonylua13 小时前
译:设计生产级 RAG 架构
架构
怕浪猫19 小时前
领域特定语言(Domain-Specific Language, DSL)
设计模式·程序员·架构
怕浪猫19 小时前
哪些软件对 Chrome DevTools Protocol 频繁使用
人工智能·架构·前端框架
Jack201 天前
HarmonyOS APP事件驱动大揭秘
架构
米丘1 天前
微前端之 Web Components 完全指南
微服务·html
秋播1 天前
国内本地WSL2编译rancher源码
云原生
Colin草率地做慢慢地改1 天前
关于QuickStore这个项目的重构(2)- 数据库建表文件
后端·面试·架构
candyTong2 天前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
唐某人丶2 天前
从画架构图开始:架构分析与进阶指南
架构