【Cloud Native】数据库新纪元:驾驭关系型与NoSQL的力量

news2024/11/26 19:10:03

🐇明明跟你说过:个人主页

🏅个人专栏:《未来已来:云原生之旅》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、云原生概述

2、数据库在云原生时代的重要性 

二、云原生环境概览

1、云原生架构的核心原则 

2、云原生技术栈概览

三、数据库类型及其特性

1、关系型数据库(RDBMS)基础与特性

2、NoSQL数据库概述与分类

四、云原生数据库服务

1、云原生数据库的优势

2、数据库即服务(DBaaS)模型解析

五、在云原生环境中部署数据库

1、使用容器化技术部署MySQL数据库

2、在Kubernetes上部署MySQL数据库


一、引言

1、云原生概述

云原生(Cloud Native)是指一组专门为云环境设计和开发的系统架构和方法,包括应用程序的开发、部署和运行。云原生的核心是利用云计算的特性,如自动化、弹性、分布式系统等,以提高应用的灵活性、扩展性和可靠性。

核心理念
1. 微服务架构:

  • 将应用程序分解为一组小的、独立的服务,每个服务都可以独立开发、部署和扩展。这些服务通过轻量级协议(通常是HTTP/HTTPS)进行通信。


2. 容器化:

  • 使用容器技术(如Docker)来封装应用程序及其依赖,使其能够在不同的环境中一致地运行。容器提供了一种轻量级的虚拟化方式,具有快速启动和高密度的特点。


3. 动态编排:

  • 使用编排工具(如Kubernetes)来自动管理容器的部署、扩展和操作。这些工具能够自动处理容器的调度、负载均衡、故障恢复和资源管理。


4. DevOps和持续交付:

  • 强调开发和运维团队的协作,通过持续集成(CI)和持续交付(CD)实践,实现快速和可靠的应用发布。自动化测试和部署管道是关键要素。

2、数据库在云原生时代的重要性 

1. 支撑云原生应用的高可用性

  • 数据持久化与容错性:云原生数据库通过数据冗余、备份与恢复、故障自动切换等机制,确保在单点故障或网络分区等情况下,数据仍然可用,保障业务连续性。
  • 跨地域容灾:云原生数据库支持跨地域部署,通过多副本技术实现数据的跨地域同步,提高系统的容灾能力,降低因地域性灾难导致的数据丢失风险。


2. 提升云原生应用的性能

  • 分布式架构:云原生数据库采用分布式架构,通过水平扩展和负载均衡技术,提升数据处理能力和并发性能,满足高并发、大数据量的应用需求。
  • 弹性伸缩:云原生数据库能够根据业务负载自动调整资源分配,实现弹性伸缩,避免资源浪费和性能瓶颈。

二、云原生环境概览

1、云原生架构的核心原则 

1. 微服务架构
微服务架构是一种将应用程序拆分为一组小的、独立的服务的架构模式,每个服务都专注于单一的业务功能,可以独立开发、部署和扩展。

  • 独立部署:每个微服务都可以独立部署,不需要重新部署整个应用。
  • 单一职责:每个微服务只关注一种特定的业务功能,便于理解和维护。
  • 独立扩展:可以根据需求独立扩展每个微服务,提高资源利用率。
  • 技术多样性:不同的微服务可以使用不同的技术栈和编程语言,适应不同的业务需求。

  
2. 容器化
容器化是一种将应用程序及其所有依赖打包在一个轻量级、可移植的容器中的技术,使得应用可以在任何环境中一致地运行。

  • 环境一致性:容器化确保应用在开发、测试和生产环境中的运行一致性。
  • 资源隔离:容器提供进程级别的资源隔离,提高安全性和资源利用率。
  • 快速启动:容器的启动速度非常快,适合快速扩展和缩减。
  • 易于移植:容器化应用可以在任何支持容器的平台上运行,提高应用的可移植性。

  
3. 自动化部署
自动化部署是指使用自动化工具和脚本来管理应用程序的部署和配置,减少人为错误,提高部署效率和一致性。

  • 持续集成和持续交付(CI/CD):通过自动化的构建、测试和部署流程,实现快速和可靠的应用发布。
  • 基础设施即代码(IaC):使用代码来管理和配置基础设施资源,使得基础设施的管理更加灵活和可重复。
  • 自动化测试:在部署前自动运行测试,确保代码质量和功能正确性。

  
4. DevOps
DevOps是一种文化和实践,强调开发(Development)和运维(Operations)团队之间的协作,通过自动化工具和流程提高软件交付和基础设施变更的速度和可靠性。

  • 协作文化:促进开发和运维团队的紧密合作,减少沟通障碍。
  • 持续改进:通过持续反馈和迭代改进,提高系统性能和团队效率。
  • 监控和可观测性:提供全面的监控和日志记录,确保系统运行的透明性和可调试性。
  • 自动化工具:使用自动化工具和脚本,提高部署和运维的效率和一致性。

   

2、云原生技术栈概览

1. Kubernetes (K8s)

  • Kubernetes是云原生技术栈中的核心组件之一,是一款开源的容器编排工具,由Google开源并捐赠给Cloud Native Computing Foundation(CNCF)。
  • 它提供了一套强大的API和工具集,用于自动化容器的部署、调度、扩缩容、负载均衡、滚动升级、自我修复、服务发现、配置管理等操作。


2. Docker

  • Docker是一种开源的应用容器引擎,它将应用程序及其依赖(如库、配置文件等)打包成标准化的容器镜像。


3. Service Mesh

  • Service Mesh是一个专门使服务与服务之间的通信变得安全、快速和可靠的的基础设施。
  • 它位于服务之间,作为一层透明的基础设施层,负责服务间的网络通信、路由、安全、可观测性等功能。
     

   

三、数据库类型及其特性

1、关系型数据库(RDBMS)基础与特性

关系型数据库管理系统(RDBMS)是一种用于管理结构化数据的数据库系统。它基于关系模型,通过表来组织和存储数据,并通过SQL(结构化查询语言)进行操作。

RDBMS的基础
1. 关系模型

  • 表(Table):数据以表格形式存储,每个表包含行(记录)和列(字段)。
  • 行(Row):表中的一条记录。
  • 列(Column):表中的一个字段,描述记录的一个属性。


2. 主键和外键

  • 主键(Primary Key):唯一标识表中每一行的列或列的组合。主键值必须唯一且非空。
  • 外键(Foreign Key):引用另一表的主键,建立表之间的关系,确保数据的完整性和一致性。


3. SQL(Structured Query Language)

  • 查询(Query):通过SELECT语句从数据库中检索数据。
  • 插入(Insert):通过INSERT语句向数据库中添加新记录。
  • 更新(Update):通过UPDATE语句修改数据库中的现有记录。
  • 删除(Delete):通过DELETE语句从数据库中删除记录。

  
RDBMS的特性
1. 数据完整性

  • 实体完整性:确保每个表中的行是唯一的。
  • 参照完整性:确保外键引用的值在被引用表中存在。
  • 域完整性:确保列中的数据符合预定义的类型、格式和范围。


2. 事务管理

  • 事务(Transaction):一组作为单个工作单元执行的操作。事务具有四个特性(ACID):原子性、一致性、隔离性和持久性。
  • 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部回滚。
  • 一致性(Consistency):事务完成后,数据库从一个一致状态转变到另一个一致状态。
  • 隔离性(Isolation):并发事务的执行互不干扰。
  • 持久性(Durability):事务完成后,其结果在数据库中是永久的。


3. 并发控制

  • 锁(Lock):通过锁定资源防止多个事务同时访问相同的数据,以确保数据的一致性。
  • 隔离级别(Isolation Levels):定义事务之间的隔离程度,如读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、可串行化(Serializable)。

常见的关系型数据库系统
MySQL

  • 概述:MySQL是一个开源的关系型数据库管理系统,广泛用于Web应用和在线事务处理(OLTP)。
  • 特点:
    •  性能:MySQL以其高性能和快速响应著称。
    •  扩展性:支持主从复制和分片,便于扩展和负载均衡。
    •  社区和支持:拥有庞大的用户社区和丰富的文档资源。
  • 应用场景:适用于需要快速读写操作的Web应用,如电子商务网站、内容管理系统等。


PostgreSQL

  •  概述:PostgreSQL是一个功能强大的开源关系型数据库管理系统,强调标准的合规性和扩展性。
  • 特点:
    •  标准兼容:严格遵循SQL标准,支持复杂的查询和操作。
    •  扩展性:支持自定义数据类型、函数和操作符,具有丰富的扩展机制。
    •  可靠性:支持多版本并发控制(MVCC),提供高并发和数据一致性。
    •  高级功能:支持复杂查询、全文搜索、地理空间数据处理等。
  • 应用场景:适用于需要复杂查询和高可靠性的应用,如金融系统、数据分析平台等。 

2、NoSQL数据库概述与分类

NoSQL数据库,全称为Not Only SQL,即“不仅仅是SQL”,是一种非关系型的数据库管理系统。它旨在解决传统关系型数据库(如MySQL、Oracle等)在处理大规模、高并发、不结构化数据方面的不足。NoSQL数据库具有高度可扩展性、灵活的数据模型和出色的性能表现,广泛应用于大数据存储与分析、实时数据处理等场景。

NoSQL数据库的主要特点

  1. 高度可扩展性:NoSQL数据库采用分布式架构,可以轻松扩展存储容量和处理能力。
  2. 灵活的数据模型:NoSQL数据库支持半结构化和非结构化数据,可以存储和查询各种类型的数据。
  3. 高性能:通过优化数据存储和查询方式,NoSQL数据库提供快速和高效的读写操作。
  4. 高可用性:通过数据冗余、备份和故障转移机制,确保数据的高可用性。

 

NoSQL数据库的分类
NoSQL数据库根据数据模型和存储方式的不同,可以分为多种类型,主要包括键值存储、文档数据库、列存储和图数据库等。

1. 键值存储(Key-Value Store)

  • 概述:键值存储是最简单的NoSQL数据库类型,数据以键值对的形式存储,类似于哈希表。每个键对应一个值,键是唯一的。
  • 特点:
    • 简单高效:数据模型简单明了,操作高效。
    • 高扩展性:支持水平扩展,可以将数据分布在多个节点上,实现高并发处理和负载均衡。
    • 适用于缓存、快速查询和分布式存储等场景。
  • 常见数据库:Redis、Memcached、Cassandra、DynamoDB等。

 


2. 文档数据库(Document Databases)

  • 概述:文档数据库是一种非关系型数据库,用于存储和管理以半结构化的文档形式表示的数据。文档通常采用JSON或类似的格式进行组织。
  • 特点:
    • 强大的灵活性:不需要固定的模式或预定义的架构,可以灵活地插入、更新和删除文档。
    • 查询与索引:支持灵活的查询语言,如MongoDB的查询语法,可以根据文档的属性进行高级查询,并支持索引以提高查询性能。
    • 高可扩展性:提供了水平扩展的能力,可以通过添加更多的服务器节点来处理大规模的数据和高负载的请求。
  • 常见数据库:MongoDB、CouchDB、Elasticsearch等。

 

四、云原生数据库服务

1、云原生数据库的优势

1. 自动扩展与弹性

  • 自动扩展:云原生数据库能够根据实际的工作负载自动扩展或收缩资源,确保在高峰期提供足够的资源支持,而在低峰期则节约成本。
  • 高可用性:通过自动复制和故障切换机制,云原生数据库能够提供高可用性和灾难恢复能力,减少停机时间。


2. 管理与运维简化

  • 自动化管理:云原生数据库提供自动备份、自动修复、自动补丁和升级等功能,减少了运维人员的负担。
  • 无服务器架构:一些云原生数据库采用无服务器架构,用户只需关心数据和查询,而不需要管理底层基础设施。


3. 按需计费

  • 灵活的定价模式:云原生数据库通常按使用量计费,用户只需为实际使用的存储和计算资源付费,避免了资源浪费。
  • 成本优化:通过智能化的资源管理和优化工具,云原生数据库能够帮助用户进一步降低成本。

 

2、数据库即服务(DBaaS)模型解析

数据库即服务(DBaaS,Database as a Service)是一种云计算服务模式,允许用户通过互联网访问和管理数据库,而无需管理底层硬件和数据库软件。DBaaS提供了一种简化的方式来部署、管理和扩展数据库,使用户能够专注于应用程序开发和数据分析,而不必处理数据库的维护和操作。

DBaaS的核心特性
1. 简化的数据库管理

  • 自动化运维:DBaaS平台通常提供自动化的数据库运维任务,如备份、恢复、补丁管理和升级,减少了手动操作和运维工作。
  • 轻松部署:用户可以通过简单的界面或API快速创建和配置数据库实例,缩短了部署时间。


2. 按需扩展

  • 弹性伸缩:DBaaS平台允许根据实际需求动态调整数据库的计算和存储资源,确保在高峰期有足够的资源支持,同时在低负载时节约成本。
  • 全球分布:一些DBaaS提供商支持在多个地理区域和可用区之间进行数据分布和复制,增强数据的可用性和访问速度。


3. 高可用性和灾难恢复

  • 内置高可用性:DBaaS平台通常内置高可用性机制,如数据复制、自动故障转移和多可用区部署,确保数据库的连续运行。
  • 灾难恢复:提供自动化的备份和恢复功能,使数据在灾难情况下能够快速恢复,保障业务连续性。

 

五、在云原生环境中部署数据库

1、使用容器化技术部署MySQL数据库

1. 拉取MySQL Docker镜像
 

docker pull mysql:latest


2. 创建并运行MySQL容器
 

docker run --name my-mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest


此命令将下载并运行MySQL容器,并设置root用户的密码为my-secret-pw。你可以根据需要更改密码。

  • --name my-mysql-container:指定容器的名称。
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw:设置环境变量,指定root用户的密码。
  • -d:以守护进程模式运行容器。
  • mysql:latest:使用最新的MySQL镜像

2、在Kubernetes上部署MySQL数据库

在Kubernetes上部署MySQL数据库可以通过创建相应的资源对象来完成,包括Pod、Service、PersistentVolume(PV)、PersistentVolumeClaim(PVC)等。

1. 创建PersistentVolume和PersistentVolumeClaim
首先,创建PersistentVolume(PV)和PersistentVolumeClaim(PVC)来管理MySQL的持久化存储。

PersistentVolume(PV)配置示例

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data/mysql

PersistentVolumeClaim(PVC)配置示例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi


2. 创建MySQL Deployment和Service
创建MySQL Deployment和Service来部署MySQL实例和暴露服务。

MySQL Deployment配置示例
创建一个名为mysql-deployment.yaml的文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:latest
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: my-secret-pw
            - name: MYSQL_DATABASE
              value: mydb
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-storage
          persistentVolumeClaim:
            claimName: mysql-pvc


在这个配置中,MYSQL_ROOT_PASSWORD和MYSQL_DATABASE是环境变量,用于设置MySQL的root密码和默认数据库。

MySQL Service配置示例
创建一个名为mysql-service.yaml的文件:

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: mysql
  type: ClusterIP


这个配置定义了一个ClusterIP类型的Service,用于在集群内部暴露MySQL服务。

3. 部署资源
使用kubectl命令部署上述资源。

kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-deployment.yaml
kubectl apply -f mysql-service.yaml

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于云原生的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

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

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

相关文章

详细分析Flask中的蓝图Blueprint(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 蓝图(Bluepri…

yolo数据集从一种文件夹格式转话成另外一种

1、转化前yolo格式数据集路径结构 2、转化后yolo格式数据集路径结构 3、转化脚本(可以直接复制使用) import os import argparse import shutil def makdirs(opt,tests_flag):images_train os.path.join(opt.save_root_path, images/train)images_val …

编程入门:大学新生的指南与策略

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SSH访问控制:精确管理你的服务器门户

“ 在数字世界中,服务器的安全性是任何网络管理员的首要任务。特别是对于远程登录协议如SSH,确保只有授权用户可以访问是至关重要的。 今天,记录两种有效的方法来控制用户对特定服务器的访问:通过sshd_config实现黑/白名单机制和利…

论文解析——Character Region Awareness for Text Detection,字符级文本检测CRAFT算法

这篇论文来自CVPR2019,paper地址:Character Region Awareness for Text Detection。 代码:CRAFT-pytorch。 这篇论文主要解决之前的文本检测是基于word-level的检测框,不能识别任意形状的文本的问题。与之前的方法不同&#xff0…

HID类报表描述符深入理解(需要完善)

参考资料 一篇博文, USB中文网, USB中文网1, HID有关资源, HID报告描述符的基本组成(短)item 长的item几乎没使用过,和短的item使用方法类似,可根据HID协议查看,使用方式可以参考item介绍 三…

自修室预约小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,公告通知管理,自修室管理,座位预约管理,预约取消管理,管理员管理,系统管理 微信端账号功能包括:系统首页&a…

代码随想录训练营 Day17打卡 二叉树 part05 654. 最大二叉树 617. 合并二叉树 700. 二叉搜索树中的搜索 98. 验证二叉搜索树

代码随想录训练营 Day17打卡 二叉树 part05 一、 力扣654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归…

基于Raft算法的分布式KV数据库:一、开篇

项目描述:本项目是基于Raft算法的分布式KV数据库,保证了分布式系统的数据一致性和分区容错性,在少于半数节点发生故障时仍可对外提供服务。使用个人实现的分布式通信框架mpRPC和跳表数据库skipList提供RPC服务和KV存储服务。 github地址&…

如何在数据埋点中发现和修复数据上报逻辑错误

如何发现和处理数据埋点中的逻辑错误 在大数据分析中,数据埋点是至关重要的一环。然而,当我们遇到数据上报逻辑错误时,该如何应对呢?本文将为你揭示解决这一棘手问题的有效方法。 目录 如何发现和处理数据埋点中的逻辑错误什么是数据上报逻辑错误?如何发现数据上报逻辑错误…

Python酷库之旅-第三方库Pandas(060)

目录 一、用法精讲 231、pandas.Series.reorder_levels方法 231-1、语法 231-2、参数 231-3、功能 231-4、返回值 231-5、说明 231-6、用法 231-6-1、数据准备 231-6-2、代码示例 231-6-3、结果输出 232、pandas.Series.sort_values方法 232-1、语法 232-2、参数…

Flink-StarRocks详解:第三部分StarRocks分区分桶(第53天)

文章目录 前言2.3 数据分布2.3.1 数据分布概览2.3.1.1 常见的数据分布方式2.3.1.2 StarRocks的数据分布方式2.3.1.3 分区2.3.1.4 分桶 2.3.2 创建分区2.3.2.1 表达式分区2.3.2.1.1 时间函数表达式分区(自v3.1)2.3.2.1.2 列表达式分区(自v3.1&…

EAK水冷电阻60kW负载制动电阻器

描述 EAK制动电阻器 液冷电阻器将多余的制动能量转化为有用的热量,因此非常适合电动或混合动力驱动。与传统的风冷制动电阻器相比,水冷可节省高达 88% 的额外空间。作为一个额外的功能,电阻器可以很容易地与无滴漏的快速紧固件连接。由于即使…

注意力特征融合

摘要 https://arxiv.org/pdf/2009.14082 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。它通常通过简单的操作来实现,如求和或拼接,但这可能不是最佳选择。在这项工作中,我们提出了一种…

【Mybatis】浅谈Mybatis的缓存机制,一级缓存和二级缓存

目录 1. 缓存机制介绍 2. 一级缓存 3. 二级缓存 4. mybatis缓存执行流程 1. 缓存机制介绍 MyBatis 的缓存机制是为了提高应用程序的性能而设计的,通过缓存策略来减少数据库的查询次数。MyBatis 提供了两种类型的缓存:一级缓存和二级缓存。 默认情况下…

web框架:Django进阶(二)

文章目录 Django进阶(二)1.orm1.1 基本操作1.2 连接数据库1.3 连接池1.4 多数据库1.4.1 读写分离1.4.2 分库(多个app ->多数据库)1.4.3 分库(单app)1.4.4 注意事项 1.5 表关系1.6 数据操作单表一对多正向…

IIS解析漏洞~ IIS7.漏洞分析

IIS解析漏洞 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本),配合文件上传漏洞进行GetShell的漏洞! 1.2:IIS7.X 在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文…

Modbus通讯协议

Modbus通讯协议 Modbus协议是一种用于电子控制器之间的通信协议,‌它允许不同类型的设备之间进行通信,‌以便进行数据交换和控制。‌Modbus协议最初为可编程逻辑控制器(‌PLC)‌通信开发,‌现已广泛应用于工业自动化领…

Error: No module factory available for dependency type: CssDependency

本篇主要用来记录VUE打包的问题点,今天使用npm run build:prod 打包VUE出现如下问题: Error: No module factory available for dependency type: CssDependency 因为测试和预发布都挺正常的,正式环境竟然出问题,废话不多说&…

用 Python 编写的井字游戏

一.介绍 在本文中,我将向您展示如何使用 Python 创建一个非常简单的井字游戏。 井字游戏是一种非常简单的双人游戏。因此每次只能有两个玩家玩。该游戏也称为井字游戏或 Xs 和 Os 游戏。一个玩家玩 X,另一个玩家玩 O。在这个游戏中,我们有一…