传统的架构方法是在服务之间共享一个数据库,而微服务却与之相反,每个微服务都拥有独立、自主、专门的数据存储。微服务数据存储是基础设施构建的重点,因为它提供服务解耦、数据存储自主性、小型化开发、测试设置等特性,有助于应用程序更快地交付或更新。选择理想的数据存储的第一步是确定微服务数据的性质,可以根据数据的特点将数据大致做如下划分。
为了优化微服务以获得性能和数据持久性要求,一定要确认所选的数据库为数据类型提供了适当的存储技术。我们可以对微服务及其各自的数据存储进行分类,如下表所示。
下面是四类常见的NoSQL方案。
下面来介绍各种高性能NoSQL方案的典型特征和应用场景。
K-V存储指按照键值(Key-Value)进行的数据存储,其中Key是数据的标识,和关系数据库中的主键含义一样;Value是具体的数据。
Redis是K-V存储的典型代表,它是一款开源(基于BSD许可)的高性能K-V缓存和存储系统。Redis的Value是具体的数据结构,包括string、hash、list、set、sorted set、bitmap和hyperloglog,所以常被称为数据结构服务器。
K-V存储适合作为分布式内存缓存的解决方案。在微服务架构中,微服务共享的一些全局数据都保存在K-V存储中,例如,用户信息(如会话)、分布式锁、配置文件、参数、购物车等。这些信息一般都和ID挂钩。通过键值操作就可以获得共享的Value,Redis提供的主从复制模式(Replication-Sentinel模式)和集群模式(Redis-Cluster模式)可以很好地提供多数据中心、多向复制等高度可用性和高度扩展性。Redis高性能的数据存储总结下来有下面几个原因。
为了解决关系数据库Schema带来的问题,文档数据库应运而生。MongoDB作为文档数据库的典型代表,是专为可扩展性、高性能和高可用性设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。MongoDB的本地复制和自动故障转移功能使应用程序具有企业级的可靠性和操作灵活性。
文档数据库最大的特点就是No-Schema(不使用表结构)存储和可读取任意数据。目前绝大部分文档数据库存储的数据格式是JSON,因为JSON数据是自描述的,读取一个JSON中不存在的字段也不会导致SQL那样的语法错误。文档数据库的No-Schema特性,为业务开发带来了几个明显的优势。
顾名思义,列式数据库就是按照列来存储数据的数据库,与之对应的传统关系数据库被称为“行式数据库”,关系数据库就是按照行来存储数据的。
HBase是一个开源的非关系分布式数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java。它是Apache软件基金会Hadoop项目的一部分,运行于HDFS文件系统上,为Hadoop提供类似BigTable规模的服务。因此,它可以存储海量稀疏的数据。HBase基于LSM树实现,它将对数据的修改增量保持在内存中,达到指定的大小后将这些修改操作批量写入磁盘。在极端情况下,写性能比MySQL高一个数量级,读性能低一个数量级,所以列式数据库的适用场景,以HBase为例说明如下:
传统的关系数据库通过索引来达到快速查询的目的,但是在全文搜索的业务场景下,索引也无能为力,主要体现在:全文搜索的条件可以随意排列组合,如果通过索引来满足,则索引的数量会非常多。
全文搜索的模糊匹配方式,索引无法满足,只能用like查询,而like查询是整表扫描的,效率非常低。全文搜索引擎(又称为倒排索引)的基本原理是建立单词到文档的索引。而正排索引的基本原理是建立文档到单词的索引。Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文的搜索引擎。当然Elasticsearch并不像Apache Lucene那么简单,它不仅具有全文搜索功能,还具有下列特性和能力:
下表是一份简易的Elasticsearch和关系数据库的术语对照表。
一个Elasticsearch集群可以包含多个索引(数据库),也就是说可以包含很多类型。这些类型中包含了很多的文档(行),然后每个文档中又都包含了很多字段(列)。Elasticsearch的交互可以使用Java Native API,也可以使用HTTP的Restful API。Elasticsearch通过Lucene的倒排索引技术可以实现比关系数据库更快的过滤。
Elasticsearch可以为任何形式的数据提供出色的搜索和分析,通过Kibana提供交互式控制面板。我们经常使用Elasticsearch来调试日志用例。
来源:
https://www.toutiao.com/article/7097471371168662048/?log_from=3230af473fd71_1654825830746
“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com
来都来了,走啥走,留个言呗~
IT大咖说 | 关于版权
由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!
感谢您对IT大咖说的热心支持!