当前位置: 首页 > news >正文

微服务架构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 全家桶中的大部分组件的功能。

软件架构演进方向

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

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

相关文章:

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

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

C++day2作业(2023.8.22)

1.定义一个学生的结构体,包含学生的姓名,年龄,成绩,性别,学生的成绩,姓名,定义为私有权限;定义一个学生类型的结构体变量,设置公有函数用于给学生的成绩和名字进行赋值&a…...

在 Spring Boot 中使用 OpenAI ChatGPT API

1、开始咯 我们来看看如何在 Spring Boot 中调用 OpenAI ChatGPT API。 我们将创建一个 Spring Boot 应用程序,该应用程序将通过调用 OpenAI ChatGPT API 生成对提示的响应。 2、OpenAI ChatGPT API 在开始具体讲解之前,让我们先探讨一下我们将在本教…...

【leetcode】225.用队列实现栈

分析: 队列遵循先入先出的原则,栈遵循后入先出的原则 也就是说,使用队列实现栈时,入队操作正常,但是出队要模拟出栈的操作,我们需要访问的是队尾的元素;题目允许使用两个队列,我们可…...

机器学习中XGBoost算法调参技巧

本文将详细解释XGBoost中十个最常用超参数的介绍,功能和值范围,及如何使用Optuna进行超参数调优。 对于XGBoost来说,默认的超参数是可以正常运行的,但是如果你想获得最佳的效果,那么就需要自行调整一些超参数来匹配你…...

第1章:计算机网络体系结构

文章目录 1.1 计算机网络 概述1.概念2.组成3.功能4.分类5.性能指标1.2 计算机网络 体系结构&参考模型1.分层结构2.协议、接口、服务3.ISO/OSI模型4.TCP/IP模型1.1 计算机网络 概述 1.概念 2.组成 1.组成部分&...

【Java 动态数据统计图】动态数据统计思路Demo(动态,排序,containsKey)三(115)

上代码&#xff1a; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map;public class day10 {public static void main(String[] args) {List<Map<String,O…...

【游戏评测】河洛群侠传一周目玩后感

总游戏时长接近100小时&#xff0c;刚好一个月。 这两天费了点劲做了些成就&#xff0c;刷了等级&#xff0c;把最终决战做了。 总体感觉还是不错的。游戏是开放世界3D游戏&#xff0c;Unity引擎&#xff0c;瑕疵很多&#xff0c;但胜在剧情扎实&#xff0c;天赋系统、秘籍功法…...

java新特性之Lambda表达式

函数式编程 关注做什么&#xff0c;不关心是怎么实现的。为了实现该思想&#xff0c;java有了一种新的语法格式&#xff0c;Lambda表达式。Lambda本质是匿名内部类对象&#xff0c;是一个函数式接口。函数式接口表示接口内部只有一个抽象方法。使用该语法可以大大简化代码。 …...

【考研数学】线形代数第三章——向量 | 2)向量组相关性与线性表示的性质,向量组的等价、极大线性无关组与秩

文章目录 引言二、向量组的相关性与线性表示2.3 向量组相关性与线性表示的性质 三、向量组等价、向量组的极大线性无关组与秩3.1 基本概念 写在最后 引言 承接前文&#xff0c;我们来学习学习向量组相关性与线性表示的相关性质 二、向量组的相关性与线性表示 2.3 向量组相关性…...

Java中调用Linux脚本

在Java中&#xff0c;可以使用ProcessBuilder类来调用Linux脚本。以下是一个简单的示例&#xff0c;展示了如何在Java中调用Linux脚本&#xff1a; 创建一个Linux脚本文件&#xff08;例如&#xff1a;myscript.sh&#xff09;&#xff0c;并在其中编写需要执行的命令。确保脚…...

Nexus 如何配置 Python 的私有仓库

Nexus 可作为一个代理来使用。 针对一些网络环境不好的公司&#xff0c;可以通过配置 Nexus 来作为远程的代理。 Group 概念 Nexus 有一个 Group 的概念&#xff0c;我们可以认为一个 Nexus 仓库的 Group 就是很多不同的仓库的集合。 从下面的配置中我们可以看到&#xff0…...

Maven 配置文件修改及导入第三方jar包

设置java和maven的环境变量 修改maven配置文件 &#xff08;D:\app\apache-maven-3.5.0\conf\settings.xml&#xff0c;1中环境变量对应的maven包下的conf&#xff09; 修改131行左右的mirror&#xff0c;设置阿里云的仓库地址 <mirror> <id>alimaven</id&g…...

jmeter CSV 数据文件设置

创建一个CSV数据文件&#xff1a;使用任何文本编辑器创建一个CSV文件&#xff0c;将测试数据按照逗号分隔的格式写入文件中。例如&#xff1a; room_id,arrival_date,depature_date,bussiness_date,order_status,order_child_room_id,guest_name,room_price 20032,2023-8-9 14:…...

【SA8295P 源码分析】20 - GVM Android Kernel NFS Support 配置

【SA8295P 源码分析】20 - GVM Android Kernel NFS Support 配置 系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》 本文链接:《【SA8295P 源码分析】20 - GVM Android Kernel NFS Support 配置》 # make menuconfigFile systems ---> [*] Network File Sy…...

c++都补了c语言哪些坑?

目录 1.命名空间 1.1 定义 1.2 使用 2.缺省参数 2.1 概念 2.2 分类 3.函数重载 4.引用 4.1 概念 4.2 特性 4.3 常引用 4.4 引用和指针的区别 5.内联函数 1.命名空间 在 C/C 中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将…...

【C语言】C语言用数组算平均数,并输出大于平均数的数

题目 让用户输入一系列的正整数&#xff0c;最后输入“-1”表示输入结束&#xff0c;然后程序计算出这些数的平均数&#xff0c;最后输出输入数字的个数和平均数以及大于平均数的数 代码 #include<stdio.h> int main() {int x;double sum 0;int cnt 0;int number[100…...

「UG/NX」Block UI 体收集器BodyCollector

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#...

金九银十面试题之《JVM》

&#x1f42e;&#x1f42e;&#x1f42e; 辛苦牛&#xff0c;掌握主流技术栈&#xff0c;包括前端后端&#xff0c;已经7年时间&#xff0c;曾在税务机关从事开发工作&#xff0c;目前在国企任职。希望通过自己的不断分享&#xff0c;可以帮助各位想或者已经走在这条路上的朋友…...

wireshark | 过滤筛选总结

wireshark 是一款开源抓包工具。比如与服务器的请求响应、tcp三次握手/四次挥手 场景&#xff1a;在linux环境下使用tcpdump -w 然后把爬的数据写入指定的XXX.pcap 然后在wireshark中导入该文件XXX.pcap 使用下面的过滤方式进行过滤 分析数据就可以了 #直接看 不需要硬背 和s…...

list使用

list的使用于string的使用都类似&#xff0c;首先通过查阅来看list有哪些函数&#xff1a; 可以看到函数还是蛮多的&#xff0c;我们值重点一些常用的和常见的&#xff1a; 1.关于push_back,push_front,和对应迭代器的使用 //关于push_back和push_front void test_list1() {l…...

【图解】多层感知器(MLP)

图片是一个多层感知器&#xff08;MLP&#xff09;的示意图&#xff0c;它是一种常见的神经网络模型&#xff0c;用于从输入到输出进行非线性映射。图片中的网络结构如下&#xff1a;...

React(8)

千锋学习视频https://www.bilibili.com/video/BV1dP4y1c7qd?p72&spm_id_frompageDriver&vd_sourcef07a5c4baae42e64ab4bebdd9f3cd1b3 1.React 路由 1.1 什么是路由&#xff1f; 路由是根据不同的 url 地址展示不同的内容或页面。 一个针对React而设计的路由解决方案…...

ssm社区管理与服务系统源码和论文

ssm社区管理与服务的设计与实现031 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 研究背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理&#xff0c;这正是计算机被广泛应用于信息管理系统的…...

Git多版本并行开发实践

本文目的&#xff1a; 实现多个项目同时进行的git多版本管理工作流。 名词解释&#xff1a; feature-XXXX&#xff1a;特性分支指CCS中一个项目或者一个迭代&#xff0c;在该分支上开发&#xff0c;完成后&#xff0c;合并&#xff0c;最后&#xff0c;删除该分支&#xff0c;…...

修复hive重命名分区后新分区为0的问题

hive分区重命名后&#xff0c;新的分区的分区大小为0 , 例如 alter table entersv.ods_t_test partition(dt2022-11-08) rename to partition(dt2022-11-21) ods_t_test 的2022-11-21分区大小为0。怎样修复 使用 msck repair table 命令来修复表的元数据&#xff0c;让hive重新…...

Gin+微服务实现抖音视频上传到七牛云

文章目录 安装获取凭证Gin处理微服务处理 如果你对Gin和微服务有一定了解&#xff0c;看本文较容易。 安装 执行命令&#xff1a; go get github.com/qiniu/go-sdk/v7获取凭证 Go SDK 的所有的功能&#xff0c;都需要合法的授权。授权凭证的签算需要七牛账号下的一对有效的A…...

go 连接操作MySQL

连接Mysql 访问此网站搜索MySQL第一个就是按照指引运行 go get -u github.com\go-sql-driver\mysql导入包建立连接 package mainimport ("database/sql""fmt""time"_ "github.com/go-sql-driver/mysql" )var db *sql.DBfunc initdb…...

git常见的命令,问题和处理方式

Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本库的方…...

Ubuntu环境下超好用的文件对比工具软件meld

Ubuntu环境下超好用的文件对比工具软件_ubuntu 代码比较工具_Calculation K的博客-CSDN博客...