热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

一个真实的案例,一些真实存在的数据库选型误区

原文:[一个真实的案例,一些真实存在的数据库选型误区](https:mp.weixin.qq.comsm7wJdS5PcZXKn

转载原文链接:一个真实的案例,一些真实存在的数据库选型误区

微信图片_20201209110853.jpg

最近,老鱼听说了一个案例!

某银行计划部署分布式数据库来替换业务核心的集中式数据库。先期计划在某一核心业务进行试点,然后根据试点情况,再决定是否继续大规模实施。

试点的核心业务使用的是“O”记数据库,一个3节点RAC ,3台小型机, 2台用于业务系统,1台放在同城灾备中心作为远程数据备份。替换后,数据库为某分布式数据库,使用多达600多台的X86服务器。

目前,该试点业务已经部署完成,峰值性能(TPS)较替换前提高50%,平均性能(TPS)提升33.3%,平均事务响应时间未知。

最终,该银行决定不再继续实施,而是维持现状。

到这里,相信大家应该也能看出点什么。

3节点RAC能做的事,为什么需要如此多的X86?

没错,即使不同银行的核心业务复杂度有所差异,即便替换后有50%的性能提升,但是!但是!但是!重要的事情说3遍,反正,在老鱼询问了多位专家后,大家观点是完全一致的,都不认为需要如此之多的机器,这是在烧钱!即便不差钱,也应该考虑给开发和运维团队在未来工作中带来剧增的额外工作量及复杂度。

如果是由于分布式事务导致网络延迟,因此需要更多的服务器,只能说明这个分布式数据库架构设计差强人意。平均事务响应时间未知,这是因为在应用层实现了?那以上网络延迟又被推翻。

这个项目5年TCO并不难测算,投入破亿是肯定的。硬件成本(服务器、交换机等)、软件成本(操作系统、数据库授权),包含第四/五年维保成本都很容测算。

但有一项成本可能很容易被忽略,那就是运维成本,它或许会占到整体采购成本的20-30%。分布式数据库运维是痛点,分布式改造后运维和开发的工作量必然激增。

从运维角度看,因为硬件大量增加,假设原来3台小型机只需要2个运维,那现在600多台X86需要的运维就得翻倍,甚至更多。假设一个运维平均年薪20万,5年就是100万,如果增加3个就是300万。其次,大量增加的机器,势必导致电费、散热、机房使用等成本提升。

从开发角度看,架构的改变,很少不动应用的,甚至完全重构应用都有可能。

因此,无论是从性能还是成本来说,这个案例都是没有性价比的。

虽然这个案例有些极端,但反映出的一些市场上真实存在的潜在问题或认知误区,值得我们去深入探讨。

最近几年,分布式数据库成为潮流,在各种光环加持下,仿佛黑暗中的灯塔,难免有些过度神话了。

不仅各路厂商或主动、被动的发布自己的分布式数据库产品,市场产品群雄逐鹿。很多传统企业也在纷纷试水分布式数据库。大有不上分布式数据库就要被时代淘汰,没用过分布式数据库就显得特别LOW的架势。

在试水的企业中,有成功的,也有失败的。由于分布式数据库尚无统一的业界标准,因此,各有各的看法。

老鱼认为,没有万能的数据库,只有最合适的数据库。

分布式数据库虽好,但也并非万能“银弹”,也分场景,也有自己的短板。而要清楚当前分布式数据库的最佳适用场景,这就要从分布式数据库的历史背景及走红原因说起。


历史 背景


分布式数据库在数据库历史的早期就有了,其研究始于20世纪70年代,世界上第一个分布式数据库系统SDD-1是由美国计算机公司(CCA)于1979年在DEC计算机上实现。

但分布式数据库直到最近几年才被关注,其原因也是多方面的。

在互联网诞生以前,企业数据规模不大,以“O”记为代表的传统数据库足以满足绝大多数数据管理的需求,因此,分布式数据库并无用武之地,这其中还有两个方面的原因,首先,这个时期,市面并没有较好的分布式数据库产品,其次,分布式数据库本身不可以免的存在一些缺陷。

但进入互联网时代以后,面对时刻增长的海量数据、同时在线的海量用户,传统数据库的已经难以支撑业务发展。于是,以互联网行业为首的企业开始探索有效的解决方案。

先是NoSQL发展起来,NoSQL牺牲了关系型数据库的一些限制,例如:强一致性,为数据处理带来的扩展性。之后又催生了NewSQL,定义了一种新型的数据库,兼具扩展性与传统关系型数据库的特性,最典型的代表就是基于谷歌Spanner/F1 论文。

在这个过程中,传统数据库也在进行自我救赎,最常见的就是分库分表方式,但这种解决方案需要应用系统做大量改造,需要感知数据存储位置,同时增加了运维复杂性。

于是,就有了分布式数据库的两种技术路线:开源数据库+分布式中间件的解决方案,比如MyCat,优点是可以利用现有开源数据库成熟稳定的产品功能,缺点是中间件毕竟只是一种迂回的方式,会受限于单机数据库的功能。

另一种技术路线即原生分布式数据库,天生具有分布式的特性,从设计之初就是针对分布式架构进行设计的,缺点是产品成熟度还有待提升,还需要经过不同场景、不同规模数据量和不同行业应用的检验、改进和完善。

目前,一般性的共识是数据量不上一定规模,没有超高峰值,没有高并发的场景就没必要用分布式数据库,因为,很可能不但不能获得什么明显优势,还要牺牲集中式的单机扩展性和开发及运维简单便捷性。

如果只是为了实现国产化替代,其实一些国产关系型数据库也能满足需求,并没有必要直接上分布式数据库。

总的来说,分布式数据库的优点是扩展性好,数据能分散存储在多个节点,能实现水平扩展。并且多个节点,可以并行执行,提高了整体的吞吐。

缺点是分布式事物处理的代价较高,这种代价主要源于两阶段的提交造成过多的消息传输;可能的锁争用变大;复制多副本和高可用。其次,产品成熟度有待提升,运维复杂。


常见 误区


1、分布式改造只是个技术问题

从传统集中式架构改造为分布式架构,并非一个简单的技术问题,而是一个技术生态切换的问题。

数据库的分布化,带来的不仅是数据库系统重构,还有应用系统的重构。分布式数据库一般不支持存储过程,SQL执行效率低,而这些问题通常只能在应用端解决。

相比传统数据库,分布式数据库的开发和运维的技术要求会提高一个档次,民生银行的技术负责人就曾表示,分布式改造时,开发一个智能化的运维平台非常重要。

因此,上分布式数据库前,需要做好整体规划,在资金、环境改造,人员技能、管理自动化和技术储备等各个方面做好充分准备。

2、分布式改造会降低TCO

分布式数据库有两种技术路线:开源数据库+分布式中间件,原生分布式数据库。由于研发分布式数据库产品的公司多为互联网、创业公司等,它们一般都以使用 MySQL 为主,因此,很多人认为部署分布式数据库,软件采购费用会降低,X86替代RISC,硬件单价会大幅降低,所以,TCO会降下来。但实际情况也可能并非如此。

比如本文开头的案例,就是个例子,当然这个案例有点极端,再举个例子。

某全国性银行的信用卡系统,原数据库系统为4台小型机,分布化改造后,需要120台数据库服务器,软硬件采购成本降低了50%,但是运维人员增长了66%,开发人员增长了5倍,计算5年整体拥有成本,比原来提高了60%以上。节省的采购成本并不能覆盖后期增加的运维和开发成本。

从这个案例看,分布式改造只是降低了首次购买成本TCA,整体拥有成本TCO并没有降低。

3、不发掘现有系统潜力,盲目照搬互联网模式

有句俗话叫“技术跟着业务走”。IT架构的进化升级需要与企业业务转型同步,落后则制约业务发展,激进则会造成投资浪费,甚至给业务带来风险。

传统企业和互联网公司的业务相比有着根本性的不同。互联网公司有三个显著的特点,即海量的用户、用户的高频访问和交易、业务的高频创新,比如抖音、快手、今日头条,一年时间就可以发展几千万用户,每个用户每天多次登陆使用。所以,IT基础架构一定以扩展性、灵活性为第一追求。

传统企业的核心业务相对稳定,而且用户数量有限,交易频率不高,开发人员少、IT支出少,业务对于IT的需求同互联网公司有着根本性的差异。很难承受分布式改造带来的经济成本和技术风险,通常只能依托第三方提供的整体方案和服务,因此,对于这类企业,传统的集中式数据库仍然是最好的选择。

比如本文开头的案例,要提高数据库系统性能,只需要把硬件平台从双路、四路服务器升级到八路、十六路等大型服务器上,就可以覆盖绝大部分业务需求。成本未必比直接上分布式高,甚至可能还要低。目前,国产服务器、小型机品类齐全,价格也很透明。如果这样还不够,就来个RAC集群,不少国产关系型数据库也大都有RAC集群扩展方案。


写在 最后


总的来说,用什么数据库,完全取决于业务需求。

业务用数据库来做什么?分析还是交易?或者两者兼而有之?业务要处理什么样的数据?对数据库性能需求是什么?

如果是传统的ERP、CRM、财务等与“钱”相关的核心业务系统,需要事务完整性,保证ACID事务,那么,毫无疑问,传统的集中式关系型数据库是最佳选择。

业务要处理什么样的数据?结构化?半结构化?非结构化数据?决定需要支持的数据模型。原则上“什么数据模型,就用什么库。”

如果你要存储和处理的是图片、音频、视频等非结构化数据,那么,NoSQL数据库会是最佳选择。进一步来说,业务要存储游戏场景中的角色信息、经验道具信息、好友排名等信息,而这些信息一般都和 ID(键)挂钩,那么,键值数据库是个很好的选择。

业务需要处理的多大的数据规模、并发吞吐量、响应时间需求是什么?决定了对数据库的性能需求。

如果业务是秒杀,春节火车票等,有超高峰值、高并发的业务,那么,分布式数据库会是一个不错的选择。

综上所述,虽然针对架构和数据库选型的讨论会一直存在,但归其核心,一定要明确的一点就是:“业务需求主导技术创新“,理性分析和对待架构和分布式数据库的选型,选择业务场景最适合的架构和数据库才是王道。



推荐阅读
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • Syncnavigator激活工具及破解方法详解
    本文详细介绍了Syncnavigator激活工具的使用方法及其破解技巧。用户可以通过访问官方网站www.SyncNavigator.CN获取相关资源,并通过客服QQ 1793040获得技术支持和帮助。此外,文章还提供了详细的步骤说明和常见问题解答,以确保用户能够顺利激活并使用Syncnavigator软件。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
author-avatar
暗淡的天2004_976
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有