微服务真的不挑数据库吗?如何选择?

微服务(Microservices)[翻译] 微服务架构”一词在过去几年中如雨后春笋般涌现,用来描述将软件应用程序设计为可独立部署的服务套件的特定方式。虽然这种架构风格没有精确的定义,但围绕业务能力、自动化部署、端点智能以及语言和数据的分散控制,围绕组织存在某些共同特征。2014 年 3 月 25 日詹姆斯·刘易斯James Lewis 是 Thoughtworks 的首席顾问,也是技术咨询委员会的成员。James 对从小型协作服务构建应用程序的兴趣源于大规模集成企业系统的背景。他使用微服务构建了许多系统,并且多年来一直是断发展的社区的积极参与者。 阅读详情

微服务架构的应用具有很好的扩展性,因此似乎微服务并不挑数据库,在微服务中使用哪种数据库问题都不是很大。事实真的如此吗?也许对于一些研发能力很强的队伍来说,为微服务选择数据库是很容易的事情,因为选择的数据库无论存在哪方面的缺陷,他们都有办法通过应用方面的优化去解决它。而对于一些普通的研发队伍来说,有时候还真的搞不定。

很多企业刚刚转向微服务架构的时候也是交了大量的学费的,很多企业的微服务架构转型是:“开发一时爽,运维两眼泪”。实际上很多设计和开发的缺陷最后都是让运维来想办法填坑的。与传统的集中架构不同,微服务的坑,运维填起来难度大多了。如果微服务应用将一个大数据库拆分成多个小型的领域数据库,那么一条重要的原则就是要永远确保这些数据库是小型数据库,其数据量的增长是缓慢的,随着每年业务的增长率稍微增长一点点的,历史数据一定是能够及时归档的。这样的小型数据库才会在长期运行的时间里保证较好的性能,不会给运维人员带来太大的负担。

从另外一个角度来讲,微服务的数据应该存储到适当的数据库中,而不是在没有掌握数据存取特点的情况下,随意选择一个数据库。目前数据库可选择的种类太多了,以阿里云等云厂商为例,他们就已经为微服务开发者提供了眼花缭乱的选项。

不同的应用场景选择不同的数据库产品,才能让项目今后的发展路径更为顺畅。这么多的数据库产品,我们该如何来选择呢?虽然微应用已经弱化了数据库的很多特性,大大减少了跨服务的数据融合计算,不过针对不同类型的微服务,我们仍然需要十分谨慎的来选择数据库产品。

我们该如何为自己的微服务选择适当的数据库产品呢?这就需要从几个方面去考虑了。

首先要考虑的是你的微服务中对数据的访问方式。选择数据库的最重要的因素是你的查询的模式是什么样的。如果你只需要存储某些键值,那么KV数据库可能是比较好的选择,比如你可以选择Redis;如果你的应用基本上都是基于主键查询,附加一些主键关联的其他字段,那么一些宽列数据库可能很适合你的微服务,比如Cassandra;如果你的应用主要是访问一些单表中的数据,不过检索条件可能会比较丰富,模式不是十分固定,那么使用文档数据库可能比较好,MongoDB、CouchDB等可能比较对你的胃口;如果你的应用经常有一些多表关联的关系型访问,那么关系型数据库,比如PostgreSQL、MySQLl等可能更适合;如果你的应用主要是根据主键做模糊查询,全文检索,那么ES可能会优于其他数据库。

如果有一个场景有多种数据库适合,那么可以根据数据一致性等要求来做出进一步的筛选,比如你的场景中MySQL和MongoDB都比较适合,那么如果在要求强一致性的情况下,倾向于选择MySQL,否则可以考虑MongoDB。

实际上,在你的应用系统中,不同的微服务可以选择不同类型的数据库,从而最大限度的优化数据访问。比如你的有很多视频要存储,那么选择S3对象存储来存储视频肯定比把视频存储到关系型数据库的LOB字段中要好得多,在关系型数据库中只需要保存对象的ID就可以了。

在一个应用系统中使用多种数据库也不是多多益善,数据库种类太多会导致系统架构变得臃肿,运维的成本也会大大增加。因此适当的选择几种数据库才是较好的设计方案。这种情况下,一些多模数据库就比较具有优势了。比如说在系统中以RDBMS为主,稍微有一些JSON数据存储、还有少量应用会使用一些时序数据和一些GIS数据,那么选择PostgreSQL就可以满足这些综合要求。

实际上为微服务选择数据库产品不仅仅要考虑这些因素,开发团队的经验、运维能力、成本等因素也是要考虑的。因为微服务架构的特点,我们通过领域建模会将一个大型系统的数据拆分为多个不同的子领域,因此高并发支持能力,性能,大数据量下的复杂SQL性能等方面需要考虑的因素相对少一些。不过对于一些稍微极端一些的应用场景,可能我们需要考虑的会更为复杂一些。

另外一点就是聚合计算的问题,任何应用都有聚合计算的问题,特别是一些实时聚合计算的需求,我们也必须满足。因此在领域建模将数据拆分之后我们依然需要将这些数据汇聚起来进行计算。虽然我们也可以使用ShardingSphere这样的数据库网关来实现一定的聚合计算,不过大数据量的分布式环境的聚合计算在性能上往往会遇到一些问题。解决此类问题的方法不外乎两个,一个是在微服务层面,对明细数据进行准实时汇总,这样聚合计算不需要针对明细数据进行。另外一种方法就是使用ODS或者数据中台作为聚合计算的平台,从而减轻微服务数据层的负担。

原本一个大型数据库拆分为很多个小库后会不会给运维带来压力呢?答案是肯定的,因此微服务的架构师应该对这些小型数据库做一个很好的架构设计,包括高可用、灾备,数据归档,数据自动清理,这些工作运维人员可以参与设计,但是必须在应用中实现自动化的管理,否则这一堆堆的小库上来,运维人员平时要是去监控巡检,平时也没啥事,还浪费时间,一旦出了问题,还不太好处置。

如果你的应用是托管在公有云上的,并且你的每个库的容量、负载都可以比较好的控制,那么采购公有云的RDS是比较省事的做法,不过公有云的特点是入门很便宜,一旦你的库变大了,服务要升级了,那么价钱绝对不是简单的乘以某个倍数的问题。公有云上,大的主机和数据库服务价格会有一个跳跃式的提升,应用架构师要十分注意这一点。私有云对费用相对没有那么敏感,使用私有云的RDS服务可以大大的降低运维的压力。在这方面,微服务的架构师一定要先和云平台部门做好沟通。

如果你不希望管理碎片化的小型数据库(无论是RDS还是运行在容器中的数据库),那么带有多租户、多模存储能力的分布式数据库也许是你喜欢的选择。运维一个大型的云数据库可能比运维几十个小数据库更合你的胃口。这种选择也是合适的,只要和你的企业的整体IT政策与IT基础架构相吻合,那也是不错的选择

SpringCloud溯源——从单体架构到微服务Microservices架构 & 分布式微服务 & 为啥要用微服务_springcloud单体项目转微服务 1.分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般是孤立的,而是互通的。2.这些连通的节点上部署了我们的节点,并且相互的操作会有协同。分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已,而实际上这些服务是通过背后的众多服务器组成的一个分布式系统,因此分布式系统看起来像是一个超级计算机一样。 阅读详情

相关推荐

真的需要微服务吗?

感兴趣的朋友可以关注"猿学堂社区",系统化技术内容分享平台。或加入“猿学堂社区”微信交流群 1、前述 自互联网尤其是云平台爆发以来,软硬件基础设施的服务模式断更新,从早期的IaaS、PaaS、SaaS三大件,到后来的FaaS、BaaS、DaaS,一切以aaS格式表述的新词从各个服务公司的口中提出来,成为技术服务模式的前沿和潮流。所有平台式技术服务的输出,都会以同形式降低原有的软件开发及运维...

边城白衣的博客 1495

数据库,我们该如何选型?

更多内容关注微信公众号:fullstack888影响数据库选择的因素数据量:是否海量数据,单表数据量太大会考验数据库的性能数据结构:结构化 (每条记录的结构都一样) 还是非结构化的 (同...

qianshanding0708的博客 3319

MongoDB vs MySQL:项目选择哪一个数据库系统?

比较MongoDB与MySQL将帮助您了解这两个数据库之间的差异,它们的优缺点,以及哪个更好用于什么目的。简而言之,它将帮助您为您的项目选择正确的数据库

WPHunter的编程技术资料库! 2475

微服务架构案例(03):数据库选型简介,业务数据规划设计

数据库设计是微服务设计的一个核心点,基本原则是每个微服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。在微服务架构中,数据库设计首先要满足用户的需求,便于维护和扩展,具有很好的读写性能,还可以帮助开发人员理解和管理系统。ENDhttpshttps。...

【积累】,是一个长期持续的过程。 1477

微服务架构系列主题:如何为微服务选择数据库

转自:csdn研发技术 你的微服务架构需要多种数据模型。你是应该选择混合持久化呢还是多模型数据库? 在过去的十年,大规模的分布式系统呈现爆炸式增长。这一趋势促使在数据库领域产生了一股巨大的创造力,这在软件业的历史上无疑是没有先例的。其结果是诞生了一个健康和充满竞争的数据库市场,我们可以因此在大量的平台中各取所需。但是我们应该如何抉择? 在本文中,我们将探讨如何为根据应用程序去选择核实的数据库模式。(是的,可以有一个以上的选择!),我们也会看看对数据模式的选择可以帮助确定在数据层中将选用哪些技术。 云

Larry的博客 598

微服务系统设计篇(二) -- 如何做数据库选型

微服务设计中,数据库的选型是可缺少的一环,后台的核心是与数据打交道,在同的业务场景选择数据库一样, 好的数据库选型能够解决业务的性能瓶颈,如果数据库选择恰当,会使得服务的性能上去,因此我们需要对一些常用的数据库有一些了解,这样才能因地制宜,发挥系统最好的性能。 常见的数据库分类: 数据库类型 数据库名称 关系型数据库 Mysql,Oracle,postgresql 内存数据库 Redis,Memcache 时序数据库 TSDB 文档型数据库 MongoDB 分布

f905699146的博客 884

微服务(Microservices)—Martin Flower

微服务(Microservices)—Martin Flower 原文:Martin Flower 于 2014 年 3 月 25 日写的《Microservices》。 译文:秦疆のJava世界 微服务微服务架构(Microservice Architecture)”一词在过去几年里广泛的传播,它用于描述一种设计应用程序的特别方式,作为一套独立可部署的服务。目前,这种架构方式还没有准确的...

luoru的博客 4954

微服务(Microservices)——Martin Flower【翻译】

微服务微服务架构(Microservice Architecture)”一词在过去几年里广泛的传播,它用于描述一种设计应用程序的特别方式,作为一套独立可部署的服务。目前,这种架构方式还没有准确的定义,但是在围绕业务能力的组织、自动部署(automated deployment)、端智能(intelligence in the endpoints)、语言和数据的分散控制,却有着某种共同的特征。 ...

Jason王祖龙 6323

如何为微服务选择数据库

原文:How to choose a database for your microservices 作者:Jeff Carpenter, InfoWorld 译者:Jackyrong 你的微服务架构需要多种数据模型。你是应该选择混合持久化呢还是多模型数据库? 在过去的十年,大规模的分布式系统呈现爆炸式增长。这一趋势促使在数据库领域产生了一股巨大的创造力,这在软件业的历史上无疑是没有先

CSDN研发技术 2万+

Microservices Event Sourcing数据库设计:多数据库类型在微服务中的最佳实践

Microservices Event Sourcing是一个基于微服务架构的在线购物网站,采用Spring Boot、Spring Cloud等技术栈构建,通过事件溯源(Event Sourcing)实现最终一致性。本文将深入探讨该项目如何根据微服务的特性选择合适的数据库类型,以及多数据库架构在实际应用中的设计策略与最佳实践。 ## 微服务数据库设计的核心原则 🎯 在微服务架构中,数据

gitblog_00879的博客 559

推荐文章:探索微服务数据库的未来 —— Moleculer DB

推荐文章:探索微服务数据库的未来 —— Moleculer DB 在当今快速发展的技术领域,数据管理始终是构建可靠应用的核心。针对这一战,我们发现了一个强大而灵活的解决方案:Moleculer DB。作为Moleculer框架的官方数据库插件集合,Moleculer DB旨在简化微服务架构中的数据存储和操作,让开发变得既高效又优雅。 项目介绍 Moleculer DB是一个为Moleculer框...

gitblog_01148的博客 888

GoogleCloudPlatform/microservices-demo:微服务通信模式对比分析

在现代微服务架构中,通信模式的选择直接影响系统的性能、可靠性和可维护性。GoogleCloudPlatform/microservices-demo项目作为一个典型的云原生微服务示例,展示了多种通信模式的实践应用。本文将深入分析该项目中采用的通信模式,并通过对比帮助开发者理解同场景下的最佳选择。 ## 项目架构概览 Online Boutique电商应用包含11个微服务,采用多语言技术栈: ...

gitblog_00872的博客 1007

如何用 claude-skills Microservices Architect 设计微服务架构:从拆分到落地的完整指南

**claude-skills** 是面向全栈开发者的 Claude Code 技能库,其中内置的 **Microservices Architect(微服务架构师)** 技能,能帮你把庞大的单体应用拆分成边界清晰、通信合理、具备弹性的微服务架构。它内置了领域驱动设计(DDD)、Saga 模式、熔断器、事件溯源、CQRS 等分布式系统最佳实践,相当于给 AI 装上了一位资深架构师的大脑。 [![

gitblog_00947的博客 977

微服务(Microservices)。

微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用同的语言开发,使用同的数据存储技术。

孤芳不自赏 3360

微服务(Microservices)

本文内容 微服务 微服务风格的特性 组件化(Componentization )与服务(Services) 围绕业务功能的组织 产品是项目 强化终端及弱化通道 分散治理 分散数据管理 基础设施自动化 容错性设计 设计改进 微服务是未来吗 其它 微服务系统多大 微服务与SOA 多语言多选择 实践标准和强制标准 让做对事更容易 断路器circuit breaker和产品中现有的代码 同步是有害的 参考资料 微服务 “微...

Mrs_haining的博客 711

微服务(Microservices)——Martin Flower

微服务(Microservices)——Martin Flower 原文是 Martin Flower 于 2014 年 3 月 25 日写的《Microservices》。 迁移到:http://www.bdata-cap.com/newsinfo/1713874.html 本文内容 微服务 微服务风格的特性 组件化(Componentization )与服务(Services...

重露成涓滴 897
上一篇: 查日志只有ES好使?那是你没这样用Clickhouse……
下一篇: Java核心知识体系2:注解机制详解
程序员职业指南
博客等级 码龄4年 2103粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值