var _hmt = _hmt || []; (function() {   var hm = document.createElement("script");   hm.src = "https://hm.baidu.com/hm.js?8c9c5a8618dc4aea3be27b32962e5871";   var s = document.getElementsByTagName("script")[0];    s.parentNode.insertBefore(hm, s); })();
400 050 6600
数据分析师

手机号

验证码

30天自动登录

数据库和微服务:技术和方法入门

来源:CPDA数据分析师网 / 作者:数据君 / 时间:2020-09-02

尽管没有药可以解决服务之间共享数据的问题,但是了解每个数据库的特性将帮助您更加自信地做出这些决策

在微服务环境中评估数据库与旧的单片应用程序相比,微服务具有不同的要求并带来不同的挑战,因此了解数据库如何在考虑此上下文的情况下工作非常重要。这是您应该考虑的因素:

可部署性:  使用像DockerKubernetes这样的DevOps工具来部署和扩展数据库有多么简单?

 

性能:  如何轻松控制数据库的性能?

 

访问模式:  数据库支持哪些查询?

 

一致性:  数据库是否提供其数据的一致视图,还是允许出现异常?

 

可用性:  数据库如何处理计算机故障?

 

传统SQL数据库

即使到2000年代初,传统的关系数据库仍在该领域占据主导地位。如今,它们在很大程度上已被更具可扩展性的技术所取代。

 

例子:  MySQL  PostgreSQL

 

可部署性:这些数据库易于部署,但是由于它们仅在单台计算机上运行,因此您只能通过购买更新,更大的计算机来扩展它们。

 

响应时间:由于必须在单台计算机上运行,因此响应时间无法轻易提高,这对于地理上相距遥远的用户而言很慢。为了提高吞吐量,您必须获得全新的硬件。

 

访问模式:使用关系数据模型可以为大多数访问模式(包括跨表的复杂联接)提供良好的性能。

 

一致性:传统的RDBMS仅在一台计算机上运行,因此它们很容易提供强大的一致性。

 

可用性:这些数据库代表应用程序中的单点故障;如果出现故障,所有依赖于它的服务也会下降。

 

综上所述

对于需要优先考虑一致性而不是可用性的小型但非关键服务,传统的SQL数据库就足够了。

 

NoSQL

NoSQL数据库是专门为可伸缩应用程序而构建的,使其非常适合于许多微服务。但是,由于它们的访问模式有限且允许数据库异常,因此它们并不总是选择。

 

示例:  MongoDB  Cassandra

 

可部署性:站起来和扩展NoSQL集群很容易,并且可以通过许多不同的方式来完成,例如,每个服务一个集群,或者一个大型集群,其中每个服务都按名称空间划分。它们还可以与大多数基础结构工具一起很好地工作。

 

访问模式:NoSQL数据库一次只需要访问一个文档(例如可能包含其内容和注释的社交媒体帖子)时,它们的工作效果。对于复杂的联接,它们不是一个很好的选择。

 

响应时间:因为您可以轻松扩展NoSQL,所以可以确保将它放置在靠近用户的地方,并具有足够的硬件来处理您所有服务的请求。但是,如果包含文档的节点发生故障或距离很远,响应时间仍可能很慢。

 

可用性:NoSQL优先考虑可用性,它只需要一个活动的节点即可。尽管任何单独的数据都可能不可用,但整个服务将保持运行状态。这可以提供令人难以置信的正常运行时间。

 

一致性:NoSQL有一个很自觉的权衡:放弃可用性的一致性。这意味着大多数NoSQL数据库都提供终一致性,但这在某种程度上具有误导性,因为这听起来好像值终将收敛于一致状态。不幸的是,由于许多节点都可以接受写操作,所以情况不一定如此。

 

综上所述

在需要正常运行时间时选择NoSQL数据库,但是数据不是关键任务,可以处理潜在的异常情况。

 

数据库即服务(DBaaS

在过去的几年中,基础架构公司已将其服务扩展到包括数据库。明显的优势是,其他人可以为您接管基础架构。这也意味着您在调整服务以完全按需工作时会放弃一些灵活性。

 

示例:  Amazon DynamoDB  Google Cloud SQL

 

可部署性:在这种情况下,您需要付费来处理基础结构,这使事情大大简化了。

 

但是,这样做的缺点是,您只能使用供应商提供的服务(可能不在每个地区),并且会限制您的灵活性。

 

访问模式:这取决于基础数据库技术。大多数服务都映射到SQLNoSQL范式,因此上面对访问模式的描述仍然适用。

 

响应时间:这又取决于基础技术,但是还需要您认真考虑服务的地理位置。例如,如果该服务使用主动-被动复制(即,它要求所有写入都转到单个主节点),那么远离该节点的用户的写入将很慢。

 

可用性:从历史上看,DBaaS平台提供了极大的正常运行时间,因为确保可用服务是该平台的重中之重。

 

一致性:这又取决于底层技术。

 

综上所述

如果您没有专业知识或没有时间来运行服务的数据库,那么DBaaS是理想的选择。

 

SQL

示例: CockroachDB  Google Cloud Spanner

 

可部署性:NewSQL数据库是按比例构建的,因此易于部署和添加容量。它们还与Kubernetes等编排工具配合使用。

 

请注意,Spanner是一个DBaaS平台,因此在此类别中有点混合。

 

访问模式:因为它们使用关系模式,所以NewSQL提供了与传统RDBMS系统类似的访问模式-对于许多查询类型而言既灵活又强大。

 

响应时间:由于NewSQL数据库是为广泛分布而构建的,因此没有内在的保证可以将数据本地化在服务附近一个区域中的查询可能需要从另一个区域中获取数据。但是,某些NewSQL数据库提供了有助于缓解这些问题的功能。

 

可用性:NewSQL数据库是高度可用的,并且只要大多数数据可用,它将继续处理请求。这不像NoSQL那样健壮,后者仅需要少的节点就可以联机,但是在一致性方面有意识地进行了权衡。

 

一致性:这是NewSQL数据库的主要优势。它们既可广泛且易于部署(类似于NoSQL),又可提供强大的一致性(如传统的RDBMS)。这种一致性确保您的数据中没有异常,这在微服务环境中非常重要。

 

综上所述

当您拥有需要扩展的关键任务服务(例如客户的财务交易)时,NewSQL数据库是不错的选择。

 

微服务是复杂的环境,具有许多相互连接的移动部件。关于每种数据库的运行方式有更多了解,我们希望您能够为自己的微服务做出正确的选择。

 

Prev article

选择适合您的微服务的数据库

Next article

数据库索引如何真正起作用

数据分析师

报名咨询

数据分析师

报名缴费

数据分析师

客服中心

数据分析师

课程服务

数据分析师

认证服务