微服务数据架构微服务架构强调技术的多样性,选择最合适的技术来解决实际的业务问题。这个原理同样适用于微服务数据存储领域。目前,随着数据的海量增长,数据类型的多样化,以及对更快的数据访问性能的需求,关系数据库越来越不能满足用户的需求,于是NoSQL数据库应运而生。
在这一章中,我们首先介绍了数据分类、适合不同数据类型的不同数据存储技术,以及NoSQL存储和关系数据库的主要区别和特点。
在微服务架构下,一致性强的事务管理机制不一定是适合数据一致性处理的解决方案。此前单一架构下强一致性的事务模式,可能会带来微服务架构中一系列的性能损失和数据一致性问题与挑战。微服务架构有许多不同的设计考虑。它强调去中心化的数据治理,更重要的是每个微服务都有自己独立的数据存储。不同的服务在数据共享时需要采取一定的策略和补偿方式,以保证数据的一致性。通过对TCC、Saga等模式的介绍,可以知道当前微服务架构数据的最终一致性解决方案。
数据分类和存储特点我们在实现“微服务”架构时,都希望每个服务能够管理自己的数据,这就是数据管理的去中心化。此外,微服务架构风格的一个关键好处是持久性的封装。我们可以根据每个服务的不同需求选择不同的持久化技术。根据每种数据类型的特点选择数据存储的方法也称为混合持久化技术。
关系数据库概述经过几十年的发展,关系数据库已经非常成熟,其强大的SQL功能和ACID特性使其广泛应用于各种系统中。在微服务架构中,对于事务型业务类型和复杂的数据查询存储场景,仍然推荐采用关系数据库作为数据持久层解决方案。下图是应用程序中不同模块访问数据库的典型模型。
核心概念
数据库是基于关系模型的数据库。一般来说,这个数据库是由几个表组成的,这些表之间有一定的关系。所谓RDBMS(关系数据库管理系统)是基于关系模型的数据库,数据库中的数据是用集合代数等数学概念和方法处理的。关系数据库的核心元素和术语如下。
记录:数据线。一行记录是一组相关的数据,例如用户订阅的一段数据。
字段:数据列,包含相同数据的数据元素的一列,如邮政编码的数据。
数据表:数据行的集合,表是数据的矩阵。数据库中的表格看起来像一个简单的电子表格。
数据库:数据表的集合。数据库是相关表的集合。
主键:一个数据表只能包含一个主键,可以用来查询数据。
外键:外键用于关联两个表。
组合键:组合键(Composite key)以多个列作为索引键,一般用于复合索引。
索引:使用索引快速访问数据库表中的特定信息。索引是对数据库表中的一列或多列值进行排序的结构,类似于图书目录。注意:索引查找使用B号。
关系数据库管理系统的主要产品如下。
Oracle:用于之前的大型项目,如银行、电信等。
MySQL:网络时代最广泛使用的关系数据库。
MySQL服务器:用于微软的项目。
SQLite:轻量级数据库,主要用于移动平台。
SQL
SQL(结构化查询语言)是一种结构化查询语言,是一种用来操作RDBMS的数据库语言。目前,所有关系数据库都支持SQL进行操作。也就是说,所有的关系数据库如Oracle、MySQL、SQLite都可以用SQL操作。
MySQL数据库
MySQL是最流行的关系数据库管理系统。MySQL是Web应用中最好的RDBMS应用软件之一。MySQL由瑞典MySQL AB公司开发,目前属于甲骨文公司。将MySQL数据保存在不同的表中,而不是将所有数据保存在一个大型仓库中,这提高了速度和灵活性。
关系数据库的优势
易于理解:二维表格结构易于理解,便于根据现实世界建模。与网络和层次等其他模型相比,关系模型更容易理解。
支持SQL:大部分程序员都熟悉使用SQL操作数据,SQL支持JOIN等复杂查询。
数据一致性:关系数据库支持ACID特性,以及数据库层的事务原语支持。适用于OLTP事务型业务数据类型,保持数据一致性是集中式数据库架构的最大优势。
易于维护:丰富的完整性(指实体完整性、参照完整性和用户自定义完整性)大大降低了数据冗余和数据不一致的概率。
数据库支持按需配置、灵活性和可扩展性,双机热备保证服务高可用,多数据备份使业务高可靠。提供高性能的物理设备,保证数据库的性能。
关系数据库的缺点
>● 关系数据库存储的是行记录,无法存储数据结构,使用关系数据库存储只能将列表拆成多行,然后查询出来后组装,无法直接存储列表。
● 关系数据库的Schema(数据或模式对象的逻辑结构的集合)扩展很不方便。关系数据库的表结构Schema是强约束,操作不存在的列时会报错,业务变化时扩充列也比较麻烦,需要执行 DDL ( Data Definition Language , 如 CREATE 、 ALTER 、DROP等)语句修改,而且修改时可能会长时间锁表。
● 如果对一些有大量数据的表进行统计之类的运算,关系数据库的I/O会很高,因为即使只针对其中某一列进行运算,关系数据库也会将整行数据从存储设备读入内存。
● 关系数据库的全文搜索功能比较弱,关系数据库的全文搜索只能使用like进行整表扫描匹配,性能非常低,在互联网这种搜索复杂的场景下无法满足业务要求。关系数据库与对象持久化存在阻抗不匹配问题,所以在面向对象系统中,需要使用第三方提供的数据转换工具,类似MyBatis框架进行数据转换,造成了开发效率和性能的降低。
从数据分类和数据存储特点的角度来看,针对关系数据库的上述问题,可以通过不同的NoSQL解决方案进行优化解决,这些方案与关系数据库相比,在很多微服务应用场景下会有更好的表现。
同时,在微服务场景下,我们的应用作为微服务单独的单元构建起来,微服务不应该追求与持久化存储相匹配,应该摒弃传统的基于数据库脚本驱动的开发模式,利用后端数据层的优势和功能来满足应用程序的需求。所以,我们有必要根据微服务后端连接的数据,选择更加合适的存储技术。
本文给大家讲解的内容是微服务数据架构,数据分类及存储特性,关系数据库概述下篇文章给大家讲解的内容是微服务数据架构,数据分类及存储特性, NoSQL数据存储觉得文章不错的朋友可以转发此文关注小编;感谢大家的支持!