热门标签 | 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(键)挂钩,那么,键值数据库是个很好的选择。

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

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

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



推荐阅读
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • NTP服务器配置详解:原理与工作模式
    本文深入探讨了网络时间协议(NTP)的工作原理及其多种工作模式,旨在帮助读者全面理解NTP的配置参数和应用场景。NTP是基于RFC 1305的时间同步标准,广泛应用于分布式系统中,确保设备间时钟的一致性。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
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社区 版权所有