openstack Storage 组件 Swift 和 Cinder

2023-11-18

Storage 组件 Swift 和 Cinder

本文将介绍 OpenStack Block (Swift) 和 Object (Glance) 存储,解释它如何融入到整体架构中,并展示它的操作方式。本文还将在介绍这些工具的过程中了解了如何安装、配置和使用各种组件。

查看本系列更多内容 | 0 评论:

John Rhoton, 云计算专家 , Recursive

2014 年 6 月 10 日

  • +内容

本文介绍了 OpenStack Storage,该产品为其他 OpenStack 项目提供了永久存储。

根据文中对 OpenStack Compute 的描述,计算是计算工作量的核心。在某些情况下,一个计算实例可能就是所需的一切,但是,通常需要在实例的整个使用期限内的持久存储,或者说,可能需要在运行的各个服务之间共享大量的数据。

事实上,也可能出现这样的情况:应用程序在 OpenStack 环境以外的地方运行,具体情况取决于可重复、可扩展和可靠的存储,而且 OpenStack Storage 满足了所有这些规范。但是,在评估备选方案之前,重要的是要认识到 OpenStack 和其他许多云服务有两个根本不同的存储服务:

  • OpenStack Swift 是一个对象存储示例,它在概念上与 Amazon Simple Storage Service 类似。
  • 与之相反,OpenStack Cinder 表示块存储,类似于 Amazon Elastic Block Store。

块存储 (Cinder)

Cinder 是 OpenStack Block Storage 的项目名称;它为来宾虚拟机 (VM) 提供了持久块存储。对于可扩展的文件系统、最大性能、与企业存储服务的集成以及需要访问原生块级存储的应用程序而言,块存储通常是必需的。

系统可以暴露并连接设备,随后管理服务器的创建、附加到服务器和从服务器分离。应用程序编程接口 (API) 也有助于加强快照管理,这种管理可以备份大量块存储。

回页首

对象存储 (Swift)

Swift 还是 Cinder?何时使用以及使用哪一种?

那么,应该使用哪一种对象存储:Swift 还是 Cinder?答案取决于您的应用程序。如果需要运行商用或遗留应用程序,那么很少需要进行这种选择。这些应用程序不可能被编码来利用 Swift API,但您可以轻松挂载一个 Cinder 磁盘,它表现得就像是直接将存储附加到大多数应用程序。

当然,您还可以对新应用程序使用 Cinder,但是不会从 Swift 自动附带的弹性和冗余中获益。如果编程人员面对这样的挑战,那么 Swift 的分布式可扩展架构是一个值得考虑的特性。

Swift 是两种产品中较为成熟的一个:自 OpenStack 成立以来一直是一个核心项目。Swift 的功能类似于一个分布式、可访问 API 的存储平台,可直接将它集成到应用程序中,或者用于存储 VM 镜像、备份和归档以及较小的文件,例如照片和电子邮件消息。

Object Store 有两个主要的概念:对象和容器。

对象就是主要存储实体。对象中包括与 OpenStack Object Storage 系统中存储的文件相关的内容和所有可选元数据。数据保存为未压缩、未加密的格式,包含对象名称、对象的容器以及键值对形式的所有元数据。对象分布在整个数据中心的多个磁盘中,Swift 可以借此确保数据的复制和完整性。分布式操作可以利用低成本的商用硬件,同时增强可扩展性、冗余性和持久性。

容器类似于 Windows® 文件夹,容器是用于存储一组文件的一个存储室。容器无法被嵌套,但一个租户可以供创建无限数量的容器。对象必须存储在容器中,所以您必须至少拥有一个容器来使用对象存储。

与传统的文件服务器不同,Swift 是横跨多个系统进行分布的。它会自动存储每个对象的冗余副本,从而最大程度地提高可用性和可扩展性。对象版本控制提供了防止数据意外丢失或覆盖的额外保护。

回页首

Swift 架构

Swift 架构包含三个组件:服务器、流程和环。

服务器

Swift 架构是分布式的,可防止所有单点故障和进行水平扩展。它包括以下四种服务器:

  • 代理服务器
  • 对象服务器
  • 容器服务器
  • 帐户服务器

代理服务器为 OpenStack Object Storage 架构的其余部分提供一个统一的界面。它接收创建容器、上传文件或修改元数据的请求,还可以提供容器清单或展示存储的文件。当收到请求时,代理服务器会确定帐户、容器或对象在环中的位置,并将请求转发至相关的服务器。

对象服务器是一种简单的服务器,可以上传、修改和检索存储在它所管理的设备上的对象(通常为文件)。对象被存储在本地文件系统中,使用了扩展的属性保存所有的元数据。路径基于对象名称的散列和时间戳。

容器服务器实质上是对象的一个目录。它处理特定容器的对象的分配,并根据请求来提供容器清单。可以跨集群复制该清单,以提供冗余。

试一试!

帐户服务器通过使用对象存储服务来管理帐户。它的操作类似于在内部提供了清单的容器服务器,在这种情况下,将会枚举分配到给定帐户的容器。

流程

有几种预定的内部管理流程可以管理数据存储,包括复制服务、审计程序(auditor)和更新程序(updater)。

复制服务是至关重要的流程:确保整个集群的一致性和可用性。由于对象存储的一个主要吸引点是其分布式存储,所以 OpenStack 必须在瞬态错误条件下确保获得一致的状态,例如断电或组件故障。复制服务通过定期对比本地数据与远程副本并确保所有副本都包含最新版本来做到这一点。

为了最大程度地减少进行对比所需的网络流量的数量,该服务创建了每个分区分段的一个散列(hash),并比较这些列表。容器和帐户复制也可以使用散列,但通过高水位标记(high-water mark)对这些散列进行了补充。实际的更新被推送,通常使用 rsync 来复制对象、容器和帐户。

在删除对象、容器或帐户时,复制器(replicator)还会执行垃圾收集来实施一致的数据删除。在删除时,系统会使用一个墓碑图片来标记最新版本,这是一个告诉复制器可以从所有重复的节点中删除对象、容器或帐户的信号。

即使是最好的复制设计,也只在拥有实现该复制的组件时有效,不过,无论是硬件故障还是软件故障,抑或只是因为产品能力不足,生产环境都必须能够重现这些故障。在 Swift 中,该操作是由更新程序和审计程序来完成的。

更新程序负责在系统面临故障时确保系统的完整性。当复制服务遇到一个问题,并且无法更新容器或帐户时,就会出现一段时间的不一致,在此其间,对象虽然存在于存储中,但并未列出在所有容器或帐户服务器上。在这种情况下,系统会在本地文件系统上对更新进行排队,并有一个更新程序会定期重试更新。

审计程序对这种不一致提供额外级别的保护。它们定期扫描本地存储库,验证帐户、容器和对象的完整性。在确认任何损坏时,审计程序会隔离该元素,并使用来自另一个复制物的副本替换它。如果发现了无法协调的不一致性(例如,对象不属于任何容器),审计程序就会将该错误记录在一个日志文件中。

用户和其他 OpenStack 项目会根据逻辑名称来引用存储实体,但最终,所有请求,无论是用于读取还是用于写入,都必须映射到某个物理位置。为了完成这一操作,代理服务器和后台流程(包括复制服务)都必须能够将逻辑名称映射到物理位置。这种映射就称为一个环(ring)。帐户、容器和对象都配有单独的环。环根据设备、分区、副本和专区来描述这一映射。

在此上下文中,术语分区 指的是环中所存储内容的逻辑子集。建议为每个参与设备分配 100 个分区。分区均匀地分布在分配给 OpenStack Object Storage 的所有设备上。如果集群使用了不同规格的驱动,那么有可能会分配权重,以便平衡各个设备上的分区的分布。

默认情况下,每个分区可被复制三次。有可能会使用一个较大的数字来优化可用性,但这显然会增加存储消耗。环还会指定在故障场景中使用哪些设备来接管工作负载,以及在向集群添加设备或从中删除设备时如何重新分配分区。

环映射的最后一个元素是专区,用于启用数据亲和性和反亲和性,一个专区可以表示一个存储设备、一个物理服务器或者一个位置,例如机架、通道或数据中心,专区是用户可用来满足其需求的一个逻辑概念,但通常反映的是物理元素,例如位置、电源和网络连接。

回页首

Cinder 架构

Cinder 比 Swift 简单得多,因为它不提供自动对象分布和复制。图 1 显示了 Cinder 架构。

图 1. Cinder architecture
该图显示了 Cinder 架构

与其他 OpenStack 项目类似,Cinder 的功能通过 API 暴露给仪表板和命令行。它能够通过具有具象状态传输 (Representational State Transfer, REST) 的 HTTP API 来访问对象存储,并使用一个名为 Auth Manager 的 Python 类将身份验证纳入 OpenStack Keystone。

API 解析所有传入的请求并将它们转发给消息队列,调度程序和卷服务器在该队列中执行实际的工作。在创建新的卷时,调度程序将会决定哪台主机应对该卷负责。默认情况下,它会选择拥有最多可用空间的节点。

卷管理程序管理着可动态附加的块存储设备,这些设备也被称为卷。它们可用作虚拟实例的启动设备,或作为辅助存储进行添加。Cinder 还为快照(卷的只读副本)提供了一种设备。然后可以使用这些快照来创建新的卷,以供读写使用。

卷通常通过 iSCSI 附加到计算节点。块存储也需要某种形式的后端存储,在默认情况下,该后端存储是本地卷组上的逻辑卷管理,但可以通过驱动程序将它扩展到外部存储阵列或设备。

回页首

设置

实际的安装指令在发行版和 OpenStack 版本之间极为不同。通常,它们可作为发行版的一部分。但是,必须完成相同的基本任务。本节将会介绍其中涉及的概念。

系统要求

OpenStack 依赖于一种 64 位 x86 架构;另外,它是为商用硬件而设计的,所以具有极低的系统要求。它可以在配有包含 8GB RAM 的单个系统上运行整套 OpenStack 项目。但是,对于大型的工作负载,它对于使用专用系统来实现存储至关重要。因为我们的重点在商用设备上,所以不需要独立磁盘冗余阵列 (redundant array of independent disks, RAID) 功能,但使用至少两个四核 CPU、8-12GB 的 RAM 和 1GB 的网络适配器是一种明智之举。显然,硬盘或固态磁盘的大小取决于要存储的数据量和希望的冗余级别。

安装

安装指令取决于发行版,更具体地讲,取决于您所选择的包管理实用程序。在许多情况下,必须声明存储库。所以,举例而言,如果您使用的是 Zypper,那么您要用 zypper ar 向 libzypp 公开:

点击查看代码清单

然后,安装所需的 Swift 和/或 Cinder 包。包管理实用程序应自动安装所有依赖关系。整个安装程序取决于您所期望的配置和 OpenStack 的准确版本。请务必查看安装指南中的权威说明,为了演示之目的,下面提供了适用于 Debian(例如 Ubuntu)、Red Hat(例如,Red Hat Enterprise Linux®、CentOS、Fedora)和 openSUSE 的一些主要命令。

  • Debian:在所有主机上安装基础 Swift 包:
    sudo apt-get install python-swift
    sudo apt-get install swift
    and the server-specific packages on the hosts that will be running them:
    sudo apt-get install swift-auth
    sudo apt-get install swift-proxy
    sudo apt-get install swift-account
    sudo apt-get install swift-container
    sudo apt-get install swift-object

    Cinder 包包含 API、调度程序和卷管理程序:

    sudo apt-get install cinder-api
    sudo apt-get install cinder-scheduler
    sudo apt-get install cinder-volume
  • Red Hat:在 Red Hat 系统上,使用的命令是:
    sudo yum install openstack-swift
    sudo yum install openstack-swift-proxy
    sudo yum install openstack-swift-account
    sudo yum install openstack-swift-container
    sudo yum install openstack-swift-object
    sudo yum install openstack-swift-doc
    sudo yum install openstack-cinder
    sudo yum install openstack-cinder-doc
  • openSUSE:使用以下命令:
    sudo zypper install  openstack-swift
    sudo zypper install  openstack-swift-auth 
    sudo zypper install  openstack-swift-account 
    sudo zypper install  openstack-swift-container 
    sudo zypper install  openstack-swift-object 
    sudo zypper install  openstack-swift-proxy
    sudo zypper install openstack-cinder-api
    sudo zypper install openstack-cinder-scheduler
    sudo zypper install openstack-cinder-volume

配置

配置 OpenStack Object Storage 安装涉及到为四个包的每一个包量身定制配置文件:

  • account-server.conf
  • container-server.conf
  • object-server.conf
  • proxy-server.conf

配置文件安装在 /etc/swift/ 中。默认的一组选项在标准安装中运作良好,但在有特殊需求时,有必要编辑该配置。

回页首

使用场景

如欲了解如何使用 OpenStack 存储,可以想象这样一个场景:在该场景中,有一项服务使用一个文件系统和新代码运行了遗留软件,您想在该文件系统和新代码中使用分布式对象存储。适用于此项目的环境应该包括 Swift 和 Cinder。

首先来看一看 Cinder。

  1. 以具有 Member 角色的用户身份登录到 OpenStack Dashboard。在导航面板中的 Manage Computer 下,单击 Volumes > Create Volume
    图 2. 创建一个卷
    该图显示了如何创建一个卷
  2. 卷应出现在项目的列表中。
    图 3. 项目中的卷
    该图显示了项目的卷

    点击查看大图

  3. 编辑附件,以便将卷连接到其中一个计算实例。
    图 4. 管理卷附件
    该图显示了如何编辑附件

OpenStack 创建一个惟一的 iSCSI 合格名称,并将其显示给目前具有活动 iSCSI 会话的计算节点。如果实例是逻辑存储(通常是一个 /dev/sdX 磁盘),那么可以使用 Cinder 卷。

要想对您的项目使用 Swift,首先必须创建一个容器。

  1. 作为具有 Member 角色的用户身份登录到 OpenStack Dashboard,在导航面板的 Object Store 下,单击 Containers > Create Container
    图 5. 创建容器
    该图显示了如何创建一个容器

    这是一个简单的操作,根本不会涉及提供任何数据。它只是一个名称而已。

  2. 当拥有容器之后,通常由应用程序使用对象填充它,并根据需要使用一个编程接口来检索这些对象。
    图 6. 已填充的容器
    该图显示了已填充的容器

    点击查看大图

  3. 不过,您还可以从仪表板上传对象。在 Object Store 下,单击 Containers > Upload Object 并提供一个包含存储内容的文件。
    图 7. 上传对象
    该图显示了如何上传对象

您还可以使用界面来下载、复制或删除对象。

回页首

结束语

如您所见,OpenStack 提供了一个直观的界面来设置私有云存储,并使其可用于工作负载。这些只是所有可能情况的冰山一角。例如,许多客户使用 Ceph 或 GlusterFS 作为后端存储机制,但即使在这些情况下,最终用户也只需与用户界面进行交互。如您在本系列的前几篇文章中已经了解到的,OpenStack 仅仅是集成一组可插拔组件的抽象层。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openstack Storage 组件 Swift 和 Cinder 的相关文章

  • 医院管理信息系统 HIS EMR PACS LIS

    主要功能模块 系统设置 数据字典 业务数据 权限管理医疗卡 门诊挂号 大屏叫号 分诊 急诊管理 门诊医院站 门诊护士站 门诊收费 药库 药房 住院管理 住院结算 住院医生 住院护士 医技执行 手术室管理 会诊 临床路径 电子病历 院长查询
  • 自协商功能原理及工作过程

    自协商原理 自协商是通过一种叫做快速连接脉冲 Fast Link Pulse 的信号实现的 简称FLP 自协商的双方通过FLP来交换数据 在具备自协商能力的端口没有Link的情况下 端口一直发送FLP 在FLP中包含着自己的连接能力信息 包
  • 已有一个Excel表格,用VBA批量新建文件夹

    已有一组Excel表格数据 使用VBA快速批量建文件夹 不知道标题怎么写 已经有了这样一组数据 然后需要根据这两组数据新建文件夹 代码如下 Sub 建文件夹 Dim i As Integer 用于下方数组 Dim Arr1 Arr2 定义一
  • 浅析集合不安全例子

    package com bochy list import java util ArrayList import java util List public class ArrayListConcurrentProblem public s
  • 弹性盒子(Flex)相关属性全解析

    目录 基本介绍 添加在父元素上的属性 添加在flex容器上的 一 设置为弹性布局 display flex 二 修改主轴的属性 flex direction 三 设置子元素是否折换 flex wrap 四 设置主轴的对齐方式 justify
  • C语言中函数的调用和函数返回值(17)

    C语言中函数的调用和函数返回值 一 函数的调用形式 按照函数调用出现的形式 可以分为三种调用方式 1 函数调用语句 例如 printf star 2 函数表达式 c 2 max a b 3 函数参数 printf d max a b m m
  • 这可能是全网最详细的python安装教程(windows)

    python安装是学习pyhon第一步 很多刚入门小白不清楚如何安装python 今天我来带大家完成python安装与配置 跟着我一步步来 很简单 你肯定能完成 第一部分 python安装 一 准备工作 1 下载和安装python 认准官方
  • TiggerRamDisk的超详细使用教程(亲测成功)

    目录 一 软件介绍 一 型号对应 二 可以支持的功能 二 操作步骤
  • SAP PO上传异步接口(PO发布Webservice)

    导语 接口是SAP与其他系统进行数据交互的一种方式 在这篇文章中主要讲述通过PO实现的上传接口 即SAP被动接收其他系统发送的数据 注意 对于配置中涉及的基本组件的介绍和创建在前面的博客有说明和介绍 再次不做过多赘述了 一 ESB Ente
  • 去除a标签默认样式_超链接样式的使用CSS入门基础(014)

    今天我们分享关于超链接样式的内容 在浏览器中 超链接的样式有默认样式 点击后样式 鼠标悬停样式和激活样式四种状态 超链接默认情况下是带有下划线的 看起来很丑 用户体验不好 前面我们说到了text decoration none可以去除下划线
  • Unity-后期处理效果之Bloom

    Unity 后期处理效果之Bloom 什么是Bloom Bloom属性 什么是Bloom Bloom是一种游戏常见的一种屏幕效果叫做高光溢出 是一种光学效果 其中来自明亮来源 如闪光 的光表现为泄露到周围对象中 通俗来说就是这种特效可以模拟
  • Visual Studio Code 插件

    Visual Studio Code 插件安装 插件安装 Script插件 Vue插件 插件安装 首页点击 工具和语言 如下图 接下来 在输入框中输入想要安装的插件的名字 点击 install 即可进行安装 Script插件 1 Eslin
  • C++中cout和cerr的区别?

    之前一直在用 但就是没在意两者到底有啥却别 今天又想到这个问题 总结下吧 以下的内容均是本人从网上查阅资料看来整理的 暂时还没有查阅官方资料 不保证准确 欢迎讨论 其实大家平常常会用的主要有三个 cout cerr clog 首先简单介绍下
  • http协议的状态码:404等常见网页错误代码

    http协议的状态码 一 1xx 临时响应 表示临时响应并需要请求者继续执行操作的状态码 100 继续 请求者应当继续提出请求 服务器返回此代码表示已收到请求的第一部分 正在等待其余部分 101 切换协议 请求者已要求服务器切换协议 服务器
  • 滴滴夜莺:从监控告警系统向运维平台演化

    简述 滴滴夜莺 Nightingale 是一款经过大规模生产环境验证的 分布式高性能的运维监控系统 基于Open Falcon 结合滴滴内部的最佳实践 在性能 可维护性 易用性方面做了大量的改进 支撑了滴滴内部数十亿监控指标 覆盖了从系统
  • 惊呆了!女儿拿着小天才电话手表,问我Android启动流程!

    首先 new一个女儿 var mDdaughter new 女儿 6岁 漂亮可爱 健康乖巧 最喜欢玩小天才电话手表和她的爸爸 好了 女儿有了 有一天 女儿问我 爸爸爸爸 你说我玩的这个小天才电话手表怎么这么厉害 随便点一下这个小图片 这个应
  • Manifest合并失败几种原因以及解决方法

    今天遇到了一个报错 Error Execution failed for task app processDebugManifest gt Manifest merger failed with multiple errors see lo
  • c语言合并两个单链表LA和LB,把两个递增的单链表La,Lb,合并成一个递减的单链表Lc...

    原文题是严蔚敏同志的数据结构习题中第二章线性表中提出的问题 原问如下 2 24 假设有两个按元素值递增有序排列的线性表A和B 均以单链表作存储结构 请编写算法将A表与B表归并成一个按元素值递减有序 即非递增有序 允许表中含有值相同的元表 排
  • 基于Vue + vuex + Antd-design-vue实现天气App

    simple weather github 地址 github com WqhForGitHu 效果图 PC端 移动设备端 技术框架 该应用是基于 Vue vuex 实现的 页面的 UI 则是使用了 Antd design vue 库来完成
  • Android 版本统一管理

    前言 因为现在项目都比较模块化 组件化 要用到的model比较多 一个model就有一个build gradle文件 里面都有compileSdkVersion或buildToolsVersion等可能出现版本不一致导致编译出现错误 所以要

随机推荐

  • thinkphp5学习路程 三 数据库操作

    首先我用的是php中文网提供的php工具箱 phpmyadmin管理mysql 在此之前最好对sql语句有所了解 会简单的增删改查等 在里面创建数据库和一张表如下 随后你需要打开数据库的配置文件 目录为 application databa
  • Python OpenCV中的图像阈值处理

    1 前言 上一篇介绍了用C 如何对一幅图像进行阈值处理 本篇接着用python来做同样的事情 图像阈值处理是很多高级算法的底层逻辑之一 比如在做图形检测 轮廓识别时 常常会先对图像进行阈值处理 然后再进行具体的检测或识别 因此很有必要掌握图
  • 指针作函数返回值

    include
  • 指向数组的引用 const char(&p)[a]

    指向数组的引用 const char p a 问题起源 如何在函数内 也能获取数组的大小信息 如果是定义一个数组a后 使用如下方法即可获取大小信息 cout lt lt sizeof a sizeof a 0 但是如果作为一个参数传入到一个
  • 最新酒桌小游戏喝酒小程序源码_带流量主源码下载

    2022最新酒桌小游戏喝酒小程序源码 带流量主 喝酒神器3 6 我修改增加了广告位 根据文档直接替换即可 原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码 然后关闭广告展示提交 通过后打开即可 下载地址 最新酒桌小游戏喝酒小程
  • 在linux系统下安装配置apache服务器

    我所用的是centos linux系统 但apache的服务在linux系统都大同小异 像ubuntu redhat等等 now let us go 如有问题 欢迎直邮 zhe jiang he hp com lt 何哲江 gt 1 获取软
  • Edge浏览器没有让我失望! 今天终于可以在win10中模拟IE内核进行前端测试了!

    前言 ietest现在是不是不好用了 Edge浏览器仿真是不是不见了 如图 如果我们在前端开发javascript遇见一些老旧的语法标准 想要测试一下都难 想想都抓狂 不过不用担心 经过这几天的资料查阅 我还是找到了一个解决办法来模拟旧版I
  • Set集合中的SortedSet接口下的实现类TreeSet

    放入TreeSet集合中的元素必须实现Comparable接口 不然会报错 因为这个集合中的元素会自动按元素的大小顺序排序 所以不是实现比较的接口就会出现ClassCastException 还要注意一点的是Set集合中的元素是不可重读的
  • ctfshow web入门刷题3

    web15 看提示找到邮箱 然后尝试登入后台 url admin 尝试点击忘记密码然后提示输入城市 尝试用qq搜索qq号 发现城市为西安 得到后台密码 登入得到flag WEB16 题目提示php探针 所以url tz php打开探针然后搜
  • 当你穿越到道诡异仙的世界,如何利用密码学知识区分幻想和现实?

    题解 牛群的能量 题目考察的知识点动态规划题目解答方法的文字分析用 f i 代表以第 i个数结尾的 和最大子群能量值之和 设数组的长度为n 则本题的答案时从0到n 1这n个f 题解 牛牛的名字游戏 题目考察的知识点字符串题目解答方法的文字分
  • TensorFlow在MNIST中的应用-循环神经网络RNN

    参考 1 TensorFlow技术解析与实战 2 https www cnblogs com hellcat p 7401706 html 3 http www jianshu com p 3dbeb3ab9aa3 用TensorFlow搭
  • 如何设计一个麻雀般的微型分布式架构?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由mariolu 发表于云 社区专栏 序言 初衷 设计该系统初衷是基于描绘业务 或机器集群 存储模型 分析代理缓存服务器磁盘存储与回源率的关系 系统意义是在腾讯云成本优化过程中
  • 什么是遗传算法?

    00 目录 遗传算法定义 生物学术语 问题导入 大体实现 具体细节 问题汇总 01 什么是遗传算法 1 1 遗传算法的科学定义 遗传算法 Genetic Algorithm GA 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的
  • 1186: 零起点学算法93——改革春风吹满地

    Description 改革春风吹满地 不会AC没关系 实在不行回老家 还有一亩三分地 谢谢 乐队奏乐 话说部分学生心态极好 每天就知道游戏 这次考试如此简单的题目 也是云里雾里 而且 还竟然来这么几句打油诗 好呀 老师的责任就是帮你解决问
  • Python进行模糊匹配

    Mr Chen昨天提出了一个问题一起探讨 问题如下 Python库里有fuzzywuzzy和difflib 两个库均可实现词粒度的模糊匹配 同时可设定模糊阈值 实现关键词的提取 地址匹配 语法检查等 针对fuzzywuzzy的process
  • Flink学习27:驱逐器

    import org apache flink api common eventtime SerializableTimestampAssigner WatermarkStrategy import org apache flink api
  • API接口的设计思路

    API接口设计是软件开发中非常重要的一环 良好的设计规范能够提高开发效率 减少问题和错误 并增强系统的可维护性和可扩展性 本文从程序员的视角 讨论一些常见的API接口设计规范 一 遵循RESTful原则 REST Representatio
  • Notepad++作死,国产文本编辑器Notepad--发布

    作死的Notepad Notepad 和 Notepad 都是基于 Windows 的文本编辑器 通常用于编写和编辑纯文本文件 这两个应用程序都是简单的轻量级程序 提供基本的文本编辑功能 Notepad 是一口君经常使用的一款文本编辑软件
  • 最佳实践:基于vite3的monorepo前端工程搭建

    一 技术栈选择 1 代码库管理方式 Monorepo 将多个项目存放在同一个代码库中 选择理由1 多个应用 可以按业务线产品粒度划分 在同一个repo管理 便于统一管理代码规范 共享工作流 选择理由2 解决跨项目 应用之间物理层面的代码复用
  • openstack Storage 组件 Swift 和 Cinder

    Storage 组件 Swift 和 Cinder 本文将介绍 OpenStack Block Swift 和 Object Glance 存储 解释它如何融入到整体架构中 并展示它的操作方式 本文还将在介绍这些工具的过程中了解了如何安装