阿里云rocketmq_云原生时代消息中间件的演进路线

e39e0b0a4b86578523442e0d3458e937.png

作者 | 周礼(不铭) 阿里巴巴集团消息中间件架构师

导读:本文整理自作者于 2020 年云原生微服务大会上的分享《云原生时代的消息中间件演进》,主要探讨了传统的消息中间件如何持续进化为云原生的消息服务。

关注阿里巴巴云原生公众号,后台回复 818 即可获取直播回看地址和大会 PPT 合集。

引言

本文以一张云进化历史图开场,来谈谈云原生时代消息中间件的演进路线,但本文绝对不是“开局一张图,内容全靠编”。

b4d0e7159914f70fdcd39e50423b0c13.png

从虚拟化技术诞生以来,IaaS / PaaS / SaaS 概念陆续被提了出来,各种容器技术层出不穷。到 2015 年,Cloud Native 概念应运而生,一时间,各种云厂商,云服务以及云应用都加上了“云原生”前缀。

我们也一直在思考,传统的消息中间件需要做些什么才能加上云原生这个修饰词,这也是本文探讨的主题:传统的消息中间件如何持续进化为云原生的消息服务。

云原生消息服务

1. 什么是云原生

932a79cb4efcac8d3e3832392b2f5d65.png

首先来谈谈什么是云原生,云原生是一个天然适用于云计算的架构理念,实践云原生技术理念的应用可以最大化享受云计算的技术红利,包括弹性伸缩、按量付费、无厂商绑定、高 SLA 等。

应用在实践云原生技术理念时一般会遵循四个要素:

  • 采取 DevOps 领域的最佳实践来管理研发和运维流程;
  • 通过 CICD 工具链做到应用的快速迭代和持续交付;
  • 采取微服务架构;
  • 采取容器及相关技术进行应用的托管。

消息服务作为应用的通信基础设施,是微服务架构应用的核心依赖,也是实践云原生的核心设计理念的关键技术,通过消息服务能够让用户很容易架构出分布式的、高性能的、弹性的、鲁棒的应用程序。消息服务在云原生的重要性也导致其极可能成为应用实践云原生的阻塞点,所以消息服务的云原生化是至关重要的。

2. 什么是云原生消息服务

033e0954cd47798a0ed3d24a2ffe4d7d.png

先说结论,我们认为云原生消息服务是云原生的通信基础设施。2015 年成立的 CNCF 基金会大范围推广了云原生的技术理念,并提供了一套完整的实践技术工具集,帮助开发者落地云原生理念。这套工具集收录于 CNCF 云原生全景图,其中消息中间件处于应用定义和开发层的 Streaming 和 Messaging 类目。

消息中间件在云原生的应用场景,主要是为微服务和 EDA 架构提供核心的解耦、异步和削峰的能力,在云原生全景图定义的其它层次领域,消息服务还发挥着数据通道、事件驱动、集成与被集成等重要作用。

另外云原生倡导面向性能设计,基于消息队列的异步调用能够显著降低前端业务的响应时间,提高吞吐量;基于消息队列还能实现削峰填谷,把慢服务分离到后置链路,提升整个业务链路的性能。

3. 云原生消息服务演进方向

9c13993309318bdebf55325405cb1e3f.png

云原生时代对云服务有着更高的要求,传统的消息服务在云原生这个大背景下如何持续进化为云原生的消息服务,我们认为方向有这么几个:

1)高 SLA

云原生应用将对消息这种云原生 BaaS 服务有更高的 SLA 要求,应用将假设其依赖的云原生服务具备跟云一样的可用性,从而不需要去建设备份链路来提高应用的可用性,降低架构的复杂度。只有做到与云一样的可用性,云在服务就在,才能称为真正的云原生服务。

2)低成本

在过去,每家公司自建消息中间件集群,或是自研的、或是开源的,需要投入巨大的研发、运维成本。云原生时代的消息服务借助 Serverless 等弹性技术,无需预先 Book 服务器资源,无需容量规划,采取按量付费这种更经济的模式将大幅度降低成本。

3)易用性

在云原生时代,消息服务第一步将进化成为一种所见即所得、开箱即用的服务,易用性极大的提高。接下来,消息服务将以网格的形式触达更复杂的部署环境,小到 IoT 设备,大到自建 IDC,都能以跟公有云同样易用的方式接入消息服务,且能轻易地满足云边端一体化、跨 IDC、跨云等互通需求,真正成为应用层的通信基础设施。

4)多样性

云原生消息服务将致力于建设大而全的消息生态,来涵盖丰富的业务场景,提供各式各样的解决方案,从而满足不同用户的多样性需求。阿里云消息队列目前建设了多个子产品线来支撑丰富的业务需求,比如消息队列 RocketMQ,Kafka,微消息队列等。

5)标准化

容器镜像这项云原生的核心技术轻易地实现了不可变基础设施,不可变的镜像消除了 IaaS 层的差异,让云原生应用可以在不同的云厂商之间随意迁移。但实际上,很多云服务提供的接入形式并不是标准的,所以依赖这些非标准化云服务的应用形成了事实上的厂商锁定,这些应用在运行时是无法完成真正的按需迁移,所以只能称为某朵云上的原生应用,无法称为真正的云原生应用。因此,消息服务需要做到标准化,消除用户关于厂商锁定的担忧,目前阿里云消息队列采纳了很多社区标准,支持了多种开源的 API 协议,同时也在打造自己标准化接口。

总结一下,传统的消息队列将从高 SLA、低成本、易用性、多样性和标准化几个方向持续进化为云原生的消息服务。

云原生消息三化

谈到云原生,离不开 Kubernetes、Serverless 以及 Service Mesh,接下来为大家分享下我们如何利用 K8s 社区的生态红利,如何实践 Serverless 和 Service Mesh 技术理念。

1. 云原生消息 Kubernetes 化

Kubernetes 项目当下绝对是大红大紫,在容器编排和应用托管领域绝对的事实标准,整个社区也是生机盎然。所以,必须将我们的消息服务升级为 K8s 环境开箱即用的服务。

32d4abb2997d119e3f21ea309551efd7.png

云原生消息 Kubernetes 化是指通过自定义 CRD 资源将有状态的消息集群托管至 Kubernetes 集群中,充分利用

K8s 提供的部署、升级、自愈等能力提高运维效率,同时尽可能享受 K8s 的社区生态红利。

我们在 RocketMQ 开源社区也提供了 CRD 描述文件以及相应的 Operator 实现,通过这套实现,可以快速部署 RocketMQ 集群至 K8s 环境;利用 K8s 的能力低成本运维 RocketMQ 集群;也可以使用云原生的 Prometheus 观察集群指标。

RocketMQ 完成 Kubernetes 化后,就变成了 Kubernetes 环境原生可访问的一个消息服务,将给开发者带来极大的便利性。

同时,在商业化环境,我们也正在依赖 Kubeone 将消息队列系列产品完成 Kubernetes 化。

2. 云原生消息 Serverless 化

Serverless 最核心的理念是“按需”,云原生消息 Serverless 化主要是从两个维度落地按需的概念:

  • 一方面根据业务规模自动化扩缩容实例规格、队列数等逻辑资源;
  • 另一方面,根据服务端负载自动化扩缩容计算、存储等物理资源。

b22c8531733b1c6a39a728506b3b6f5b.png

1)逻辑资源按需扩缩容

在用户侧,更关心的是消息实例提供的逻辑资源是否充足,比如购买的实例 TPS 规格是否足够,队列数量是否能满足扩展性需求。比如一个商业化的 MQ 实例中,可以根据用户的流量对实例规格进行自动的升降配,从 2W TPS 至 10W TPS 按需调整;也可以根据用户分布式消费者的数量规模,对逻辑队列数量进行动态调整;用户完全不需要进行容量评估。

2)物理资源按需扩缩容

在云服务开发者侧,我们更关心的是如何通过 Serverless 降低运维成本,避免手动的机器购买、VIP 申请、磁盘申请以及集群扩缩容等。在 Kubernetes 化完成后,可以很轻易地根据集群 Load 等指标自动扩容 MQ 物理资源;在集群缩容的处理上,会比较麻烦,因为每个 MQ 节点其实是有状态的,图中的某个 PV 代表了一个 CommitLog,我们在内部通过在 ASI 上支持 PV 漂移,在 RocketMQ 存储层支持多 CommitLog 挂载来完成自动化缩容。

3. 云原生消息 Mesh 化

1cb3f87c8090903030a854e7fd98d7bb.png

Service Mesh 出发点是解决微服务架构的网络问题,将服务之间的通信问题从业务进程中进行剥离,让业务方更加专注于自身的业务逻辑。 云原生消息 Mesh 化将消息的富客户端能力下沉至 Sidecar,将消息的服务发现、负载均衡、流量监控等职责与业务逻辑隔离,在运行时完成透明组装,同时提供细粒度的消息灰度和治理能力。

目前阿里云消息队列 RocketMQ 是国内第二个成功进入 Service Mesh 官方社区的中间件产品,在进行 Envoy 适配的过程中推动了 Envoy 社区加速对 on-demand CDS 的支持,创新性地使用 Pop 消费模式来适配 Mesh 的无状态网络模型。

更详细的 Mesh 化介绍参考文章:Apache RocketMQ 的 Service Mesh 开源之旅

云原生消息生态

在云原生消息服务演进方向小节中提到,云原生消息服务需要大而全的消息生态来覆盖业务方丰富的业务场景,本小节介绍我们在生态建设方面做的一些努力。

1. 云原生消息产品矩阵

81e58817056cf1e42355357c69394d8c.png

阿里云消息产品矩阵包含消息队列 RocketMQ、Kafka、AMQP、微消息队列 MQTT、消息通知服务 MNS 以及即将发布的 EventBridge,涵盖互联网、大数据、移动互联网、物联网等领域的业务场景,为云原生客户提供一站式消息解决方案。

  • 消息队列 RocketMQ :阿里巴巴自主研发及 双11 交易核心链路消息产品,阿里云主打品牌,主要面向业务消息处理,打造金融级高可靠消息服务;
  • 消息队列 Kafka : 聚焦大数据生态链,100% 融合 Kafka 开源社区,大数据应用领域中不可或缺的消息产品;
  • 微消息队列 MQTT :基于 MQTT 标准协议自研,拓展消息产品的领域与边界,延伸到移动互联网以及物联网,实现端与云的连接;
  • 消息队列 AMQP :100% 兼容 AMQP 事实标准协议,全面融合 RabbitMQ 开源社区生态;
  • 消息服务 MNS :聚焦云产品生态集成 & 消息通知服务(HTTP Endpoint、Function Compute、事件通知、移动推送等);
  • 事件总线 EventBridge :作为我们下一代的消息产品形态,原生支持 CloudEvents 标准,提供中心化事件服务能力,加速云原生生态集成,EDA 首选。

2. 云原生消息生态

d05f8644eda59bcc3eed2feab2ffedc6.png

在生态建设方面,我们在商业化和开源两个生态都取得了不错得成功。

在阿里云消息商业化生态中,消息队列产品线已经支持 11 BU,30+ 云产品或者解决方案,有些对用户是可见的,有些是不可见的,真正做到了云原生通信基础设施的定位。

在开源方面,开源 RocketMQ 已经完成了云原生技术栈的集成,包括 Knative 中的事件源,Prometheus 的 Exporter,K8s 的 Operator 等;也支持了微服务框架 Dubbo、SpringCloud 以及函数计算框架 OpenWhisk;同时开发了很多 Connector 作为 Sink 或者 Source 去连接了 ELK、Flume、Flink、Hadoop 等大数据和数据分析领域的优秀开源产品。

3. 云原生消息标准

最开始我们就提到标准化是云原生消息中间件的进化方向之一,我们从两个维度打磨产品的标准化建设。

0266675c14e63f32e1d5f48304ccfe3b.png

1)社区标准

在消息领域,无论是接口还是协议,社区一直有很多事实上的“标准”,比如 Kafka 提供的 API 和协议,JMS API,CloudEvents 规范,MQTT 中的协议和模型,AMQP 的协议和模型等,阿里云消息队列产品线对这些事实标准都提供了相应的接入方式,用户可以低成本完成迁移上云。

2)自建标准

事实上的“标准”如果太多,其实就没有标准,开源方面一直在推动自建标准 OpenMessaging,OMS 将提供六大核心特性:多领域、流、平台无关、标准的 Benchmark,面向云,线路层可插拔。目前,国内有很多云提供商都接入了 OMS 标准。

云原生消息核心竞争力

作为云原生的消息,核心竞争力在哪,特别是开源生态愈发蓬勃,用户可选的解决方案非常多,如何让用户选择我们云原生的消息服务,我们认为核心竞争力主要有这么几个。

1. 领先的消息服务能力

1da8389a8c742be7244e0dceca9e6abf.png

阿里云的消息服务,在多个方面都具备绝对领先的服务能力。

1)接入&迁移

整个产品线支撑了多协议、多 API、多语言、多终端以及多生态的接入,做到了“0”接入成本,开源或自建用户都可以无缝上云;同时全球消息路由也支持跨地域的消息同步,异构的消息迁移同步等。

2)多租户

阿里云消息服务支持命名空间隔离、标准的访问控制;支持实例限流、资源隔离、多租户的海量堆积。

3)消息类型

在业务消息领域,阿里云消息有多年的业务沉淀,消息类型上支持:普通消息、事务消息、定时消息、顺序消息、重试消息以及死信消息等。

4)消费 & 治理


在消费和治理领域,云消息服务支持 Pub / Sub 模式,广播/集群消费模式,消费过程中支持 Tag 过滤、SQL 过滤。在运维时,提供了消息轨迹、消息查询以及消息回放等治理能力。

5)服务能力

阿里云消息的服务能力是经过多年锤炼的:

  • 高可用:核心交易链路 12 年,双十一 10 年历程,在云上承诺的可用性 SLA 为 99.95%,可靠性 8 个 9;
  • 高性能:双11 消息收发 TPS 峰值过亿,日消息收发总量 3 万亿;拥有全球最大的业务消息集群之一;
  • 低延迟:在 双11 万亿级数据洪峰下,消息发送 99.996% 在毫秒级响应;消息发布平均响应时间不超过 3 毫秒。

2. 统一的消息内核

阿里云消息队列的另一核心竞争力为统一的消息内核,整个消息云产品簇都建设在统一的 RocketMQ 内核之上,所有的云产品提供一致的底层能力。

15ed227970057b0055eb6d543f96eacb.png

RocketMQ 内核主要包含以下几个模块:

1)富客户端

RocketMQ 提供一个轻量级的富客户端,暴露 Push、Pull 以及 Pop 三种消费模式,同时内置了重试、熔断等高可用功能,产品簇的众多客户端都是通过对内核的富客户端进行二次开发的。

2)注册中心

也就是 RocketMQ 开发者熟知的 NameServer,以简单可靠的方式提供集群管理、元数据管理、Topic 路由和发现等功能,节点无状态,最终一致的语义确保 NameServer 具有超高的可用性。

3)计算节点

Broker 中的计算部分包含一个高性能的传输层,以及一个可扩展的 RPC 框架,以支持各个产品的丰富的业务需求。

4)存储引擎

Broker 中的核心为存储引擎,经过多年锤炼的存储引擎包含几个核心特点:

  • 低延迟读写互斥:通过在 PageCache 层完成消息的读写互斥,来大幅度保障写链路的低延迟;
  • 日志与索引分离:整个存储层将消息以 Append-Only 的方式集中式存储在 CommitLog 中,同时以索引派发这种可扩展的方法来支持事务、定时、查询以及百万队列等高级特性;
  • 一致性多副本:提供多套一致性多副本实现来满足不同的部署场景和需求,比如 Master-Slave 架构、基于 Raft 的 Dleger 和正在自研的秒级 RTO 多副本协议;
  • 多模存储:在未来存储的方式肯定是多样化的,存储引擎抽象来统一的存储接口,并提供了本地块设备、云存储以及盘古原生存储等实现。
  • 多级存储:越来越的用户对消息生命周期有了更高的要求,在过去,消息作为应用开发的中间状态,往往只会被存储数天,通过 Deep Storage,将以低成本的方式大幅延长消息的生命周期,将消息转化为用户的数据资产,以挖掘更多的诸如消息分析、消息计算需求。

3. 全方面的稳定性建设

稳定性永远是前面的 1,业务发展和创新是后面的 0。
—— 叔同

稳定性的重要性是不言而喻的,稳定性是用户做技术和产品选型的时候考察第一要素,阿里云消息队列在稳定性方面做了全面的建设。

91331fd1a5cc7a7e833f9ed51152c68a.png

阿里云消息队列主要从以下几个维度进行稳定性建设:

1)架构开发

整个系统是面向失败设计的,除了最核心的组件,所有的外部依赖都是弱依赖;在产品迭代阶段,建立了完善的 Code Review、单元测试、集成测试、性能测试以及容灾测试流程。

2)变更管理

风险往往来自于变更,我们对变更的要求是可灰度、可监控、可回滚以及可降级的。

3)稳定性防护

限流、降级、容量评估、应急方案、大促保障、故障演练、预案演练、定期风险梳理等都是我们的稳定性防护手段。

4)体系化巡检

分为黑盒巡检和白盒巡检,黑盒巡检会站在用户视角对产品功能进行全方面扫描,包含了 50+ 检测项;白盒巡检会自动化检测 JVM 运行时指标、内核系统指标、集群统计指标等,并在指标异常时及时预警。

5)故障应急

我们建设了一套完整的故障应急流程,从监控报警->故障发生->快速止血->排查根因->故障复盘,整个链路都是顺畅的。

云原生消息展望

在消息产品矩阵小节中提到,EventBridge 是作为我们下一代的消息产品形态,该产品也即将迎来公测,本章节主要介绍 EventBridge 的产品定位。

1. 消息与事件

827be63b22b417520238fa8623517721.png

消息和事件是两种不同形态的抽象,也意味着满足不同的场景:

1)消息

消息是比事件更通用的抽象,常用于微服务调用之间的异步解耦,微服务调用之间往往需要等到服务能力不对等时才会去通过消息对服务调用进行异步化改造;消息的内容往往绑定了较强的业务属性,消息的发送方对消息处理逻辑是有明确的预期的。

2)事件

事件相对于消息更加具像化,代表了事情的发送、条件和状态的变化;事件源来自不同的组织和环境,所以事件总线天然需要跨组织;事件源对事件将被如何响应没有任何预期的,所以采用事件的应用架构是更彻底的解耦,采用事件的应用架构将更加具备可扩展性和灵活性。

2. EventBridge:中心化事件总线

EventBridge 作为我们即将发布的新产品,其核心能力之一便是提供中心化的事件总线能力。

3049c0f9a2c0b997462ae77e29207243.png

EventBridge 将提供云产品之间、云应用之间、云产品与云应用之间,以及它们与 SaaS 提供商之间的集成与被集成能力。

在中心化事件总线中有几个重要的概念:

  • 事件源:事件源可以是阿里云服务,比如对象存储、ECS、数据库等,也可以是用户的应用程序或者第三方 SaaS,这些事件源将提供丰富的业务事件、云产品运维事件、事件流等;
  • 资源管理:EventBridge 内部将提供总线管理、规则管理以及 Schema 管理,提供全托管的事件服务;
  • 事件处理:EventBridge 将提供事件传输、事件过滤、事件路由、事件查询、回放、重试、追踪等核心的事件处理能力;
  • 事件目标:事件最终投递的目标服务包罗万象,既可以触发一个 Serverless 的 Function,也可以投递至消息队列其它产品,运维事件还可以通过短信、邮件以及日志服务触达运维人员。

3. EventBridge:EDA 服务框架

8901b09b663e1a2c373c306bee92ee10.png

EventBridge 另一个核心能力是 EDA 服务框架。微服务有两种驱动方式:请求驱动和事件驱动。在请求驱动模式下,服务之间调用是同步调用,这种模式优点是延迟低,但是服务之间的耦合是比较重的,相比之下事件驱动有几个优点:

  • 异步化:所有的调用通过事件异步化驱动,服务之间没有显示的依赖关系;
  • 松耦合:通过事件总线解除所有服务之间的耦合关系;
  • 可扩展:可扩展能力非常强,基于总线和事件 Schema 完成业务的扩展非常简单;
  • 零改造:请求驱动的微服务,在遇到服务之间能力不对等时,往往需要进行基于消息异步化改造,避免慢调用、超时等异常情况在整个分布式集群触发雪崩效应。基于事件驱动的微服务天然具备力异步、削峰等能力,所以在业务规模扩大时不会带来额外的改造成本。

上图是设想的一个采用 EDA 的应用架构图:

  • 基于 EventBridge 可以实践流行的 CQRS 和 Event Souring 范式;
  • 可以从 IoT 端设备上接入 Event Streaming;
  • 基于事件驱动的微服务程序也可以通过 API 网关暴露传统的 Request 请求方式,供前端访问;
  • EventBridge 还可以连接第三方 SaaS 提供商,云提供商,不同组织的观察者,与分布式的事件微服务集成;
  • 事件驱动和请求驱动是相辅相成的关系,通过统一 Event APIs 和 REST APIs 打通事件驱动的微服务与请求驱动的微服务,来进行架构上的融合与统一。

4. EDA 成熟度模型

9262612f70aad000c38d82c9f16dd9e6.png

我们通过 Gartner 报告总结的 EDA 成熟度模型,展望以下 EDA 架构的未来:

  • Incidental:偶发性地使用事件通知机制来进行一些状态的捕获,没有明确的事件处理策略;
  • Brokered:提供托管的事件代理服务,组织中部分应用开始采用基于消息或者事件的异步化架构;
  • Centralized:以战略的形式提出中心化的 EDA 解决方案,有专门的组织团队提供 EDA 实现,EDA 架构开始广泛被采用;
  • Advanced:EDA 架构开始触达更多的业务领域,比如流计算,数据分析,AI,以及 API 市场等,跨组织的事件生态开始形成并进行扩张;
  • Pervasive:事件变得无处不在,庞大的事件生态形成,组织间的隔离被事件彻底打通,企业的关键业务都将采取 EDA 架构;事件驱动与请求驱动两个生态完成融合。

阿里云消息团队在 EDA 领域的探索目前是处于第三个阶段,未来还有很长的路要走。

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

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

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

相关文章

mongodb mysql配置_Nosql_MongoDB数据库配置以及基本指令

数据库(database)-数据库的服务器-服务器用来保存数据-mongod用来启动服务器-数据库的客户端-客户端用来操作服务器,对数据进行增删改查的操作-mongo用来启动客户端(不能关闭启动的服务器,否则新开的客户端无法连接)扩展:将mongodb设置为系统…

kafka学习_Kafka 学习笔记01

Kafka概念和基本架构概述以下内容来自拉勾课程学习拉勾教育 - 拉勾旗下教育平台一、Kafka介绍Kafka是最初由 Linkedin 公司开发,是一个 分布式、分区的、多副本的、多生产者、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统&a…

php 随机在文章中添加锚文本_锚文本对网站SEO优化有什么帮助?

对于优化人员来说,网站在做优化时都会在网站关键词或长尾词上添加锚文本,锚文本又称锚文本链接,是链接的一种形式。那么描文本的添加对网站优化都有什么好处呢?下面一起来了解一下。一、锚文本为网站传递权重在更新网站内容时&…

malloc 结构体_二进制安全之堆溢出(系列)——堆基础 amp; 结构(二)

哈喽啊这里是二进制安全之堆溢出(系列)第二期“堆基础 & 结构”第二节!!话不多说,直接上干货!微观结构函数执行流程void *malloc (size_t bytes) void *__libc_malloc (size_t bytes) //对于_int_mallo…

深入理解计算机系统第四版_深入理解计算机系统之存储器层次结构

我的计算机模型是这样的:CPU执行指令,内存犹如一个巨大的字节数组,存储着指令和数据,硬盘保存着各种程序与程序用到的数据。I/O完成输入输出的功能。在本文中我们抛开I/O,谈一谈关于CPU,内存,硬…

java jmeter_使用Jmeter中的Java Request进行性能测试

在使用jmeter进行性能测试的时候,有可能会需要通过一些脚本去测试性能,(比如通过sokeeper的api去测试sokeeper的读写性能)。这时,我们可以通过Java Request实现,以下是操作步骤。首先创建一个maven project。因Jmeter的Java Reque…

m.2接口和nvme区别_m.2 nvme和m.2有区别吗?

m2接口有两种,一种走sata的,另外一种走pcie(就是nvme)的。走sata的速度跟传统sata接口的没区别,就是接口变成了m2的了。走pcie的,就是我们说的nvme接口是m2的,性能也强了。M.2接口有SATA也有NVMe PCIe协议。这个是同一…

如何查看cplex的help文档_word查看技巧:如何快速找到文档的修改痕迹

不知道大家在工作中有没有遇到过这类的工作场景:当初步拟好一份合作协议或是项目策划书后,发给老板或其他同事审阅和修订,通常会不断地来回修改文档。此时,如果你想要查看文档哪里被修改过?你会怎么操作?很…

mysql set语句_MySQL Prepared语句简介

之前的MySQL版本4.1,查询以文本格式发送到MySQL服务器。 之后,MySQL服务器使用文本协议将数据返回给客户端。MySQL必须完全解析查询,并将结果集转换为字符串,然后再将其返回给客户端。 文本协议具有严重的性能问题。为了解决这个问…

三同轴连接器_一种毫米波频段微带同轴转换结构

在微波电路中,同轴电缆和微带线是微波系统中常见的两种微波传输线,同轴电缆以其频带宽、屏蔽性好、结构简单、可弯曲等特性,常被用作模块或系统之间连接的传输线。在高频段,微带线是混合微波集成电路(Hybrid Microwave Integrated…

nginx https透明代理_Nginx反向代理https,配置lets-encrypt证书教程

前言本站也终于迁移到https了,由于全Docker部署,迁移过程中真是艰难无比(wordpress那块被折腾的想放弃了),也欢迎访问本人博客,(知乎的排版有些乱)Nginx反向代理https,配置lets-encr…

nginx 一个请求发给多台机器_配置Nginx实现负载均衡

企业在解决高并发问题时,一般有两个方向的处理策略,软件、硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库web服务器两处添加解决方案,其中web服务器前面一层最常用的的添加负载方案…

怎么用记事本写java_如何用记事本写下第一个Java程序-Fun言

在刚学java的时候,刚开始并未接触类似于Myeclipse这类的编辑器,都是用记事本编写程序,这样虽然很慢,但是能让我们明白其中的原理,所以今天来教大家用记事本来写第一个java程序"Hello World!"准备…

ps发光插件_PS插件自定义区域发光真实辉光插件 Oniric Glow Generator for Photoshop【资源分享1444】...

AE特效PR剪辑C4D影视后期全世界只有不到1%的人关注了你是个很特别的人AE影视后期定期推送「AEPRC4D 影视特效合成 婚庆剪辑调色 电视广告包装 微电影制作 SpeedGrade达芬奇专业调色 摄影等」打造影视后期高端学习平台影视后期 ID:AEPRC4D9【PS插件信息】非常棒的一款…

python 退出_如果读完这篇文章不能让你入门Python,那我将永久退出编程界

(PS:文末福利赠送 无套路,真实有效!)Python是一种动态解释型的编程语言。Python可以在Windows、UNIX、MAC等多种操作系统上使用,也可以在Java、.NET开发平台上使用。【特点】1 Python使用C语言开发,但是Python不再有C语言中的指针…

unity 检测文本有没有自动换行_python3从零学习-5.1.5、文本自动换行与填充模块textwrap...

TextWrapper 模块提供了一些快捷函数,以及可以完成所有工作的类 TextWrapper 如果你只是要对一两个文本字符串进行自动换行或填充,快捷函数应该就够用了;否则的话,你应该使用 TextWrapper 的实例来提高效率。…

红黑树和平衡二叉树的区别_一文搞懂红黑树

文章参考 | https://segmentfault.com/a/1190000012728513前言当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!二叉树在了解红黑树之前,先要了解二叉树,又叫二叉查找树、二叉搜索树、二叉排序树。二叉树顾名思…

mysql table keys_MySQL Explain详解

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做…

程序员肚子越来越大_肚子越来越大,除了肥胖还可能是疾病信号!腰间搓一搓,排出痰浊,消脂防病~...

☀ 定期推送健康知识,生活窍门,演出资讯,旅游信息,商家优惠等诸多优质内容,接地气、重服务的微信平台!关注我们妥妥没错!今天我们所说的“要命的肚子”就是一种肥胖,众所周知导致肥胖…

高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...

1.HttpServletRequest 类a)HttpServletRequest 类有什么作用。每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletReq…