如何在微服务之间共享使用数据库

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 本文讲的是如何在微服务之间共享使用数据库,【编者的话】如何在微服务之间共享使用数据库?本文介绍了一个该领域很容易犯错的架构问题,并且提出了解决方案和反思。
本文讲的是如何在微服务之间共享使用数据库 【编者的话】如何在微服务之间共享使用数据库?本文介绍了一个该领域很容易犯错的架构问题,并且提出了解决方案和反思。

几年前,我是一个团队的首席开发人员,该团队为客户端开发Java web应用程序。本文里我们称之为“项目A”。我们在客户现场构建web应用,还有其他团队在相关项目上共同工作。因为我们在项目早期沟通合作一直很愉快深入,所以会定期在团队间交换软件的架构思想。

一天,一个新项目(项目B)启动了。该项目会由另外一个团队完成。我认为在这个新项目中我们也能有所贡献,我们将项目A的记录用户,角色和权限的通用认证的数据库schema共享给了项目B。最终,这两个项目都是使用相同用户数据库的内部web应用程序。对了,还忘记说一点,这些应用程序没有中央的用户数据库 -- 每个新项目都是从头开始的。我们发现通过共享已有的基础架构和最佳实践,不仅仅可以节省开发时间,而且还能够节省很多客户支持的时间,因为他们不需要处理单独的用户目录了。

项目进展顺利,第二个项目使用单独的数据库用户账号访问我们的数据库表,这样两个项目可以隔离开从而避免混乱。

一段时间之后。。。

毕竟存储用户,角色和权限不是什么难事。大概一年后,我们计划开发项目A的新版本。我们都很兴奋,因为有机会可以将项目A中工作不太好的地方改进,同时保留好的功能。我们也改进了一些项目A里工作得还可以的部分 -- 其中,包括改进了存储用户,角色和权限的数据库表的schema。老实说,当时根本没有想到会影响项目B。

1.png


当然,很快项目B就崩溃了。我们的错误之处在于给了项目B直接访问数据库的权限。不仅仅就现在的标准而言,就算是根据以前的标准,正确的决定也是去创建一个单独的认证服务,来共享通用的API,而不是直接共享数据库访问。

还有更多的。。。

因此,我们犯了一个严重的架构错误,但是这里还有另外一个问题。具有讽刺意味的是,项目B使用的人不多。当时要求项目B的团队都没怎么使用项目B。这个项目就一直停滞着,可以使用,但一直没有正式启用。因此在两周之后才有人发现项目B不工作了。

2.png


在第一个可怜的用户报告出问题的时候,我们的开发人员已经到其他项目上工作去了。在做问题定位分析的时候,我们检查了错误日志,尝试找出是什么问题。现在来看,我们当时没有规划精细的监控方案,能够自动监测到应用程序的问题,这也是失误决策的一部分。

3.png


虽然这次事故听上去很古老,但是我真的希望大家能够从中学习到经验教训。一定要确保通过稳定的API来访问数据库,从而将简单的数据库转变为服务,也使得共享使用更为容易。并且确保正确监控应用程序和服务。围绕API构建的环境会长期保持基础架构的动态性。监控则能确保能够有效控制日益增长的复杂度。

我期望这篇文章的问题能够在你在Eclipse IDE里打开File菜单,选择Export as .war来开启部署之旅的时候就对你有所启示。

原文链接:How to distribute a database among microservices(翻译:崔婧雯 校对:李颖杰)  
===========================
译者介绍
崔婧雯,现就职于IBM,高级软件工程师,负责IBM WebSphere业务流程管理软件的系统测试工作。曾就职于VMware从事桌面虚拟化产品的质量保证工作。对虚拟化,中间件技术,业务流程管理有浓厚的兴趣。

原文发布时间为:2015-10-26
本文作者:lingxizhixia
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:如何在微服务之间共享使用数据库
目录
相关文章
|
5天前
|
存储 缓存 Oracle
崖山数据库YashanDB的共享集群机制初探
YashanDB共享集群是崖山数据库系统的核心特性,支持单库多实例并发读写,确保强一致性与高可用性。基于Shared-Disk架构和Cohesive Memory技术,实现数据页协同访问及资源控制。其核心组件包括YCK、YCS和YFS,提供金融级RPO=0、RTO<10秒的高可用能力。通过自研“七种武器”(如页内锁、去中心化事务管理等),优化性能并解决读写冲突。相比Oracle RAC,YashanDB在TPC-C测试中性能高出30%,适用于金融、电信等关键领域,推动国产化替代进程。
崖山数据库YashanDB的共享集群机制初探
|
15天前
|
存储 缓存 API
自研一款共享集群数据库,有多难?
共享集群数据库管理系统是一种单库多实例的多活数据库管理系统,用户连接任意实例都可以访问同一个数据库,具备透明多写、高可用、高性能等特性。共享集群技术因其开发难度高,一直被国外垄断,也被称为数据库领域的“塔尖”技术。
|
1天前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令1——数据库操作
本节介绍了 MongoDB 中数据库的选择、创建与删除操作。使用 `use 数据库名称` 可选择或创建数据库,若数据库不存在则自动创建。通过 `show dbs` 或 `show databases` 查看所有可访问的数据库,用 `db` 命令查看当前数据库。注意,集合仅在插入数据后才会真正创建。数据库命名需遵循 UTF-8 格式,避免特殊字符,长度不超过 64 字节,且部分名称如 `admin`、`local` 和 `config` 为系统保留。删除数据库可通过 `db.dropDatabase()` 实现,主要用于移除已持久化的数据库。
14 0
|
1月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB开源数据库进阶课1 搭建共享存储集群
在笔记本上构建PolarDB RAC环境,本文介绍了一种适用于Windows、macOS和Linux的方法:通过将宿主机上的文件模拟为块设备,并在多个Docker容器中使用loop设备共享该文件。此方法解决了macOS不支持直接挂载块设备的问题。
37 2
|
1月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课3 共享存储在线扩容
本文继续探讨穷鬼玩PolarDB RAC一写多读集群系列,介绍如何在线扩容共享存储。实验环境依赖《在Docker容器中用loop设备模拟共享存储》搭建。主要步骤包括:1) 扩容虚拟磁盘;2) 刷新loop设备容量;3) 使用PFS工具进行文件系统扩容;4) 更新数据库实例以识别新空间。通过这些步骤,成功将共享存储从20GB扩容至30GB,并确保所有节点都能使用新的存储空间。
32 1
|
6月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
6月前
|
设计模式 缓存 关系型数据库
探索微服务架构中的数据库设计挑战
微服务架构因其模块化和高扩展性被广泛应用于现代软件开发。然而,这种架构模式也带来了数据库设计上的独特挑战。本文探讨了在微服务架构中实现数据库设计时面临的问题,如数据一致性、服务间的数据共享和分布式事务处理。通过分析实际案例和提出解决方案,旨在为开发人员提供有效的数据库设计策略,以应对微服务架构下的复杂性。
|
6月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
4月前
|
存储 数据库
快速搭建南大通用GBase 8s数据库SSC共享存储集群
本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。
|
3月前
|
存储 消息中间件 SQL
微服务改造血泪史:数据库拆分踩过的那些坑!
本文复盘了传统项目改造成微服务架构时,数据库拆分过程中遇到的问题。主要问题包括:1. 数据库拆分过细,导致跨服务调用频繁,破坏服务独立性;2. 数据一致性难以保证,分布式事务管理复杂;3. 跨服务查询影响性能,复杂查询难以实现。初次改造时应避免过度拆分,逐步演进架构。
73 0

热门文章

最新文章