K8s 分布式存储后端(K8s Distributed Storage Backend)
K8s 分布式存储后端
在 K8s 中实现分布式存储后端对于管理跨集群的持久数据、确保高可用性、可扩展性和可靠性至关重要。在 K8s 环境中,应用程序通常被容器化并跨多个节点部署。虽然 K8s 可以有效处理无状态应用程序,但有状态应用程序需要持久存储来维护数据完整性和可用性。分布式存储后端通过在集群中提供可扩展、有弹性且可访问的存储来提供解决方案,从而允许应用程序可靠地访问和存储数据。本章介绍在 K8s 中设置分布式存储后端的基本概念、优点和实际步骤。
为什么分布式存储很重要
在 Kubernetes 环境中,分布式存储后端在管理有状态应用程序的数据方面发挥着至关重要的作用。无状态应用程序可以轻松扩展和管理,因为它们不维护请求之间的任何内部状态。然而,有状态的应用程序,例如数据库、内容管理系统和大数据处理应用程序,需要持久存储才能正常运行。分布式存储系统通过提供可靠且可扩展的方式来跨多个节点存储数据来满足这一需求,确保应用程序即使在遇到节点故障或扩展事件时也能保持状态。
分布式存储的好处
分布式存储提供了对现代云原生应用程序至关重要的几个关键优势:
-
可扩展性:分布式存储系统可以通过添加更多节点来水平扩展,从而允许存储容量和性能随着应用程序的需求而增长。
-
高可用性:数据在多个节点之间复制,确保即使某些节点出现故障,数据仍然可用。
-
数据一致性:分布式存储确保整个集群内数据的一致性,保持完整性和可靠性。
-
灵活性:支持各种存储类型和访问模式,支持不同的工作负载和用例。
何时使用分布式存储
分布式存储应该用在数据持久性、高可用性和可扩展性至关重要的 Kubernetes 环境中。它特别有利于:
-
有状态应用程序:需要持久数据存储的应用程序(例如数据库和内容管理系统)受益于分布式存储的可靠性和可扩展性。
-
大数据工作负载:需要可扩展且可靠存储的大规模数据处理应用程序可以利用分布式存储来有效处理大量数据。
-
灾难恢复:数据冗余和故障转移功能对于业务连续性至关重要的场景可以依靠分布式存储来确保即使在发生故障时数据也保持可用和一致。
为什么分布式存储很重要
在 Kubernetes 环境中,应用程序通常被容器化并跨多个节点部署。虽然 Kubernetes 可以有效管理无状态应用程序,但有状态应用程序需要持久存储来维护数据完整性和可用性。分布式存储后端通过在集群中提供可扩展、有弹性且可访问的存储来提供解决方案,从而允许应用程序可靠地访问和存储数据。
分布式存储的好处
-
可扩展性:分布式存储系统可以通过添加更多节点来水平扩展,从而允许存储容量和性能随着应用程序的需求而增长。
-
高可用性:数据在多个节点之间复制,确保即使某些节点出现故障,数据仍然可用。
-
数据一致性:分布式存储确保整个集群内数据的一致性,保持完整性和可靠性。
-
灵活性:支持各种存储类型和访问模式,支持不同的工作负载和用例。
流行的 Kubernetes 分布式存储解决方案
多种分布式存储解决方案与 Kubernetes 无缝集成,提供强大的存储功能。一些最受欢迎的选项包括:
1. Ceph
Ceph 是一个高度可扩展的分布式存储系统,可在单一平台中提供对象、块和文件存储。它通过 Rook 操作符与 Kubernetes 很好地集成。
主要特点Ceph 提供了支持对象、块和文件存储的统一存储系统。它具有高度可扩展性和弹性,能够处理 PB 级的数据。 Ceph 具有自我修复和自我管理功能,使其成为满足复杂存储需求的可靠选择。
用例:设置高可用数据库在此用例中,我们将使用 Ceph 作为后端存储来设置一个高可用的 PostgreSQL 数据库。目标是确保数据库能够处理节点故障而不丢失数据。
操作步骤:
安装 Rook Operator
首先,为 Rook 创建命名空间并部署 Rook Operator。将以下配置保存到名为rook-operator.yaml的文件中:
apiVersion: v1
kind: Namespace
metadata:name: rook-ceph
---
apiVersion: apps/v1
kind: Deployment
metadata:name: rook-ceph-operatornamespace: rook-ceph
spec:replicas: 1template:metadata:labels:app: rook-ceph-operatorspec:containers:- name: rook-ceph-operatorimage: rook/ceph:v1.5.9
应用配置:
kubectl apply -f rook-operator.yaml
部署Ceph集群
通过将以下配置保存到名为rook-cluster.yaml的文件来创建 Ceph 集群:
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:name: rook-cephnamespace: rook-ceph
spec:cephVersion:image: ceph/ceph:v15.2.4dataDirHostPath: /var/lib/rookmon:count: 3dashboard:enabled: truenetwork:hostNetwork: falsestorage:useAllNodes: trueuseAllDevices: true
应用配置:
kubectl apply -f rook-cluster.yaml
创建存储类
定义一个 StorageClass 以使用 Ceph 的 RBD 进行动态配置。将以下配置保存到名为rook-storageclass.yaml的文件中:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:clusterID: rook-cephpool: replicapoolimageFormat: "2"imageFeatures: layering
reclaimPolicy: Retain
应用配置:
kubectl apply -f rook-cluster.yaml
部署 PostgreSQL
最后,使用新创建的 StorageClass 部署 PostgreSQL 数据库。将以下配置保存到名为postgres-deployment.yaml的文件中:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: postgres-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: rook-ceph-block
---
apiVersion: apps/v1
kind: Deployment
metadata:name: postgres
spec:replicas: 1selector:matchLabels:app: postgrestemplate:metadata:labels:app: postgresspec:containers:- name: postgresimage: postgres:12env:- name: POSTGRES_PASSWORDvalue: "yourpassword"volumeMounts:- mountPath: /var/lib/postgresql/dataname: postgres-storagevolumes:- name: postgres-storagepersistentVolumeClaim:claimName: postgres-pvc
应用配置:
kubectl apply -f postgres-deployment.yaml
2.GlusterFS
GlusterFS 是一个可扩展的网络文件系统,与 Kubernetes 集成以提供持久存储。它以其简单性和易于部署而闻名。
主要特点
GlusterFS 具有可扩展性和分布式性,提供高性能和简单的配置。它允许轻松添加存储节点并通过数据复制提供高可用性。
使用案例:为 Web 应用程序设置共享存储
在此用例中,我们将设置 GlusterFS 为需要跨多个副本访问相同文件的 Web 应用程序提供共享存储。
操作步骤:
安装 GlusterFS
首先,设置一个 GlusterFS 集群。在每个 GlusterFS 节点上,安装 GlusterFS 并创建 GlusterFS 卷。
sudo apt-get install glusterfs-server
sudo systemctl start glusterd
sudo gluster peer probe <other-node-ip>
sudo gluster volume create gv0 replica 2 <node1-ip>:/data/brick1/gv0 <node2-ip>:/data/brick2/gv0
sudo gluster volume start gv0
部署 GlusterFS DaemonSet
在 Kubernetes 中部署 DaemonSet 以在每个节点上挂载 GlusterFS 卷。将以下配置保存到名为glusterfs-daemonset.yaml的文件中:
apiVersion: v1
kind: PersistentVolume
metadata:name: glusterfs-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteManyglusterfs:endpoints: glusterfs-clusterpath: gv0readOnly: false
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: glusterfs-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Gi
应用配置:
kubectl apply -f glusterfs-pv-pvc.yaml
创建持久卷和持久卷声明
定义 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 以使用 GlusterFS 卷。将以下配置保存到名为glusterfs-pv-pvc.yaml的文件中:
apiVersion: apps/v1
kind: Deployment
metadata:name: webapp
spec:replicas: 3selector:matchLabels:app: webapptemplate:metadata:labels:app: webappspec:containers:- name: webappimage: nginxvolumeMounts:- mountPath: /usr/share/nginx/htmlname: webapp-storagevolumes:- name: webapp-storagepersistentVolumeClaim:claimName: glusterfs-pvc
应用配置:
kubectl apply -f webapp-deployment.yaml
部署 Web 应用程序
部署使用 GlusterFS PVC 进行共享存储的 Web 应用程序。将以下配置保存到名为webapp-deployment.yaml的文件中:
apiVersion: apps/v1
kind: Deployment
metadata:name: webapp
spec:replicas: 3selector:matchLabels:app: webapptemplate:metadata:labels:app: webappspec:containers:- name: webappimage: nginxvolumeMounts:- mountPath: /usr/share/nginx/htmlname: webapp-storagevolumes:- name: webapp-storagepersistentVolumeClaim:claimName: glusterfs-pvc
应用配置:
kubectl apply -f webapp-deployment.yaml
3. OpenEBS
OpenEBS 是 Kubernetes 原生存储解决方案,提供容器附加存储。它提供对存储的精细控制,是 DevOps 工作流程的理想选择。
主要特点
OpenEBS 是 Kubernetes 原生的,提供对存储的精细控制。它支持多种存储引擎,使其灵活且适用于广泛的用例。
使用案例:设置具有持久存储的 CI/CD 管道
在此用例中,我们将设置 OpenEBS 为 Jenkins CI/CD 管道提供持久存储。这可确保跨管道运行保留构建工件和日志。
操作步骤:
安装OpenEBS
使用 Helm 安装 OpenEBS。首先,添加 OpenEBS Helm 存储库并安装 OpenEBS 图表。
helm repo add openebs https://openebs.github.io/charts
helm install openebs --namespace openebs openebs/openebs
创建存储类为 OpenEBS 定义存储类。将以下配置保存到名为openebs-storageclass.yaml的文件中:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: openebs-sc
provisioner: openebs.io/provisioner-iscsi
parameters:openebs.io/storage-pool: "default"
应用配置:
kubectl apply -f openebs-storageclass.yaml
部署Jenkins
使用 OpenEBS StorageClass 部署 Jenkins 进行持久存储。将以下配置保存到名为jenkins-deployment.yaml的文件中:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: jenkins-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 20GistorageClassName: openebs-sc
---
apiVersion: apps/v1
kind: Deployment
metadata:name: jenkins
spec:replicas: 1selector:matchLabels:app: jenkinstemplate:metadata:labels:app: jenkinsspec:containers:- name: jenkinsimage: jenkins/jenkins:ltsenv:- name: JAVA_OPTSvalue: "-Djenkins.install.runSetupWizard=false"volumeMounts:- mountPath: /var/jenkins_homename: jenkins-storagevolumes:- name: jenkins-storagepersistentVolumeClaim:claimName: jenkins-pvc
应用配置:
kubectl apply -f jenkins-deployment.yaml
实施分布式存储的最佳实践
在 Kubernetes 中实现分布式存储涉及多种最佳实践,以确保最佳性能、可扩展性和可靠性。这些实践包括选择正确的存储解决方案、优化存储配置以及持续监控和维护存储系统。
选择正确的存储解决方案
选择合适的存储后端对于满足应用程序的性能、可扩展性和可靠性要求至关重要。不同的存储解决方案提供独特的功能和优势,使其适合各种用例。
例如,Ceph 非常适合需要能够处理具有高可扩展性和弹性的对象、块和文件存储的统一存储系统的环境。 GlusterFS 适用于需要简单、高性能网络文件系统的应用程序。 OpenEBS 非常适合需要对存储进行精细控制的 Kubernetes 原生环境。
优化存储配置
微调存储设置对于优化性能至关重要。这包括调整复制因子、启用缓存机制以及配置网络设置以减少延迟并提高吞吐量。
对于Ceph,您可以调整复制因子以在性能和数据冗余之间取得平衡。增加副本数量可以增强数据可用性,但可能会影响写入性能。
调整Ceph复制因子的示例:
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:name: rook-cephnamespace: rook-ceph
spec:cephVersion:image: ceph/ceph:v15.2.4dataDirHostPath: /var/lib/rookmon:count: 3dashboard:enabled: truenetwork:hostNetwork: falsestorage:useAllNodes: trueuseAllDevices: truereplication:size: 3 # Adjust the replication factor here
对于 GlusterFS,调整卷配置有助于优化性能。例如,设置适当的块大小并启用性能选项可以提高特定工作负载的吞吐量。
调整 GlusterFS 卷配置的示例:
sudo gluster volume set gv0 performance.cache-size 256MB
sudo gluster volume set gv0 performance.write-behind on
sudo gluster volume set gv0 performance.quick-read on
监控和维护
持续监控和维护存储系统对于确保其健康和性能至关重要。使用 Prometheus 等监控工具来跟踪关键指标并及早发现问题。
对于 Ceph,您可以设置 Prometheus 来监控存储运行状况。创建一个 ServiceMonitor 以从 Ceph 管理器中抓取指标。
使用Prometheus监控Ceph的示例:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: rook-ceph-mgrnamespace: rook-ceph
spec:selector:matchLabels:app: rook-ceph-mgrendpoints:- port: http-metricsinterval: 15spath: /metrics
应用配置:
kubectl apply -f servicemonitor.yaml
对于 GlusterFS,您可以使用 Gluster Prometheus Exporter 来监控 GlusterFS 卷的运行状况。将导出器部署为 DaemonSet 以确保每个节点都受到监控。
部署 Gluster Prometheus Exporter 的示例:
apiVersion: apps/v1
kind: DaemonSet
metadata:name: glusterfs-exporternamespace: monitoring
spec:selector:matchLabels:app: glusterfs-exportertemplate:metadata:labels:app: glusterfs-exporterspec:containers:- name: glusterfs-exporterimage: prom/glusterfs-exporterports:- containerPort: 9189name: metrics
应用配置:
kubectl apply -f glusterfs-exporter.yaml
对于 OpenEBS,使用 Prometheus Operator 监控卷和存储引擎的运行状况。为 OpenEBS 设置 ServiceMonitor。
使用Prometheus监控OpenEBS的示例:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: openebs-monitornamespace: monitoring
spec:selector:matchLabels:app: openebsendpoints:- port: http-metricsinterval: 15spath: /metrics
应用配置:
kubectl apply -f openebs-monitor.yaml
相关文章:

K8s 分布式存储后端(K8s Distributed Storage Backend)
K8s 分布式存储后端 在 K8s 中实现分布式存储后端对于管理跨集群的持久数据、确保高可用性、可扩展性和可靠性至关重要。在 K8s 环境中,应用程序通常被容器化并跨多个节点部署。虽然 K8s 可以有效处理无状态应用程序,但有状态应用程序需要持久存储来维护…...

基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper
KAFKA基于docker使用KRaft进行集群搭建 环境:已成功搭建kafka服务 可点击链接跳转至安装kafka-3.8.0版本 并启用SASL认证 教程 使用基于Zookeeper方式搭建集群教程 kafka-3.8.0版本 并启用SASL认证 教程 搭建kafka-ui可视化工具 192.168.2.91 192.168.2.92 192…...
Centos7 安装 RabbitMQ与Erlang
1、下载erlang和rabbitmq wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.5/erlang-23.3.4.5-1.el7.x86_64.rpmwget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.16/rabbitmq-server-3.9.16-1.el7.noarch.rpm2、安装erlang…...
mybatis-plus的分页查询简单使用
引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency>在yml中配置启动mybatis-plus插件 mybatis-plus:configuration:#…...
剑指 Offer II 014. 字符串中的变位词
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20014.%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E5%8F%98%E4%BD%8D%E8%AF%8D/README.md 剑指 Offer II 014. 字符串中的变位词 题目描述 给定两个字符…...

富唯智能复合机器人拓展工业新维度
富唯智能复合机器人是富唯智能倾力打造的一款集高度自动化、智能化和多功能性于一体的机器人。它融合了机械、电子、计算机、传感器等多个领域的前沿技术,通过精密的算法和控制系统,实现了对复杂生产环境的快速适应和高效作业。 富唯智能复合机器人的特点…...
【大数据技术】搭建完全分布式高可用大数据集群(Scala+Spark)
搭建完全分布式高可用大数据集群(Scala+Spark) scala-2.13.16.tgzspark-3.5.4-bin-without-hadoop.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Spark的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/softwa…...
solidity高阶 -- 调用接口合约
在区块链开发中,Solidity 是一种广泛使用的智能合约编程语言,而接口合约(Interface)是 Solidity 中一个非常重要的概念。它为智能合约之间的交互提供了一种标准化的方式,使得合约之间的调用更加灵活、安全且易于管理。…...

若依框架使用(低级)
克隆源码 浏览器搜索若依,选择 RuoYi-Vue RuoYi-Vue RuoYi-Vue 重要的事情说三遍,进入gitee 下面这个页面(注意红色框起来的部分) 进入Gitee进行下载 我下载的是最新的springboot3 下载好后我们可以选择一个文件夹࿰…...

找不到 MSVCP120.dll
msvcr120.dll msvcr120.dll 是 Microsoft Visual C Redistributable 的一部分,属于 Visual Studio 2013(VC 12.0)的运行时组件。它的重要性取决于你运行的应用程序是否需要它。 重要性 依赖库:如果某个程序是用 Visual Studio 2…...
AI软件栈:LLVM分析(三)
LLVM IR 文章目录 CFG线性IR 主要采用CFG与线性IR组合描述 CFG *关键在于基本块(Basic Block)的定义 线性IR *关键来自于SSA,单静态赋值...

openwebui入门
1 简介 Open WebUI(网址是openwebui.com)是一个高度可扩展、功能强大且用户友好的自托管Web用户界面,专为完全离线操作设计,编程语言是python。它支持对接Ollama和OpenAI兼容的API的大模型。 Open WebUI在架构上是一种中…...

Spark--如何理解RDD
1、概念 rdd是对数据集的逻辑表示,本身并不存储数据,只是封装了计算逻辑,并构建执行计划,通过保存血缘关系来记录rdd的执行过程和历史(当一个rdd需要重算时,系统会根据血缘关系追溯到最初的数据源ÿ…...

CTFSHOW-WEB入门-PHP特性89-100
题目:web 89 题目:解题思路:这道题目涉及了两个函数:preg_match()和intval()简要介绍一下两个函数 preg_match()用于对字符串进行正则表达式的匹配࿰…...
[250204] Mistral Small 3:小巧、快速、强大 | asdf 0.16.0 发布:Golang 重写带来性能飞跃
目录 Mistral AI 发布开源模型 Mistral Small 3:小巧、快速、强大asdf 0.16.0 版本发布:Golang 重写带来性能飞跃! Mistral AI 发布开源模型 Mistral Small 3:小巧、快速、强大 法国人工智能初创公司 Mistral AI 发布了最新的开源…...

PySpark学习笔记5-SparkSQL
sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java,Scala,python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…...

windows版的docker如何使用宿主机的GPU
windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …...

Python爬虫:1药城店铺爬虫(完整代码)
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…...
代码随想录算法训练营打卡第55天:并查集相关问题;
Java并查集的模板 //并查集模板 class DisJoint{private int[] father;public DisJoint(int N) {father new int[N];for (int i 0; i < N; i){father[i] i;}}public int find(int n) {return n father[n] ? n : (father[n] find(father[n]));}public void join (int …...

K8S学习笔记-------1.安装部署K8S集群环境
1.修改为root权限 #sudo su 2.修改主机名 #hostnamectl set-hostname k8s-master01 3.查看网络地址 sudo nano /etc/netplan/01-netcfg.yaml4.使网络配置修改生效 sudo netplan apply5.修改UUID(某些虚拟机系统,需要设置才能生成UUID)#…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...