精华内容
下载资源
问答
  • 云原生数据库vitess简介

    千次阅读 2019-11-06 15:16:09
    vitess是用于MySQL水平扩展的数据库集群系统 具有以下特点 可扩展性 Vitess将许多重要的MySQL功能与NoSQL数据库的可伸缩性结合在一起。其内置的分片功能使您可以在不向应用程序添加分片逻辑的情况下扩展数据库。 ...

    vitess

    简介

    vitess是用于MySQL水平扩展的数据库集群系统

    具有以下特点

    • 可扩展性

    Vitess将许多重要的MySQL功能与NoSQL数据库的可伸缩性结合在一起。其内置的分片功能使您可以在不向应用程序添加分片逻辑的情况下扩展数据库。

    • 性能

    Vitess自动重写会损害数据库性能的查询。它还使用缓存机制来调解查询,并防止重复的查询同时到达您的数据库。

    • 可管理性

    Vitess自动处理主故障转移和备份等功能。它使用锁服务器来跟踪和管理服务器,使您的应用程序对数据库拓扑一无所知。

    • 连接池

    Vitess消除了MySQL连接的高内存开销。Vitess服务器轻松地一次处理数千个连接。

    • 分片管理

    MySQL本身不支持分片,但是随着数据库的增长,您可能会需要它。Vitess使您不必在应用程序中添加分片逻辑,还可以在最少的停机时间内实现实时重新分片。

    • 工作流程

    Vitess会跟踪有关集群配置的所有元数据,以便集群视图始终是最新的,并且对于不同的客户端是一致的。

    与其他存储选择的对比

    Vitess vs. Vanilla MySQL

    Vanilla MySQL Vitess
    每个 MySql 连接都有一个内存开销,其范围介于 256KB 到几乎 3MB 之间,这取决于你所使用的 MySql 版本。随着你的用户群的增长,你需要增加内存以支撑增加的那些连接,但增加内存无助于提高查询速度。此外,在获取这些连接的时候还有大量的 CPU 开销。 Vitess 基于 BSON 的协议创建非常轻量级仅约 32KB 的连接。Vitess 的连接池功能使用了 Go 语言的卓越的并发支持将这些轻量级的连接映射到一个小型的 MySql 连接池。因此,Vitess 可以很容易地同时处理数千个连接。 每个 MySql 连接都有一个内存开销,其范围介于 256KB 到几乎 3MB 之间,这取决于你所使用的 MySql 版本。随着你的用户群的增长,你需要增加内存以支撑增加的那些连接,但增加内存无助于提高查询速度。此外,在获取这些连接的时候还有大量的 CPU 开销。 Vitess 基于 BSON 的协议创建非常轻量级仅约 32KB 的连接。Vitess 的连接池功能使用了 Go 语言的卓越的并发支持将这些轻量级的连接映射到一个小型的 MySql 连接池。因此,Vitess 可以很容易地同时处理数千个连接。
    低效的写查询,比如一些没有设置一个限制的写查询,将会对所有用户的数据库性能产生负面影响。 Vitess 所用的 SQL 解析器使用了一组可配置的规则对可能会降低数据库性能的查询进行重写。
    分片是一个对你的数据进行分区来提高可扩展性和性能的过程。MySql 不支持分片,要求你自己去编写分片代码并在你自己的应用程序中嵌入分片逻辑。 Vitess 使用基于范围的分片。它同时支持水平和垂直的重新切分,完成大多数数据的转换只需要仅仅几秒钟的只读的停机时间。Vitess 甚至可以适应你现有的一个自定义分片方案。
    MySql 集群为保证可用性采用的是主从复制,有一个主数据库和几个副本数据库。主库宕机,某台从库将成为新的主库。这个要求你去管理数据库的生命周期并将当前的系统状态传达给你自己的应用程序。 Vitess 帮你管理数据库的生命周期。它支持并自动应对各种场景,包括主库故障转移以及数据备份。
    MySQL群集可以具有针对不同工作负载的自定义数据库配置,例如用于写入的主数据库,用于Web客户端的快速只读副本,用于批处理作业的较慢只读副本等等。如果数据库具有水平分片,则将对每个分片重复进行设置,并且应用程序需要内置逻辑才能知道如何查找正确的数据库。 Vitess 使用一个数据存储一致性的拓扑支持,比如 etcd 或者 ZooKeeper。这也就意味着集群视图始终是最新的而且对于不同的客户端也能始终保证其一致性。Vitess 还提供了一个高效地将查询路由给最适合的 MySql 实例的代理。

    Vitess vs. NoSQL

    NoSQL Vitess
    NoSQL 数据库不定义数据库表之间的关系,并且仅支持 SQL 语言的一个子集。 Vitess 并不是一个简单的键值存储。它支持复杂的查询语句,比如 where 子句、联接查询、聚集功能等等。
    NoSQL 数据库不支持事务。 Vitess 支持单个分片内的事务。Vitess 团队也正在探索使用两阶段提交支持跨分片事务的可行性。
    NoSQL 解决方案拥有定制的 API,这将导致定制的架构、应用程序和工具。 Vitess 仅添加了极小的变化到 MySql,一个绝大多数的人们都已经习惯使用的数据库。
    相比 MySql 来讲,NoSQL 提供的数据库索引支持是有限的。 Vitess 允许你使用 MySql 的所有索引功能来优化查询性能。

    架构

    Vitess平台由许多服务器进程,命令行实用程序和基于Web的实用程序组成,并由一致的元数据存储提供支持。

    根据您应用程序的当前状态,您可以通过许多不同的流程来实现完整的Vitess实现。例如,如果要从头开始构建服务,那么使用Vitess的第一步就是定义数据库拓扑。但是,如果需要扩展现有数据库,则可能首先要部署连接代理。

    Vitess工具和服务器旨在为您提供帮助,无论您是从完整的数据库团队开始,还是从小规模扩展到随时间扩展。对于较小的实现,vttablet功能(例如连接池和查询重写)可帮助您从现有硬件中获得更多收益。然后,Vitess的自动化工具为大型实施提供了更多好处。

    下图说明了Vitess的组件:

    概念

    cell

    是一组服务器和网络基础设施中并置的区域,并且和其他cell故障隔离
    它通常是完整的数据中心或数据中心的子集,有时称为区域或可用性区域。Vitess可以优雅地处理cell级别的故障,例如当cell被切断网络时。

    Vitess实现中的每个cell都有一个本地拓扑服务,该服务托管在该cell中。
    拓扑服务在其单元格中包含有关Vitess数位板的大多数信息。这使cell可以拆卸并重建为一个单元。

    Vitess限制了数据和元数据的跨cell流量。虽然也可以将读取流量路由到各个单元可能有用,但Vites当前仅服务于本地cell的读取。
    必要时,写入将跨cell到达该分片的主文件所在的位置。

    keyspace

    一个keyspace是一个逻辑数据库。如果您使用分片,则keyspace将映射到多个MySQL数据库。
    如果您不使用分片,则keyspace将直接映射到MySQL数据库名称。无论哪种情况,从应用程序的角度来看,keyspace都显示为单个数据库。

    从keyspace读取数据就像从MySQL数据库读取数据一样。但是,根据读取操作的一致性要求,Vitess可能会从主数据库或副本中获取数据。
    通过将每个查询路由到适当的数据库,Vitess允许将代码构造为好像从单个MySQL数据库读取一样。

    Keyspace Graph

    通过keyspace graph,Vitess可以决定对于给定的keyspace,cell,tablet使用哪一组分片。

    Keyspace id

    密钥空间ID是用确定给定行在哪个分片上

    Replication Graph

    Replication Graph标识了主数据库及其各自的副本之间的关系。
    在主服务器故障转移期间,Replication Graph使Vitess可以将所有现有副本指向新指定的主数据库,以便复制可以继续

    shard

    keyspace是Keyspace的拆分,一个分片通常包含一个MySQL主服务器和许多MySQL从服务器。
    分片中的每个MySQL实例都具有相同的数据,从节点可以为只读流量提供服务,执行长时间的数据分析或管理任务

    • 重新分片

    Vitess支持动态重新分片,其中动态群集上的分片数量可以更改。这可以将一个或多个碎片分成较小的碎片,也可以将相邻的碎片合并成较大的碎片。
    在动态重新分片期间,源分片中的数据将被复制到目标分片中,以跟上复制的步伐,然后与原始分片进行比较以确保数据完整性。
    然后,将实时服务基础结构转移到目标分片,并删除源分片。

    Tablet

    Tablet是 mysqld和vttablet的组合通常运行在同一服务器,每个Tablet都被分配一个Tablet 类型,用于指定其当前的执行角色

    类型:

    • master - 一个Tablet 副本,目前正好是其分片的MySQL master。
    • replica - 一个MySQL slave,有资格晋升为master。通常,这些保留用于服务实时的,面向用户的请求(例如从网站的前端)。
    • rdonly - 无法升级为master的 MySQL slave 。通常,它们用于后台处理作业,例如进行备份,将数据转储到其他系统,
      繁重的分析查询,MapReduce和重新分片。
    • backup - Tablet已在一致的快照处停止了复制,因此可以为其分片上载新的备份。完成后,它将恢复复制并返回其先前的类型。
    • restore -一种Tablet,没有数据启动,并且正在从最新的备份中恢复自身。完成后,它将在备份的GTID位置开始复制,并成为副本或rdonly。
    • drained -由Vitess后台进程保留的数位板(例如用于重新分片的rdonly数位板)。

    Topology Service(也称为TOPO或锁定服务)

    该拓扑服务是一组不同的服务器上运行的后端进程。这些服务器存储拓扑数据并提供分布式锁定服务。
    Vites使用一个插件系统来支持各种后端来存储拓扑数据,这些后端被假定提供了分布式的,一致的键值存储。默认情况下,我们的本地示例使用ZooKeeper插件,而Kubernetes示例使用etcd。

    存在拓扑服务的原因有几个:

    • 它使tablets之间可以作为一个群集进行协调。
    • 它使Vitess能够发现数位板,因此知道将查询路由到何处。
    • 它存储数据库管理员提供的Vitess配置,集群中许多不同服务器都需要该配置,并且在服务器重新启动之间必须保持这种配置。
    • 一个Vitess群集在每个tablets中都有一个全局拓扑服务和一个本地拓扑服务。由于cluster是一个重载术语,并且一个Vitess集群通过每个集群都有其自己的全局拓扑服务这一事实而与另一个集群有所区别,因此我们将每个Vitess集群称为对流层。

    全球拓扑

    全局拓扑服务存储不经常更改的Vites范围的数据。具体来说,它包含有关键空间和分片以及每个分片的主tablets别名的数据。

    全局拓扑用于某些操作,包括重定亲和重新分片。通过设计,全局拓扑服务使用不多。

    为了终止任何残存的cell,全局拓扑服务应在多个cell中具有节点,并具有足够的数量以在发生cell故障时维持仲裁。

    局部拓扑

    每个本地拓扑都包含与其自己的celll有关的信息。具体来说,它包含有关cell中的tablets的数据,该cell的键空间图以及该单元格的复制图。

    Vitess必须可以使用本地拓扑服务来发现数位板并在数位板进出时调整路由。但是,在稳定状态下为查询提供服务的关键路径中,没有对拓扑服务进行任何调用。这意味着在拓扑暂时不可用期间仍可提供查询。

    vschema

    一个VSchema允许您描述数据是如何被keyspaces和shard组织。此信息用于路由查询,以及在重新分片操作期间。

    VSTREAM

    VStream是位于VTGate上的变更通知系统。可以将VStream视为自定义为在Vitess中使用的UpdateStream。
    与更新流一样,VTTablets可以订阅VStream来接收事件。VStream可以从VStreamer中提取事件,后者又从Binlog中提取事件。
    这将允许高效执行VReplication之类的过程,在此过程中,订户可以间接从binlog接收和应用事件。
    用户可以将过滤规则应用于VStream,以获取有关引擎盖下给定键空间,分片和位置发生的情况的深入信息。

    VTGate

    VTGate是一种轻量级的代理服务器,可将流量路由到正确的VTTablet服务器,并将合并结果返回给客户端。
    它说MySQL协议和Vitess gRPC协议。因此,您的应用程序可以连接到VTGate,就像它是MySQL Server一样。

    在将查询路由到适当的VTTablet服务器时,VTGate会考虑分片方案,所需的延迟以及表及其底层MySQL实例的可用性。

    vtctl

    vtctl是用于管理Vitess群集的命令行工具。它允许人员或应用程序轻松地与Vitess实现交互。
    使用vtctl,您可以标识主数据库和副本数据库,创建表,启动故障转移,执行分片(和重新分片)操作,等等。

    当vtctl执行操作时,它会根据需要更新锁服务器。其他Vitess服务器会观察到这些更改并做出相应的反应。
    例如,如果您使用vtctl故障转移到新的master数据库,则vtgate会看到更改并将将来的写操作定向到新的master。

    vtctld

    vtctld是一个HTTP服务器,使您可以浏览存储在锁服务器中的信息。这对于故障排除或获取服务器及其当前状态的高级概述很有用。

    vtworker

    vtworker承载长时间运行的进程。它支持插件架构并提供库,因此您可以轻松选择要使用的平板电脑。插件可用于以下类型的作业:

    重新分片不同的作业会在分片拆分和联接期间检查数据完整性
    垂直拆分不同作业在垂直拆分和联接期间检查数据完整性
    vtworker还可让您轻松添加其他验证过程。例如,如果一个键空间中的索引表引用了另一个键空间中的数据,
    则可以执行片剂内部完整性检查以验证类似外键的关系或跨表完整性检查

    扫描关注我:

    微信

    展开全文
  • Kubernetes 的出现使得广大开发同学也能运维复杂的分布式系统,它大幅降低了容器化应用部署的门槛,用户通过它提供的 Deployment、ReplicaSet 控制器可以方便地部署一套高可用、可扩展的分布式无状态服务,这类应用...

    在这里插入图片描述
    Kubernetes 的出现使得广大开发同学也能运维复杂的分布式系统,它大幅降低了容器化应用部署的门槛,用户通过它提供的 Deployment、ReplicaSet 控制器可以方便地部署一套高可用、可扩展的分布式无状态服务,这类应用的特点是不在本地存储数据,通过简单的负载均衡策略可实现请求分发。但是越来越多的开发人员希望把项目中依赖的数据库这类有状态服务也部署到Kubernetes里面,通过其进行编排部署,使应用与所依赖的后端存储尽量靠近一些,因为有状态服务的复杂性,这一过程并不容易。

    在 Kubernetes 中有多种运行有状态应用程序的技术,每种技术各有优缺点。本文试图介绍在 Kubernetes 中运行有状态应用程序的关键方法,并探讨了在 Kubernetes 上部署有状态的服务的几种可行方案。

    在这里插入图片描述

    第一种方法是将 Kubernetes 集群与 Samba、NFS 或 GlusterFS 等传统的存储基础设施集成在一起,这种方法可以轻松扩展到基于云的共享文件系统,例如 Amazon EFS、Azure 文件和 Google Cloud Filestore,在这种架构中,存储层与 Kubernetes 管理的计算层完全脱钩。由于底层存储的持久性,工作负载完全与其分离,这使得 Pod 可以在任何节点上进行调度,而无需定义节点亲和性。

    但是,这种方法对于需要高 I/O 吞吐量的有状态工作负载并不理想。共享文件系统并非旨在提供关系型数据、NoSQL 数据库和其他写入密集型工作负载所需的 IOPS。此方法的典型应用场景应该是内容管理系统,机器学习系统和数字资产管理系统等。

    在这里插入图片描述

    第二种方法是通过 Kubernetes 的控制器来维护所需的配置状态,Deployment、ReplicaSet、DaemonSet 和 StatefulSet 是一些常用的控制器, 其中 StatefulSet 是一种特殊的控制器。集群工作负载通常可以具有一个或多个主服务器和多个从服务器,大多数数据库都设计为在集群模式下运行,以提供高可用性和容错能力,有状态的集群工作负载持续在主服务器和从服务器之间复制数据。为此,集群基础架构希望参与的实体(主从)具有一致暴露的端点,借以可靠地同步状态。但是在 Kubernetes 中,Pod 被设计为临时的,不能保证具有固定的名称和 IP 地址。有状态集群工作负载的另一个要求是持久的存储后端,该后端具有容错能力并且能够满足 IOPS 的需求。

    Kubernetes 中引入 StatefulSet 控制器来运行有状态的集群工作负载,保证属于 StatefulSet 的 Pod 具有稳定的唯一标识符,它们遵循可预测的命名约定,还支持有序、便捷的部署和扩展。StatefulSet 中的每个 Pod 都有一个对应的持久卷声明(PVC),该声明遵循相似的命名约定。当 Pod 终止并在其他节点上重新调度时,Kubernetes 控制器将确保 Pod 与同一 PVC 关联,以此来保证集群的状态。

    由于 StatefulSet 中的每个 Pod 都有专用的 PVC 和 PV,因此使用共享存储没有特别的规定。但是可以预期 StatefulSet 能获得快速、可靠、持久的存储层(例如基于 SSD 的块存储设备)的支持,在确保将写操作完全提交到磁盘后,可以从块存储设备中获取常规备份和快照。典型的应用场景如 Apache ZooKeeper,Apache Kafka,MySQL,PostgreSQL 等。

    在这里插入图片描述

    虽然用户可以基于 StatefulSet 在 Kubernetes 中部署运维一套高可用有状态服务,如高 MySQL,PostgreSQL 等。但过程相对复杂,用户既要熟悉各种 Kubernetes 资源对象,又要学习很多应用相关的操作细节,同时还需维护一套复杂的管理脚本,为了降低在 Kubernetes 中部署复杂应用的门槛 CoreOS 公司推出了 Operator。

    Operator 是用来打包、部署和管理需要运行在 Kubernetes 之上复杂应用的一种方法,Operator将运维人员对软件操作的知识代码化,同时综合运用 Kubernetes 中的各种资源对象来实现复杂应用的部署和运维。Operator 通过 CustomResourceDefinition(CRD)为服务定义了新的资源对象,同时通过自定义控制器来保证应用处于预期状态。

    在这里插入图片描述

    Operator 的工作流程可抽象成以下三个步骤:

    Observe - 通过 Kubernetes API 观察目标对象的状态;
    Analyze - 分析当前状态与期望状态的差别;
    Act - 执行编排操作,将当前状态调整为期望状。

    由于开源社区的推进,Operator 越来越普及。但是应用于各种常规服务的 Operator 成熟度各不相同,具体细节请参考 github 开源项目 awesome-operators。Operator 典型的应用场景有 MySQL 高可用集群、TiDB 集群、 TensorFlow 集群、Hadoop 生态相关集群等。

    在这里插入图片描述

    预告

    下一篇我们将以最先进的开源数据库 PostgreSQL 为例,介绍如何在 Kubernetes 上部署运维有状态云服务,敬请期待!

    展开全文
  • 主要特点包括,每一个微服务是一个独立的自治系统,可以不依赖外部组件独立运行;对应用只暴露接口,用户可以灵活的调整过每个微服务的使用;业务粒度足够小。 在企业架构“化”的过程中,数据库化是最...

    如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。

    微服务,也就是一种面向服务的,有特定边界的松散耦合的架构。

    主要特点包括,每一个微服务是一个独立的自治系统,可以不依赖外部组件独立运行;对应用只暴露接口,用户可以灵活的调整过每个微服务的使用;业务粒度足够小。

     

    在企业架构“云化”的过程中,数据库的云化是最为重要也是难度较大的一个部分。数据库云平台(dbPaaS)是一类支持弹性扩张、多租户、自我管理、并能够运行在云服务提供商的基础设施(IaaS)之上的数据库管理系统(DBMS)或存储管理系统。

     

    根据Gartner报告预测,数据库云平台市场份额将会在下一个五年中翻倍,而70%的用户将开始使用dbPaaS数据库云平台。因此,为了满足各类应用程序对数据库云平台的需求,同时为了减少私有云部署中对大量不同类型数据存储产品的运维复杂性,数据库的架构演进将是未来十年数据库转型的主要方向之一。

     

     

     

    云数据库的技术需求

    在业务和应用进行“云化”的过程中,云数据库因为在整体架构中的重要地位,在云化改造中的重要性不言而喻。云数据库的核心需求有一下几点,主要有:

    • 弹性扩张能力:数据库容量需要根据业务弹性扩展,满足不同业务的容量需求;
    • 弹性部署与随需应变能力:除了数据库的存储,其他数据库功能也需要根据应用的需求,进行弹性的部署调整;
    • 数据可靠性与服务持续能力:数据的可靠安全,全时在线是所有业务的必须要求;
    • 计算存储分离:将计算和存储资源灵活配置,既可以选择多种计算方式也可以同时对应多种存储方式,满足更多业务需求;
    • 多模式存储能力:结构化、非结构化、半结构化和图等多类型数据的存储;
    • 自我管理能力:提供零停机维护、持续集成、以及滚动升级能力,提升开发人员效率;
    • 自我监控以及问题修复能力:故障监控和问题修复,降低运维成本;
    • 是否满足特定应用场景:针对特定场景的可插拔组件或工具;
    • 监管与安全:满足监管的要求,保证数据的安全。

     

    云数据库需要满足这些技术要求,除了在功能上的具体提升,在整体架构上更需要进行升级和“进化”。

     

     

    云数据库架构方向

    云数据库架构是其能否承载应用架构“云化”的关键点,随着技术和业务的发展,云数据库的架构出现了几个主要的发展方向:

    • 在dbPaaS平台中,计算-存储层分离将会成为主流技术方向。通过将协议解析、计算等模块与底层存储解耦,数据库云平台将存储层进行分片以实现存储的弹性水平扩张,同时通过计算层的无状态设计允许计算层通过增加节点数量线性提升计算能力,已达到整个数据库云平台的弹性水平扩张。
    • 多模架构成为主流趋势,Multi-model的架构在一个数据库平台就可以支持多种存储方式,大大减少运维和开发的成本。传统数据库中例如IBM、Oracle等早已经提供关系型、OO、甚至XML等存储引擎。而新一代数据库则更提供NewSQL、JSON、图、对象存储等多种类型数据存储引擎。
    • 云数据库平台将会提供多种混合模式的数据服务 – 关系型与非关系型。该模式使用户能够在同一平台中结合不同数据存储类型的特点,为新一代IT应用系统提供混合数据存储解决方案。
    • 更符合微服务业务架构的要求,微服务要求各个服务模块之间尽量松耦合和可独立扩展。因此对于数据库,也同样会针对不同的业务,进行不同侧重的配置,无论是传统的“读写分离”或者现在流行的HTAP都是围绕这个要求展开的。

     

    针对这几个主要的发展方向,我们就将详细来探讨云数据库的几个重要技术特点。

     

    1)存储-SQL 分离

    针对云数据库的需求和架构方向,一种新的数据库架构也在渐渐成为主流,也就是数据库的 “存储-SQL分离”架构。

     

    存储-SQL分离架构,即指数据库的存储引擎和SQL引擎两部分互相松耦合独立工作的架构。通常这一架构,分为存储、SQL和元数据 三个部分。

     

    • 存储层:即数据库的存储引擎,存储引擎负责处理数据的存储管理。同时包含路由及事务控制,保障数据的ACID特性。此外,存储层还应还具备索引、查询条件过滤、排序等一系列功能。
    • SQL层:SQL层主要负责处理SQL请求,上层直接面对应用程序,将应用程序的访问请求分发给存储层,并且接受存储层返回的数据结果。
    • 元数据区:元数据区负责存储整个数据库的所有元数据信息。

     

    典型的云数据库架构示意

     

    对于这一架构,其实MySQL数据库当前的架构是有一些类似的。

    MySQL数据库的SQL、存储分离的架构,在架构较为灵活,而其开源的生态也支持将不同的产品、引擎和工具进行充分的对接。在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

     

    MySQL数据库整体技术模块架构

     

    如上图所示,MySQL 的存储引擎可以挂载多种不同的产品,每个引擎都能提供不同的技术特性。其中包括InnoDB、MyISAM等架构。

     

    存储与SQL分离的架构,目前在数据库业界十分流行,AWS的Aurora数据库在SQL访问上也采用了类似的架构。SequoiaDB 3.0 目前在MySQL兼容上,主要也是采取“SQL-存储分离“的架构。

     

     

    SequoiaDB 3.0 MySQL 兼容逻辑架构

     

    SequoiaDB 3.0使用了MySQL数据库原生的SQL解析器,天然支持MySQL协议并可以做到100%语法兼容。在该架构中,MySQL协议解析层作为SQL解析和分发的角色,直接面对应用程序,每一个MySQL服务的接入节点都是一个独立支持读写操作的MySQL进程。而数据存储和管理层,则完全由巨杉数据库的分布式数据库引擎实现。简单来说,SequoiaDB 3.0作为MySQL的InnoDB替换引擎,在天然支持MySQL的全部语法和功能的同时,提供了数据库存储层弹性扩张的能力。

     

     

     

    2)多模Multi-Model

    企业使用云数据库对接的应用越来越多,需求多种多样,传统的做法是在dbPaaS里面提供十几个不同的数据库产品分别应对各种需求,这样的方法在系统增加后,整体维护性和数据一致性管理成本很高,会影响到整个系统的使用。

     

    云数据库的“多模”示意图

     

    为了实现业务数据的统一管理和数据融合,新型数据库需要具备多模式(Multi-Model)数据管理和存储的能力。数据库多模Multi-Model是指同一个数据库支持多个存储引擎,可以同时满足应用程序对于结构化、半结构化、非结构化数据的统一管理需求。

     

    通常来说,结构化数据特指表单类型的数据存储结构,典型应用包括银行核心交易等传统业务;而半结构化数据则在用户画像、物联网设备日志采集、应用点击流分析等场景中得到大规模使用;非结构化数据则对应着海量的的图片、视频、和文档处理等业务,在金融科技的发展下增长迅速。

     

    多模式数据管理能力,使得金融级数据库能够进行跨部门、跨业务的数据统一存储与管理,实现多业务数据融合,支撑多样化的金融服务。

     

    在架构上,刚刚提到的多模Multi-model也是针对云数据库需求的,则使得数据库使用一套数据管理体系可以支撑多种数据类型,因此支持多种业务模式,大大降低使用和运维的成本。

     

    3)灾备和多活

    对于应用程序来说,开发人员并不希望在设计应用的过程当中花费大量的精力来考虑底层数据高可用、灾备与多活时应用的切换逻辑。一般来说,一个成熟的dbPaaS层应当尽可能将底层的数据多副本同步、灾难切换、高可用接管等一系列操作进行封装,对于应用程序做到完全透明。

     

    在传统的应用程序开发中,开发者使用中间件容器对数据源进行配置,底层使用F5或其他虚拟IP地址对多个数据源进行封装。但是,在云化的演变过程中,底层的数据库从单一节点向分布式节点过渡,对于上层的应用程序一方面希望尽可能减少应用程序设计时对分库分表的依赖,另一方面更希望在数据节点切换,甚至数据中心灾难接管的过程当中做到应用透明无感知。

     

    SequoiaDB 3.0则引入了异地多活的架构,应用程序可以从任意接入节点以读写的方式访问本地数据库。在数据读写的过程当中,巨杉数据库能够从底层有效地进行数据一致性控制,对多个地区本地写入的数据进行远程复制,确保多个站点所读写的数据完全一致。

     

    另外,灾难发生时巨杉数据库提供对应用程序透明的数据切换与接管机制,动态调整底层数据分布拓扑逻辑,能够动态有效地排除故障数据中心内的节点,做到其他站点无感知地继续提供数据服务。

     

    多活相比于传统的高可用来说,不仅在性能和安全性上实现了更大的提升,而这一架构也能在多活数据中心中充分的应用软硬件设备,减少冗余。

     

    云数据库架构优势

    在技术驱动的需求下,云数据库架构具备了几项主要的业务价值:

    • 无需分库分表:此前,一种数据库分布式改造的方向是关系型数据库往分布式架构改造,MySQL分库分表就是其中一种方案。如今,存储-SQL分离的架构,在数据存储层已经实现原生分步实施,就避免了复杂冗长的“分库分表”方案。
    • 灵活支撑业务需求:存储和SQL层都可以实现服务、存储的弹性调整,灵活地支撑业务的需求。
    • 多存储引擎兼容:由于SQL和存储层的分离,在保持SQL接口不变的情况下,底层存储引擎可以支撑多个不同引擎,实现多种数据引擎的同时兼容。
    • 完全兼容已有应用:由于SQL层更多使用已有的标准SQL解析器,因此对于原有应用在SQL上可以实现完全的兼容,没有任何应用改造的投入。
    • 数据安全可用:分布式的存储和松耦合的架构,数据拥有安全的多副本,松耦合则大大增强了整个系统的容错性。相比传统单点架构,可以很好的实现数据双活甚至多活的架构,满足“两地三中心”“三地五中心”的合规监管安全要求。

     

     

    云数据库应用场景

    在新架构驱动下,云数据库目前在多个场景下已经开始实现落地应用。

     

    传统交易服务

    在传统中心化交易型业务中,高性能、高吞吐量的数据存储与处理能力,ACID以及安全都是非常重要的特性。例如,在一个典型的银行业务中,为了满足高峰时期的在线交易量,交易型数据库需要在亿级记录条数的数据库中每秒处理上千比交易。同时,为了满足生产系统的健壮性与可靠性,传统交易服务对于底层数据存储的安全性、高可用性、两地三中心部署能力都有着非常明确的要求。

     

    因此云数据库既需要将传统交易型业务逐渐转移至云平台,同时也需要在满足安全性和合规监管方面,为用户提供更好的支持。

     

    历史数据服务

    近年来,随着IT技术与大数据的不断发展,越来越多的企业将数据作为自身宝贵的资产进行长期保留。这使得一些传统应用程序的历史数据包袱越来越重,最终数据库不堪重负导致应用整体性能低下。另一方面,随着大数据需求的不断增加,曾经已经归档的数据需要重新在线以满足在线化、实时化使用、查询和分析等等要求,这就要求将原有庞大的离线数据进行“在线化”。这些需求使得历史数据管理成为必须。

    对于历史数据服务来说,由于对外提供应用程序的直接访问,其健壮性、可靠性、可配置一致性策略、性能与并发能力都是极为值得关注的。同时,相对传统交易服务来说,强一致和ACID反倒并不是最关注的点。鉴于一些企业直接将部分报表和自助查询运行在历史服务平台上,HTAP的能力也是值得关注的特性。

     

    云数据库在扩展性和性能上通过分布式的架构满足了这些需求,将历史数据很好的管理起来。

     

    实时在线服务

    当前大部分企业的生产业务系统与后台的数据加工、分析与查询系统都是通过T+1的方式进行数据ETL。而最近随着流处理技术的兴起,越来越多的企业开始基于流处理技术构建T+0的数据总线,以实现不同业务流程之间实时数据对接。譬如说,用户资产视图就可以利用流处理技术,在提供用户全资产视图查询的优秀用户体验的同时,大幅度减轻其对后台生产系统造成的查询压力。

    对于实时在线服务来说,数据库的层面最为关注性能、吞吐量、可靠性、与可用性。而对于强一致、ACID、与HTAP来说并不构成其最重要的特性。

    在线业务的数据多样化和性能都需要云架构的数据库提供更灵活高效的支持。

     

     

    影像存储服务

    很多行业在业务运营中会产生大量纸质凭证,在信息化处理和监管要求下,这些纸质的凭证都需要扫描成影像文件并长期保存。随着互联网技术以及集中作业中心等理念的深入推广,大量行业普遍需要建设统一的影像管理平台。

    对于典型的影像平台来说,其存储的数据总体量极大,使用传统存储的单位成本很高,需要进行生命周期管理时对运维又非常复杂。因此,对于逐年递增的海量影像数据来说,大部分企业都存在查询难、管理难、扩容难的几大痛点。

    同时,由于影像存储服务已经成为很多流程的一部分,其稳定性、可靠性与健壮性与核心交易系统处于同一级别。因此,影像存储服务最关注的层面在于可靠性、一致性、可扩展性、吞吐量、以及非结构化存储的多模特性。而其对于交易的ACID、HTAP等特性并不重点关注。

     

     

    小结

    云数据库是未来数据库发展的一个重要方向,云数据库架构随着云化要求也需要进行相应的迭代,未来在云数据库架构的演进还会随着需求的变化而持续发展。

    其中对于多模数据引擎、计算存储分离等将是云数据库技术演进的重点方向。

    巨杉也会持续关注架构的迭代演进,同时也在技术和架构上针对云架构进行更多的创新。

    转载于:https://www.cnblogs.com/chengjian-physique/p/10512487.html

    展开全文
  • 主要特点包括,每一个微服务是一个独立的自治系统,可以不依赖外部组件独立运行;对应用只暴露接口,用户可以灵活的调整过每个微服务的使用;业务粒度足够小。在企业架构“化”的过程中,数据库化是最为重要也...
  • POLARDB背景POLARDB是阿里自主研发的,具有里程碑意义的新一代关系型数据库,是与MySQL完全兼容的托管数据库产品。它秉承CloudNative的原生设计理念,采用了分布式存储引擎设计,性能最高可达到MySQL的6倍。在...

    POLARDB背景

    POLARDB是阿里云自主研发的,具有里程碑意义的新一代关系型数据库,是与MySQL完全兼容的云托管数据库产品。它秉承Cloud

    Native的原生设计理念,采用了分布式存储引擎设计,性能最高可达到MySQL的6倍。在提供高吞吐、低延迟OLTP服务的同时,POLARDB以更低的使用成本,为用户提供更好的系统在线扩展服务。

    ---摘自POLARDB产品介绍文档

    架构

    0b67e8dbc59845f38358989eb2d25987.png

    架构的设计特点:

    一写多读

    计算与存储分离

    读写分离

    高速链路互联

    共享分布式存储

    数据多副本、支持Parallel-Raft协议

    思考

    POLARDB

    是阿里的技术体系演变过程中的一个优秀的产品,它的强大之处在于:将大规模数据的存储、同步和性能等难点,通过

    POLARDB

    的架构设计,将这些复杂的问题变得透明,让技术人员专注在业务的开发上。

    体验POLARDB

    依次打开

    产品与服务

    ---

    云数据库 POLARDB

    bfe231494e6f3122f3f8f123bc086989.png

    选择你所需要的配置

    预付费

    按量付费

    ,可以根据你的业务需求来具体选择。如果你的业务场景的用量比较稳定,可以选择

    预付费

    ,如果有弹性扩容的需求,可以选择

    按量付费

    0c13b6db87d3f800c21802245149fac0.png

    实例概要

    d6ca3a422bdaf988f1b29570bfeb93ea.png

    POLARDB采用分布式集群架构,一个集群包含一个主实例和最多15个只读实例(确保高可用)。读写分离数据库接入功能,是POLARDB集群默认免费提供的一个透明、高可用、自适应的负载均衡能力。本次创建包含了一个主实例(负责读写)和一个只读实例(负责读)。

    实例详细信息

    362e65c80b896e60fb61c34ab60a53d7.png

    集群概要

    6809ccaa32a7c7cf229e08759177693e.png

    集群详细信息

    87d5c75a074c09bdb59d2143e3a9c753.png

    创建账号

    POLARDB初始账号只能在集群详情页设置,可用于登录到集群中的任意实例。

    a882988ff4ef6ca65bfe31cbe3118c23.png

    连接实例

    VPC(Virtual Private Cloud):可以理解成内网,如果是从阿里的ECS连过来的,推荐使用VPC。注意:这个地址是自动生成的,且无法释放。

    e886ce93ca6ed60b68152426d59f50f8.png

    我们现在演示通过

    VPC

    公网

    来连接POLARDB实例:

    VPC网络

    若使用ECS,推荐该种方式

    实例地址:pc-xxxxxxxxx.mysql.polardb.rds.aliyuncs.com:3306(xxxxxxxxx为你的实例配置id)

    端口:3306(默认,检查下ECS的防火墙配置是否开放了3306端口)

    账号:byronzoz  密码:xxxxxx

    通过阿里云的RDS界面登录:

    7e62ee8f18c09ae2e855ec187c370683.png

    优点

    :通过阿里云的RDS来登录,这种方式最简单,不需要安装任何客户端。

    通过阿里云的ECS直连:

    [byron@yanglaomap-prod ~]$ mysql -u byronzoz@pi-xxxxxx-pi-xxxxxx.mysql.polardb.rds.aliyuncs.com:3306

    4e1b25356c20b2f8c57866f71e405b70.png

    这种方式通过命令来直连,跟mysql操作没啥区别。

    公网

    实例地址:byronzoz-0.mysql.polardb.rds.aliyuncs.com端口:3306

    账号:byronzoz密码:xxxxxx

    本次测试,我们用navicat客户端来连接,当然你可以采用mysql自带的client也是OK的。

    a6451008a4e94fad8d4d78c44d340f7f.png

    提示:公网需要加入到白名单中,不然连接不过去,如我的公网IP为:171.221.xxx.xxx,这也是我踩过的坑~

    9c842a192b6c13d3dd4ec2000a2abdc3.png

    建表玩转业务

    各位看官们,这一块该你们发挥了...

    总结

    通过本文的简单介绍,你对POLARDB有一个初步的认识:

    POLARDB是可以100%兼容mysql

    POLARDB的架构设计

    如何购买POLARDB产品

    创建实例

    创建账号

    演示两种连接:VPC(通过阿里云RDS页面和ECS服务器)和公网(Navicat客户端)来连接实例

    POLARDB

    作为阿里云体系下的一个新成员,能与阿里云的产品迅速融合起来,包括

    网络(VPC)

    云服务器(ECS)

    云数据库(RDS)

    等,使用起来很方便,如果你是一个mysql老手,那你用POLARDB是可以非常快上手的,如果你是一个新手,按照教程step by step,也可以快速上手。

    POLARDB

    创新的架构设计,拥有很多是mysql数据库所不具备的或者需要花费很大精力才能具备的能力。如POLARDB创建实例后就默认具备了主从的多个实例,这些特性可以让开发人员专注业务上的实现,而不用关注数据库的水平扩展、存储、网络等耗费精力的事情。

    当然,也有一些不足的地方:

    白名单列表,公网连接下,需要设置白名单。这个有点繁琐,期望这个功能能进一步改进。如通过策略组的方式,而不是每个集群都配置一组白名单。

    不能访问用户表。这个似乎限制了数据库的功能。

    文档。很多开发者吐槽阿里云的技术文档(orz...):不规范更新慢,这个跟高大上的阿里云有点不匹配。期待未来的阿里云所有的云产品文档都是统一的格式/模板,这样阅读起来要更加容易些,而且建议要同步上英文文档(English

    Docs),毕竟已经走到国际化的道路上了。

    有人会问了:我购买的ECS上面也能安装mysql,为什么要单独选择POLARDB?

    原因很简单,你需要花费很长的时间和精力去做以下事情:

    数据库网络和节点管理

    主从配置

    读写分离

    数据库扩容

    性能方面

    数据容灾

    ......

    你花费的这些时间,POLARDB帮你节省掉,你只需要将大部分精力专注在业务开发上。

    展开全文
  • 主要特点包括,每一个微服务是一个独立的自治系统,可以不依赖外部组件独立运行;对应用只暴露接口,用户可以灵活的调整过每个微服务的使用;业务粒度足够小。 在企业架构“化”的过程中,数据库化是最为重要...
  • 背景当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原生协议...
  • 化要求下,数据库架构的演进

    千次阅读 2018-08-17 18:10:46
    主要特点包括,每一个微服务是一个独立的自治系统,可以不依赖外部组件独立运行;对应用只暴露接口,用户可以灵活的调整过每个微服务的使用;业务粒度足够小。 在企业架构“化”的过程中,数据库化是最...
  • 背景当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原生协议...
  • 是目前市场上极少数支持全端的人才网系统(全端指:pc端 h5端 微信端 小程序 原生app个人端 原生app企业端 销售客服办公端)。 一网cms人才网系统安装说明 将cms.sql导入到数据库 修改 /cms/.env 中的数据库配置 ...
  • 阿里云原生多模数据库 Lindorm 针对工业物联网数据高并发写入,实时存取等特点,创新性地融合时序、索引、宽表等多模引擎能力,为存储、分析低价值密度、高通量、高实时性的工业物联网监控数据提供了高性价比的最优...
  • 在Kubernetes上开发,部署和保护... 可扩展:以Golang编写,遵循云原生实践并水平扩展 服务网格:无需了解任何知识即可获得服务网格的所有功能! 缩减为零:自动缩减http工作量,包括缩减为零 支持的数据库 :red_hear
  • 万岳网校源码采用原生语言开发,多端互通,集“教学、学习、管理、互动、营销”功能模块为一体。满足多种线上教学场景,支持大班课、小班课、公开课、双师教学等教学模式,助力教培机构迅速转型,同时也为院校提供了...
  • 文章目录什么是Prometheus?Prometheus的特点架构图基本原理服务过程本教程内容简介一、prometheus安装二、exporter安装使用三、grafana的...2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing F
  • Curve是网易数帆开源的新一代分布式存储系统,具有高性能、高可用、高可靠的特点,可作为多种存储场景的底层存储,包括块存储、对象存储、云原生数据库、EC等。 对于分布式块存储系统来说,IOPS是最重要的一个性能...
  • 开箱即用:O2OA还提供如考勤管理、日程管理、会议管理、脑图管理、便签、文件、企业社区、执行力管理等开箱即用的应用供企业选择 产品特点: 1. 代码全部开源,开发者可以下载源码进行任意,编译成自己的信息化...
  • 华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构,兼容Redis生态的云原生NoSQL数据库;它依靠共享存储池实现了强一致,支持持久化落盘存储,保证数据的安全可靠。其核心特点是:存算分离、强一致、低...
  • 二百零四

    2021-01-07 08:21:39
    华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构,兼容Redis生态的云原生NoSQL数据库;它依靠共享存储池实现了强一致,支持持久化落盘存储,保证数据的安全可靠。其核心特点是:存算分离、强一致、低...
  • 神州信息与华为打造的“银行关键业务联合解决方案”,充分发挥华为底层核心硬件与神州信息具有“分布式+微服务+云原生”特性的银行核心业务系统的效能,为金融机构提供一站式解决方案,助力金融机构在安全前提下进行...
  • 轻松上手Kubernetes教程

    2019-08-28 14:52:18
    现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产平台中的各种服务,例如,分批,工作流,以及传统数据库。 通过本教程的学习能让你...
  • 数据库采集模式可以作为通用的系统使用。 自带设备模拟工具,支持16个设备数据模拟,同时还带数据库数据模拟,以便在没有设备的时候测试数据。 支持所有windows操作系统+linux操作系统和其他操作系统。 3.2 效果图...
  • k8s部署SpringCloud项目的整体流程 第十五章 部署MySQL数据库 MySQL简介 MySQL特点 安装部署MySQL 在MySQL数据库导入数据 对MySQL数据库授权 第十六章 将SpringCLoud项目部署到k8s平台 SpringCloud的微服务电商框架...
  • 基础 2 Elasticsearch的功能、适用场景以及特点介绍 基础3 在windows上安装和启动Elasticseach 基础4 ElasticsSearch 集群健康检查,文档CRUD 基础5 ElasticsSearch 多种搜索方式 基础6 ElasticSearch 嵌套...
  • android开发秘籍--pdf

    热门讨论 2013-06-18 21:56:07
    第1章 Android概述  1.1 Android演化史  1.2 Android的两面性  1.3 运行Android的设备  1.3.1 HTC系列机型  1.3.2 摩托罗拉系列机型  1.3.3 三星系列机型  ...12.3 Android系统调试工具 
  • android开发秘籍

    2014-07-14 09:41:40
    android开发秘籍完整版清晰版 第1 章 android 概述 1 1.1 android 演化史 1 1.2 android 的两面性 2 1.3 运行android 的设备 2 1.3.1 htc 系列机型 4 1.3.2 摩托罗拉系列机型 ...12.3 android 系统调试工具 264

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

云原生数据库系统特点