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

基于 SmartX 分布式存储的 iSCSI 与两种 NVMe-oF 技术与性能对比

作者:深耕行业的 SmartX 金融团队

本文重点

  • SmartX 分布式块存储 ZBS 提供 2 种存算分离架构下的数据接入协议,分别是 iSCSI 和 NVMe-oF。其中,iSCSI 虽然具有很多优势,但不适合支持高性能的工作负载,这也是 SmartX 选择支持 NVMe-oF 的原因之一。

  • 结合性能和网络条件这两个角度的考虑,ZBS 选择支持 NVMe over RDMA/RoCE v2 和 NVMe over TCP,以满足用户的多种需求。

  • ZBS 中,NVMe-oF 接入采用继承策略和均衡策略,这样的设计可以在充分利用多个存储接入点的同时避免占用所有存储接入点的处理能力,保持各个接入点的负载基本均衡。

  • 从实验室基础性能验证和金融用户性能验证可以看出,相比 iSCSI 和 NVMe over TCP,使用 NVMe over RDMA 作为接入协议,可以取得较高的 I/O 性能输出,具体表现为更高的随机 IOPS 和顺序带宽,以及更低的延时表现。

1 背景

分布式块存储 ZBS 的自主研发之旅|架构篇”文章提及了部分数据路径的设计实现,仅描述了当 I/O 发生时,Access 数据接入组件与 Meta 管理组件之间的通信过程,该过程属于整个 I/O 路径的后半段。

本篇文章,我们将详细介绍数据接入路径中的前半段,即计算端与 ZBS 通信的接入协议层,使读者可以更加全面地了解 ZBS 分布式存储接入协议,同时通过对比不同接入协议的原理实现、基础环境要求和性能测试数据,为客户在部署使用 ZBS,提供最佳实践参考。

本篇文章会涉及到 RDMA(Remote Direct Memory Access)技术,如果读者想更多地了解该技术细节,推荐阅读“分布式块存储 ZBS 的自主研发之旅|数据同步协议RDMA”文章。

2 Access 概述

Access 是虚拟存储对象(File/LUN/Namespace)与实际的数据块(Extent)之间的交互边界。Access 接收 NFS Client、iSCSI Initiator、NVMF initiator 的读写请求,并将不同的协议对象,例如 File、LUN、Namespace 转义成 ZBS 内部的 Volume 与 Extent 对象,并处理数据多副本等 ZBS 内部逻辑。

Access 通过 Session 机制与 Meta 建立联系,并由 Session 确保数据访问权限(Extent Lease)的唯一性。

图 1:Access 接入服务

3 接入协议

目前 ZBS 提供 4 种接入协议,分别是 NFS、iSCSI、NVMe-oF 和 vHost,其中 NFS 和 vHost 主要应用场景是超融合架构(相关 vHost 详细介绍可参考文章 “SPDK vHost-user 如何帮助超融合架构实现 I/O 存储性能提升”),本文不进行过多展开,将主要介绍存算分离架构下的数据接入协议。

图 2:ZBS iSCSI & NVMe-oF 接入协议

3.1 ZBS iSCSI 实现

当前,在云计算块存储场景中,iSCSI 依然是分布式存储 SDS 主流的接入方法之一,其基于标准的 TCP/IP 协议栈、无需改动已有客户端系统、对服务器硬件和标准以太网有着广泛的兼容性、管理简单等特点,使 iSCSI 得到广泛的应用。

iSCSI 是目前 ZBS 支持的接入协议之一,在 ZBS 实现中,客户端(initiator)均不直接指向某个具体的存储节点 Access 作为协议接入端,而是指向 iSCSI Redirector 服务地址。当 iSCSI initiator 向 iSCSI Redirector 发起 Login 请求时,iSCSI Redirector 将登录请求转发给 Meta,Meta 根据与 Access 维护的 Session 信息寻找是否已经存在绑定的 Access Server,如有则返回对应的 Access Server 地址,否则将返回任一 Access Server 地址。客户端(initiator)将与对应的 Access Server 完成 Login 过程与后续的 I/O 处理流程。

通过 Redirector 服务可简化 iSCSI 接入高可用配置的复杂度。同样,iSCSI 也基于 Redirector 服务提供单一客户端(initiator)访问一个 iSCSI Target 仅使用一条数据链路的单点接入保证(避免同一 Target 的多点访问),以及接入链路均衡的作用。

图 3 :iSCSI 接入架构

iSCSI 虽然具备很多使用上的优势,但是在性能层面,却一直存在难以充分发挥现代高速存储和网络设备性能的问题,SCSI 协议的设计和开发时间可以追溯到上个世纪,首先是当时硬件环境还是以机械磁盘为主流,协议对当今高性能硬件,例如 NVMe 介质,以及现代工作负载的要求,已显疲态。其次是协议栈层面,长期不断的开发迭代,相较新型的协议,iSCSI 相对厚重且效率低下。

对于性能提升,iSER(iSCSI Extensions for RDMA)是 iSCSI 的一次进化,通过 RDMA 能力,来提升 iSCSI 在网络层的性能。ZBS 并没有采用这样的技术栈,原因也很简单,因为 iSER 的基石依然是 iSCSI,前面也简要分析了该协议的一些不足,做个比喻,就是建筑物和地基的关系。既然要使用 RDMA,选择新型的 NVMe 协议支撑高性能的工作负载会是更优的选择。

3.2 NVMe-oF 介绍

在介绍 NVMe-oF 之前,首先简单介绍一下 NVM Express(NVMe)协议规范,该协议定义主机如何通过 PCIe 总线与非易失性存储器进行通信。NVMe 规范是为 SSD 高速存储介质而量身设计,相较于 SCSI,是一种更加高效的接口规范,支持 65535 个 I/O 队列,每个队列支持 65535 条命令(队列深度)。队列映射提供预期的 CPU 资源调度,并能适应在中断或轮询模式下的设备驱动,提供了更高的数据吞吐和更低的通信延迟。

更快的存储,则需要更快的网络才能发挥最大的存储价值。NVMe-oF 全称是 NVMe over Fabrics(本文均采用缩写 NVMe-oF),它把 NVMe 在单系统内部提供的高性能、低延迟和极低的协议开销等优势进一步发挥到客户端与存储系统互联的网络结构当中。NVMe-oF 定义了使用多种通用的传输层协议来实现 NVMe 远程连接能力。

图 4:NVMe over Fabrics

NVMe-oF 承载网络(数据平面)包括:

(1)NVMe over FC:基于传统的 FC 网络(主机总线适配器 HBA 和光纤交换机构建的专有通信网络),与 FC-SAN(SCSI)可以同时运行在同一个 FC 网络中,最大化地复用 FC 网络基础环境,发挥 NVMe 新型协议的优势。常用于传统集中存储的升级改造。

(2)NVMe over RDMA:通过远程直接内存访问技术,允许客户端程序远程访问存储系统的内存空间进行数据传输。具有数据零拷贝(不涉及网络堆栈执行数据传输)、Kernel Bypass(应用程序可以直接从用户空间执行数据传输,无需内核参与)、减少 CPU 资源消耗(应用程序可以访问远程内存,而无需在远程服务器中消耗任何 CPU Cycle)等特点。

① InfiniBand - 通过 InfiniBand 网络使用 RDMA,在高性能计算 HPC 领域非常流行,与 FC 相似,需要专有的网络适配器和交换网络支撑。

② RoCE - 全称 RDMA over Converged Ethernet,即通过以太网实现 RDMA,目前有两个版本:RoCEv1 不可路由,仅可以在 2 层工作;RoCEv2 使用 UDP/IP,具有 3 层路由能力。

图 5:RoCEv1/v2 帧结构(来自 Wikipedia)

③ iWARP - 构建在 TCP/IP 之上。跟 RoCE 协议继承自 Infiniband 不同,iWARP 本身不是直接从 Infiniband 发展而来的。Infiniband 和 RoCE 协议都是基于 “Infiniband Architecture Specification”,也就是常说的“IB 规范”。而 iWARP 是自成一派,遵循着一套 IETF 设计的协议标准。虽然遵循着不同的标准,但是 iWARP 的设计思想受到了很多 Infiniband 的影响,并且目前使用同一套编程接口。

(3)NVMe over TCP:与前两种实现方式不同,该方案无需任何特殊的硬件要求,基于通用标准以太网环境。成本低是该协议的优势,缺点是需要更多的 CPU 资源参与数据处理,受限于 TCP/IP 协议,在数据传输中相对 RDMA 会引入更多的延迟。

ZBS 不支持 FC 和 IB 的主要原因是其依赖专有网络,这与 ZBS 的产品定位相冲突(基于标准以太网构建分布式存储网络)。而不支持 iWARP 原因是对比 RoCE 来看(这是一个二选一问题),在生态、协议效率和复杂度等多方面因素评估下,SmartX 更加看好 RoCE 未来的发展,在极致的性能诉求下,RoCE 也会比 iWARP 具有更强的潜力。当然,RoCE 在数据重传和拥塞控制上受限于协议,需要无损网络的环境(RoCE 对于丢包 PSN 的 NACK 重传机制,性能非常差)。这样的客观条件,是任何一个存储厂家需要结合自身产品权衡的选择题。

总结一下,应用 NVMe-oF,可以选择的技术路线有 3 条,分别是 FC、RDMA 和 TCP,从性能和网络条件这两个维度出发,ZBS 选择支持 RDMA/RoCE v2 和 TCP,这样的组合,可以非常好地适配不同客户的个性需求。

  • 对性能敏感,并愿意为提高性能而投入更多的网络成本,可以选择使用 RDMA/RoCE v2 接入方案。

  • 对成本敏感或受网络条件限制,可以选择 TCP 的接入方案。

3.3 ZBS NVMe-oF 实现

NVMe-oF 在 ZBS 中支持两种形态,即 RDMA/RoCE v2 和 TCP,这两个形态区别仅体现在外部客户端使用哪种协议接入 Access,在元数据管理上并没有区别。

NVMe-oF 协议本身与 iSCSI 协议有很多相似的地方,例如客户端标识为 initiator 端,服务端为 Target 端,NVMe-oF 协议中使用与 iSCSI IQN 近似的 NQN 来作为协议通讯双方的标识等。同时,NVMe-oF 定义了 Subsystem(子系统,相当于 SCSI 体系下的 Target)和 Namespace(命名空间,类似于 SCSI 体系下的 LUN)专有标准。

相比于 iSCSI 通过 initiator + Target 的数据链路控制,NVMe-oF 可以支持 initiator + Namespace 这样更小的链路控制粒度。NVMe-oF 在路径策略选择上(协议原生支持 Multipath)是通过 ANA(Asymmetric Namespace Access)机制指定 Target 链路优先级,再由客户端结合优先级与自身的链路状态探测结果选择 I/O 具体路径。

ANA 状态包括:Optimized 最优/Non-Optimized 次优/Inaccessible 不可达/Persistent Loss 失去连接/Change 状态变更。

ZBS 会将所有的可用链路设置为 OP(最优链路)和 Non-OP(次优链路)两种状态,其他状态未发生异常或变化时由 Driver 自动标记。对于每个 initiator + Namespace 的组合,仅返回 1 个最优接入点和 2 个次优接入点。在最优接入点可用时,客户端将仅通过最优接入点访问数据,在异常时选择 2 个次优接入点中的一个进行访问(出于简化安全性处理的考虑,部署时会要求客户端配置为 AB 模式,即使 2 个次优接入点是等价的,也不会进入 AA 模式,同时从两个接入点中下发 I/O)。

ZBS 接入策略:

  • 继承策略,同一客户端访问同一 Subsystem 中的所有 Namespace 使用同一接入点。

  • 均衡策略,保证同一 Namespace Group 中的 Namespace 尽量使用不同接入点。

ZBS 接入点分配策略可以实现以下目标:

  • 在客户端视角,允许利用多个存储接入点的处理能力。

  • 在客户端视角,保证不同客户端的公平性,避免占用所有存储接入点的处理能力。

  • 在存储接入点视角,保持各个接入点的负载基本均衡,同时又尽可能发挥多个接入点的处理能力。

图 6:NVMe-oF 接入架构

4 实验室性能验证数据

4.1 环境信息

存储集群,由 3 节点组成,安装 SMTX ZBS 5.2 OS,存储内部网络开启 RDMA ,分层存储结构,所有存储节点的硬件配置相同,节点环境信息如下:

计算端安装 CentOS 8.2 操作系统,使用 FIO 压测工具(模型 direct=1,numjobs=1,ioengine=libaio),硬件环境信息如下:

4.2 性能数据

在相同的测试环境和测试方法下,分别使用不同的接入协议进行性能验证(iSCSI、NVMe over TCP 和 NVMe over RDMA),测试基于单卷(单节点性能,测试 1 个 2 副本卷)和多卷(集群性能,对于 3 节点集群,将测试 3 个 2 副本卷)的存储基准性能(4K 随机 I/O,256K 顺序 I/O)。

4.2.1 单卷性能

4.2.2 多卷性能

4.3 测试结论

通过以上基准测试数据,可以看到,相同软硬件环境以及测试方法下,使用 NVMe over RDMA 作为接入协议,可以取得较高的 I/O 性能输出,其表现为更高的随机 IOPS 和顺序带宽,以及更低的延时表现。

5 某股份制银行性能验证数据

与实验室基准测试数据不同,用户关注的是贴合自身应用业务的真实 I/O 模型。某股份制银行性能验证要求如下:

  • 在相同环境下,验证 iSCSI、NVMe over TCP 和 NVMe over RDMA 性能表现。

  • I/O 模型为 8K 和 16K 随机读写,读写比例 5 : 5。

  • 验证写平均延迟不大于 300us 和 500us 下的 IOPS 的性能表现以及对应的 iodepth。

  • 所有接入协议场景,分布式存储内部均开启 RDMA。

5.1 环境信息

存储集群,由 3 节点组成,安装 SMTX ZBS 5.0 OS,存储内部网络开启 RDMA ,所有存储节点的硬件配置相同,节点环境信息如下:

3 台计算端,安装 CentOS 8.4 操作系统,使用 vdbench 压测工具,硬件环境信息如下:

5.2 性能数据

在相同的测试环境和测试方法下,分别使用不同的接入协议进行性能验证(iSCSI、NVMe over TCP 和 NVMe over RDMA),测试多卷集群性能(3 节点存储集群,将测试 3 个 2 副本卷)。

5.2.1 延时 <= 300us 测试数据 IOPS(单位:K)

5.2.2 延迟 <= 500us 测试数据 IOPS(单位:K)

5.3 测试结论

通过固定写入延迟,观察在调整 iodepth 深度下不同接入协议所能发挥的 IOPS 性能。从测试结果可以看出,在 8K 和 16K 混合读写测试场景中,NVMe over RDMA 依然发挥出最高的随机 I/O 性能。

6 结论

本文详细描述 ZBS 分布式块存储的数据接入原理,同时分别介绍了所支持的多种接入协议的实现方式,以及背后的思考。通过原理介绍和实际验证数据,希望给读者一个全面的视角理解 ZBS 接入服务,为更好部署和使用 ZBS 提供参考。

参考文章:

1. RDMA over Converged Ethernet. Wikipedia.

https://en.wikipedia.org/wiki/RDMA_over_Converged_Ethernet

2. How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics.

https://www.snia.org/sites/default/files/ESF/How_Ethernet_RDMA_Protocols_Support_NVMe_over_Fabrics_Final.pdf

相关文章:

基于 SmartX 分布式存储的 iSCSI 与两种 NVMe-oF 技术与性能对比

作者&#xff1a;深耕行业的 SmartX 金融团队本文重点SmartX 分布式块存储 ZBS 提供 2 种存算分离架构下的数据接入协议&#xff0c;分别是 iSCSI 和 NVMe-oF。其中&#xff0c;iSCSI 虽然具有很多优势&#xff0c;但不适合支持高性能的工作负载&#xff0c;这也是 SmartX 选择…...

Anaconda 安装 Pytorch

下载Anaconda,最新版本的即可,默认安装,最好不要安装在C盘,否则后面C盘容量会很大。 安装Pytorch 打开 Anaconda Prompt ,先切换镜像源为国内清华镜像源,这样安装包的时候下载速度会快一些,也容易成功一些。 在 Anaconda Prompt 命令行依次输入以下四条命令切换到清华镜…...

从零开始使用MMSegmentation训练Segformer

从零开始使用MMSegmentation训练Segformer 写在前面&#xff1a;最新想要用最新的分割算法如&#xff1a;Segformer or SegNeXt 在自己的数据集上进行训练&#xff0c;但是有不是搞语义分割出身的&#xff0c;而且也没有系统的学过MMCV以及MMSegmentation。所以就折腾了很久&am…...

会利用信息差赚钱的人才是聪明人

毕业后找不到工作&#xff0c;穷到只剩下时间&#xff0c;大小做了20多份副业兼职&#xff0c;终于找到了可靠的渠道&#xff0c; 我是专科生&#xff0c;学历不好&#xff0c;专业拉胯。毕业后&#xff0c;我找了两三份工作。要么工资太低&#xff0c;只能交房租&#xff0c;…...

【机器学习】Adaboost

1.什么是Adaboost AdaBoost&#xff08;adapt boost&#xff09;&#xff0c;自适应推进算法&#xff0c;属于Boosting方法的学习机制。是一种通过改变训练样本权重来学习多个弱分类器并进行线性结合的过程。它的自适应在于&#xff1a;被前一个基本分类器误分类的样本的权值会…...

深度学习神经网络基础知识(二)权重衰减、暂退法(Dropout)

专栏&#xff1a;神经网络复现目录 深度学习神经网络基础知识(二) 本文讲述神经网络基础知识&#xff0c;具体细节讲述前向传播&#xff0c;反向传播和计算图&#xff0c;同时讲解神经网络优化方法&#xff1a;权重衰减&#xff0c;Dropout等方法&#xff0c;最后进行Kaggle实…...

[面试直通版]网络协议面试核心之HTTP,HTTPS,DNS-DNS安全

点击->计算机网络复习的文章集<-点击 目录 典型问题&#xff1a; 部分现象 DNS劫持 DNS欺骗 DDoS攻击 典型问题&#xff1a; 什么是DNS劫持&#xff0c;DNS欺骗&#xff0c;是什么原理如何防范DNS攻击&#xff1f; 部分现象 错误域名解析到纠错导航页面错误域名解析…...

【OJ】A+B=X

&#x1f4da;Description: 数列S中有n个整数&#xff0c;判断S中是否存在两个数A、B&#xff0c;使之和等于X。 ⏳Input: 第一行为T&#xff0c;输入包括T组测试数据。 每组数据第一行包括两个数字n和X&#xff0c;第二行有n个整数&#xff0c;表示数列S&#xff0c;(1&l…...

Python实现性能自动化测试,还可以如此简单

Python实现性能自动化测试&#xff0c;还可以如此简单 目录&#xff1a;导读 一、思考❓❔ 二、基础操作&#x1f528;&#x1f528; 三、综合案例演练&#x1f528;&#x1f528; 四、总结&#x1f4a1;&#x1f4a1; 写在最后 一、思考❓❔ 1.什么是性能自动化测试? 性…...

Leetcode力扣秋招刷题路-0080

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 80. 删除有序数组中的重复项 II 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长…...

Java实现JDBC工具类DbUtils的抽取及程序实现数据库的增删改操作

封装DbUtils 工具类 不知道我们发现没有&#xff0c;不管是对数据库进行查询&#xff0c;还是标准的JDBC 步骤&#xff0c;其开端都是先实现JDBC 的加载注册&#xff0c;接着是获取数据库的连接&#xff0c;最后都是实现关闭连接&#xff0c;释放资源的操作。那我们何不直接把…...

【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/

&#x1f341;博主简介   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录问题报错原因解决方法问题 ERROR…...

java中NumberFormat 、DecimalFormat的介绍及使用,java数字格式化,BigDecimal数字格式化

文章目录前言一、NumberFormat1、概述2、实例化方法3、货币格式化4、百分比格式化5、NumberFormat的坑5.1、不同的格式化对象处理相同数值返回结果不同问题源码分析&#xff1a;二、DecimalFormat1、概述2、常用方法3、字符及含义0与#的区别分组分隔符的使用“%” 将数字乘以10…...

2023什么是分销商城系统?营销,核心功能

大家好&#xff0c;我是你们熟悉而又陌生的好朋友梦龙&#xff0c;一个创业期的年轻人 分销商城是指由网络营销运营商提供的&#xff0c;用于协助供给商搭建、管理及运作其网络销售渠道&#xff0c;协助分销商获取货源渠道的平台。简单来说&#xff0c;就是企业应用无线裂变分…...

天翼数字生活C++客户端实习

面试C客户端实习的岗位&#xff0c;相对不难 面试官&#xff1a;实习主要做的是国产操作系统下的应用&#xff0c;主要做的是视频监控、安防相关的工具&#xff0c;具体就是一个叫做 天翼云眼的软件&#xff0c;目前在windows下和电视下都有对应的应用&#xff0c;就是现在想在…...

Java 接口

文章目录1、接口的概念2、接口的定义3、接口的使用4、接口和抽象类1、接口的概念 类是一种具体的实现体&#xff0c;而接口定义了一种规范&#xff08;抽象方法&#xff09;&#xff0c;接口定义了某一批类所需要遵循的规范&#xff0c;接口不关心类内部的属性和方法的具体实现…...

【React】react-router 路由详解

&#x1f6a9;&#x1f6a9;&#x1f6a9; &#x1f48e;个人主页: 阿选不出来 &#x1f4a8;&#x1f4a8;&#x1f4a8; &#x1f48e;个人简介: 一名大二在校生,学习方向前端,不定时更新自己学习道路上的一些笔记. &#x1f4a8;&#x1f4a8;&#x1f4a8; &#x1f48e;目…...

DaVinci 偏好设置:系统 - 内存和 GPU

偏好设置 - 系统/内存和 GPUPreferences - System/Memory and GPU内存和 GPU Memory and GPU 选项卡提供了内存配置以及 GPU 配置的相关设置。内存配置Memory Configuration系统内存System Memory列出了所用电脑的总的可用内存。限制 Resolve 内存使用到Limit Resolve memory u…...

视频知识点(22)- 教你认清楚YUV420P和YUV420SP的真正差异在哪里

*《音视频开发》系列-总览* 前言 在视频技术领域,存在着非常多的颜色空间模型,YUV颜色空间就是其中之一。我们没有必要把所有的颜色空间都搞明白,只需要关注自己所从事的领域的常用颜色空间模型即可,同样,YUV颜色空间模型也有非常多的子类型,我们也没有必要都搞得清清楚楚…...

企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + Redis + Layui

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…...

面试常问-Alpha测试和Beta测试

Alpha测试 Alpha测试是一种验收测试&#xff0c;在识别典型用户可能执行的任务并对其进行测试之前&#xff0c;执行该测试是为了识别所有可能的问题和错误。 尽可能简单地说&#xff0c;这种测试之所以被称为alpha&#xff0c;只是因为它是在软件开发的早期、接近开发结束时和…...

html理论基础

组织&#xff1a;中国互动出版网&#xff08;http://www.china-pub.com/&#xff09;RFC文档中文翻译计划&#xff08;http://www.china-pub.com/compters/emook/aboutemook.htm&#xff09;E-mail&#xff1a;ouyangchina-pub.com译者&#xff1a;黄俊&#xff08;hujiao hj_c…...

【安卓开发】数据存储全方案--详解持久化技术

读书笔记系列&#xff1a;第一行代码 Android 6.1 持久化技术简介 三种数据持久化方式&#xff1a;文件存储、SharedPreference存储以及数据库存储&#xff0c;除此之外还可以存储在SD卡中&#xff08;不安全&#xff09; 6.2 文件存储 该方法不对存储的内容做格式化处理都…...

Vue项目实战

一、产品开发的大致流程 一般公司流程如下&#xff1a; 1、产品经理设计产品原型图 2、UI设计师设计符合需求的原型UI图 3、前端100%还原高保真UI设计图 4、后端设计接口 5、前后端接口联调 6、前后端功能自测 7、测试、运维进行产品的测试和上线 一般大型公司流程如下&…...

Github 学生优惠包 -- 最新防踩坑指南

Github学生优惠包的申请最近越来越麻烦&#xff0c;里面有非常多的坑&#xff0c;留下此文防止各位申请的时候踩到。 此文面向中国大陆真正有学生身份的同学&#xff01;&#xff01;&#xff01; 文章目录前言1.用到的网址2.申请所需3.详细步骤4.踩坑点前言 记得在一年以前还…...

2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(二)

前言 资源放CSDN上面过不了审核,都快结束了都没过审真的麻了,订阅专栏的同学直接加我微信直接发你。我只打造优质专栏。专注建模四年,博主参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使…...

第47章 后端管理首页与Axios拦截守卫原理

1 404全局拦截 1.1 定义布局页&#xff1a;src\views\ 404View.vue <template> <el-container> <el-main> </el-main> <el-footer> <h1>大人&#xff0c;你要找的页面离家出走了&#xff01;小的正在努力寻找中…</h1> </el-fo…...

【前端】小程序开发入门:安装开发工具、目录结构与项目配置

文章目录前期准备目录结构app.jsonpageswindow其他前期准备 开发小程序要先申请一个对应的AppID&#xff1a;微信小程序 (qq.com) 微信官方小程序开发文档&#xff1a;微信开放文档 (qq.com) 然后安装一个小程序开发工具&#xff1a; 选择稳定版&#xff1a; 安装后打开&…...

Java反序列化漏洞——CommonsBeanutils1链分析

一、了解Apache Commons BeanutilsApache Commons Beanutils 是 Apache Commons 工具集下的另一个项目&#xff0c;它提供了对普通Java类对象&#xff08;也称为JavaBean&#xff09;的一些操作方法。在Java中&#xff0c;有很多class的定义都符合这样的规范若干private实例字段…...

三菱PLC的MC协议配置说明

三菱PLC的MC协议配置说明先说一下弱智的踩坑记录详细配置过程1、三菱Q02H CPUQJ71E71-100以太网模块设置MC协议1.1 PLC编程线连接与编程线驱动安装1.2 PLC通讯测试1.3 PLC MC协议设置1.4 PLC断点重启1.5 网络调试助手测试2、三菱Q03UDE CPU内置以太网设置MC协议2.1 PLC编程线连…...

网站管理助手打开是系统参数配置/有道搜索引擎入口

PHP array_replace() 函数实例使用第二个数组($a2)的值替换第一个数组($a1)的值&#xff1a;$a1array("red","green");$a2array("blue","yellow");print_r(array_replace($a1,$a2));?>定义和用法array_replace() 函数使用后面数组…...

最新闻头条新闻/windows优化大师可靠吗

IoC基础篇&#xff08;一&#xff09;--- Spring容器中Bean的生命周期 日出日落&#xff0c;春去秋来&#xff0c;花随流水&#xff0c;北雁南飞&#xff0c;世间万物皆有生死轮回。从调用XML中的Bean配置信息&#xff0c;到应用到具体实例中&#xff0c;再到销毁&#xff0c;B…...

ih5做pc 网站/国家卫健委最新疫情报告

简介 MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。它是非关系型数据库&#xff0c;但其结构与MySQL又很相似&#xff0c;mysql中的表格&#xff0c;在这里被称为集合&#xff0c;mysql表格内的数据是一条条带字段的数据&#xff0c;但在这…...

刚做的网站适合做外链吗/苏州seo

是40&#xff0c; 在建立数据表的时候要注意一下&#xff0c; 用char类型就可以了转载于:https://www.cnblogs.com/souroot/archive/2012/10/20/2732456.html...

武汉平价做网站/网页设计主题推荐

Tomcat 是一个Web 容器&#xff0c;所有的J2EE WEB 程序可以在此处运行。Tomcat 服务器是一个符合J2EE 标准的WEB 服务器&#xff0c;则J2EE 的EJB 程序无法在此处运行。如果要运行可以选择能够运行EJB 程序的容器&#xff1a;WebLogic 、WebSphereE-Mail &#xff1a;mldnqa16…...

临朐昌大建设/杭州seo建站

站在空无一人略有冷意的街头&#xff0c;突然有种恍如隔世的感觉&#xff1a;这就是传说中橘生淮北则为枳的淮北&#xff1f;咦&#xff0c;我为什么会出现在这里&#xff1f; 于是我陷入了深深的思考。 关于对过去的思考 托尔斯泰说过&#xff1a;幸福的家庭是相似的&#xff…...