iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据库中怎么进行互联网常用架构的搭建
  • 757
分享到

MySQL数据库中怎么进行互联网常用架构的搭建

2024-04-02 19:04:59 757人浏览 薄情痞子
摘要

Mysql数据库中怎么进行互联网常用架构的搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、数据库架构原则1、高可用2、高性能3、一致性4

Mysql数据库中怎么进行互联网常用架构的搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、数据库架构原则


1、高可用

2、高性能

3、一致性

4、扩展性

二、常见的架构方案


方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用

MySQL数据库中怎么进行互联网常用架构的搭建

 jdbc:mysql://vip:3306/xxdb

  1. 高可用分析:高可用,主库挂了,keepalive(只是一种工具)会自动切换到备库。这个过程对业务层是透明的,无需修改代码或配置。

  2. 高性能分析:读写都操作主库,很容易产生瓶颈。大部分互联网应用读多写少,读会先成为瓶颈,进而影响写性能。另外,备库只是单纯的备份,资源利用率50%,这点方案二可解决。

  3. 一致性分析:读写都操作主库,不存在数据一致性问题。

  4. 扩展性分析:无法通过加从库来扩展读性能,进而提高整体性能。

  5. 可落地分析:两点影响落地使用。第一,性能一般,这点可以通过建立高效的索引和引入缓存来增加读性能,进而提高性能。这也是通用的方案。第二,扩展性差,这点可以通过分库分表来扩展。

方案二:双主架构,两个主库同时提供服务,负载均衡

MySQL数据库中怎么进行互联网常用架构的搭建

 jdbc:mysql://vip:3306/xxdb

  1. 高可用分析:高可用,一个主库挂了,不影响另一台主库提供服务。这个过程对业务层是透明的,无需修改代码或配置。

  2. 高性能分析:读写性能相比于方案一都得到提升,提升一倍。

  3. 一致性分析:存在数据一致性问题。请看,一致性解决方案。

  4. 扩展性分析:当然可以扩展成三主循环,但笔者不建议(会多一层数据同步,这样同步的时间会更长)。如果非得在数据库架构层面扩展的话,扩展为方案四。

  5. 可落地分析:两点影响落地使用。第一,数据一致性问题,一致性解决方案可解决问题。第二,主键冲突问题,ID统一地由分布式ID生成服务来生成可解决问题。

方案三:主从架构,一主多从,读写分离

MySQL数据库中怎么进行互联网常用架构的搭建

 jdbc:mysql://master-ip:3306/xxdb

 jdbc:mysql://slave1-ip:3306/xxdb

 jdbc:mysql://slave2-ip:3306/xxdb

  1. 高可用分析:主库单点,从库高可用。一旦主库挂了,写服务也就无法提供。

  2. 高性能分析:大部分互联网应用读多写少,读会先成为瓶颈,进而影响整体性能。读的性能提高了,整体性能也提高了。另外,主库可以不用索引,线上从库和线下从库也可以建立不同的索引(线上从库如果有多个还是要建立相同的索引,不然得不偿失;线下从库是平时开发人员排查线上问题时查的库,可以建更多的索引)。

  3. 一致性分析:存在数据一致性问题。请看,一致性解决方案。

  4. 扩展性分析:可以通过加从库来扩展读性能,进而提高整体性能。(带来的问题是,从库越多需要从主库拉取binlog日志的端就越多,进而影响主库的性能,并且数据同步完成的时间也会更长)

  5. 可落地分析:两点影响落地使用。第一,数据一致性问题,一致性解决方案可解决问题。第二,主库单点问题,笔者暂时没想到很好的解决方案。

注:思考一个问题,一台从库挂了会怎样?读写分离之读的负载均衡策略怎么容错?

方案四:双主+主从架构,看似完美的方案

MySQL数据库中怎么进行互联网常用架构的搭建

 jdbc:mysql://vip:3306/xxdb

 jdbc:mysql://slave1-ip:3306/xxdb

 jdbc:mysql://slave2-ip:3306/xxdb

  1. 高可用分析:高可用。

  2. 高性能分析:高性能。

  3. 一致性分析:存在数据一致性问题。请看,一致性解决方案。

  4. 扩展性分析:可以通过加从库来扩展读性能,进而提高整体性能。(带来的问题同方案二)

  5. 可落地分析:同方案二,但数据同步又多了一层,数据延迟更严重。

三、一致性解决方案


第一类:主库和从库一致性解决方案

MySQL数据库中怎么进行互联网常用架构的搭建

注:图中圈出的是数据同步的地方,数据同步(从库从主库拉取binlog日志,再执行一遍)是需要时间的,这个同步时间内主库和从库的数据会存在不一致的情况。如果同步过程中有读请求,那么读到的就是从库中的老数据。如下图。

MySQL数据库中怎么进行互联网常用架构的搭建

既然知道了数据不一致性产生的原因,有下面几个解决方案供参考:

1、直接忽略,如果业务允许延时存在,那么就不去管它。

2、强制读主,采用主备架构方案,读写都走主库。用缓存来扩展数据库读性能 。有一点需要知道:如果缓存挂了,可能会产生雪崩现象,不过一般分布式缓存都是高可用的。


MySQL数据库中怎么进行互联网常用架构的搭建

3、选择读主,写操作时根据库+表+业务特征生成一个key放到Cache里并设置超时时间(大于等于主从数据同步时间)。读请求时,同样的方式生成key先去查Cache,再判断是否命中。若命中,则读主库,否则读从库。代价是多了一次缓存读写,基本可以忽略。


MySQL数据库中怎么进行互联网常用架构的搭建

4、半同步复制,等主从同步完成,写请求才返回。就是大家常说的“半同步复制”semi-sync。这可以利用数据库原生功能,实现比较简单。代价是写请求时延增长,吞吐量降低。

5、数据库中间件,引入开源(mycat等)或自研的数据库中间层。个人理解,思路同选择读主。数据库中间件的成本比较高,并且还多引入了一层。

MySQL数据库中怎么进行互联网常用架构的搭建

第二类:DB和缓存一致性解决方案

MySQL数据库中怎么进行互联网常用架构的搭建

先来看一下常用的缓存使用方式:

第一步:淘汰缓存;

第二步:写入数据库;

第三步:读取缓存?返回:读取数据库;

第四步:读取数据库后写入缓存。

注:如果按照这种方式,图一,不会产生DB和缓存不一致问题;图二,会产生DB和缓存不一致问题,即4.read先于3.sync执行。如果不做处理,缓存里的数据可能一直是脏数据。解决方式如下:

MySQL数据库中怎么进行互联网常用架构的搭建

注:设置缓存时,一定要加上失效时间,以防延时淘汰缓存失败的情况!

四、个人的一些见解

1、架构演变

1、架构演变一:方案一 -> 方案一+分库分表 -> 方案二+分库分表 -> 方案四+分库分表;

2、架构演变二:方案一 -> 方案一+分库分表 -> 方案三+分库分表 -> 方案四+分库分表;

3、架构演变三:方案一 -> 方案二 -> 方案四 -> 方案四+分库分表;

4、架构演变四:方案一 -> 方案三 -> 方案四 -> 方案四+分库分表;

2、个人见解

1、加缓存和索引是通用的提升数据库性能的方式;

2、分库分表带来的好处是巨大的,但同样也会带来一些问题,

3、不管是主备+分库分表还是主从+读写分离+分库分表,都要考虑具体的业务场景。某8到家发展四年,绝大部分的数据库架构还是采用方案一和方案一+分库分表,只有极少部分用方案三+读写分离+分库分表。另外,阿里云提供的数据库云服务也都是主备方案,要想主从+读写分离需要二次架构。

4、记住一句话:不考虑业务场景的架构都是耍流氓。

看完上述内容,你们掌握MySQL数据库中怎么进行互联网常用架构的搭建的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库中怎么进行互联网常用架构的搭建

本文链接: https://www.lsjlt.com/news/61544.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据库中怎么进行互联网常用架构的搭建
    MySQL数据库中怎么进行互联网常用架构的搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、数据库架构原则1、高可用2、高性能3、一致性4...
    99+
    2024-04-02
  • 大数据环境下互联网行业数据仓库/数据平台的架构之漫谈
    导读:整体架构数据采集数据存储与分析数据共享数据应用实时计算任务调度与监控元数据管理总结一直想整理一下这块内容,既然是漫谈,就想起什么说什么吧。我一直是在互联网行业,就以互联网行业来说。先大概列一下互联网行业数据仓库、数据平台的用途:整合公...
    99+
    2023-06-05
  • 数据库实践如何解决互联网架构转型中的痛点
    数据库实践如何解决互联网架构转型中的痛点,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。▍互联网数...
    99+
    2024-04-02
  • MyBatis中怎么与数据库进行交互
    在MyBatis中,与数据库进行交互主要通过配置Mapper文件和SQL语句来实现。以下是基本步骤: 配置数据源:在MyBati...
    99+
    2024-03-07
    MyBatis 数据库
  • 怎么使用PHP7与数据库进行交互
    本篇内容介绍了“怎么使用PHP7与数据库进行交互”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PHP7与MySQL数据库交互MySQL是一种...
    99+
    2023-07-05
  • mysql中怎么用命令行创建数据库
    要在MySQL中使用命令行创建数据库,可以按照以下步骤操作: 打开命令行窗口,并登录到MySQL服务器上。可以使用以下命令登录: ...
    99+
    2024-04-02
  • MySQL数据库基础架构是怎么样的
    这篇文章给大家分享的是有关MySQL数据库基础架构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.Application LayerMySQL的应用层提供各种用户对数...
    99+
    2024-04-02
  • 怎么对MySQL数据库中表的数据进行更新
    小编给大家分享一下怎么对MySQL数据库中表的数据进行更新,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Update语句的基本语...
    99+
    2024-04-02
  • 如何进行数据库高可用架构的思路分析
    这篇文章将为大家详细讲解有关如何进行数据库高可用架构的思路分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据库高可用架构对于我们这些应用端开发的人来说是...
    99+
    2024-04-02
  • SQLServer数据库中怎么进行网络链接
    今天就跟大家聊聊有关SQLServer数据库中怎么进行网络链接,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  怎样使用SQLServer数据库进行...
    99+
    2024-04-02
  • NodeJs中怎么对数据库异常进行处理
    NodeJs中怎么对数据库异常进行处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据库链接错误使用nodejs处理异常最麻...
    99+
    2024-04-02
  • 怎么在MySQL数据库中进行时间查询数据
    这篇文章主要介绍“怎么在MySQL数据库中进行时间查询数据”,在日常操作中,相信很多人在怎么在MySQL数据库中进行时间查询数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2023-05-25
    mysql
  • 网易马进:DDB从分布式数据库到结构化数据中心的架构变迁
    导语: 本文根据马进老师在2018年5月10日【第九届中国数据库技术大会(DTCC)】现场演讲内容整理而成。 马进 网易 DDB项目负责人 来自网易杭研大数据平台组,入职以来先后参与...
    99+
    2024-04-02
  • mySQL数据库中怎么创建数据库和用户
    本篇文章为大家展示了mySQL数据库中怎么创建数据库和用户,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。MySQL数据库系统可以支持许多不同的数据库,通常,每个应用...
    99+
    2024-04-02
  • MySQL数据库中逻辑架构的原理是什么
    MySQL数据库中逻辑架构的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、笼统的逻辑架构先给出一张逻辑架构图,这...
    99+
    2024-04-02
  • windows上mysql如何进行主从数据库搭建及问题是什么
    今天就跟大家聊聊有关windows上mysql如何进行主从数据库搭建及问题是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 根据前篇web项目...
    99+
    2024-04-02
  • Android应用中的webview怎么与JavaScript进行数据交互
    本篇文章为大家展示了Android应用中的webview怎么与JavaScript进行数据交互,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先需要初始化WebView以及设置支持JavaScrip...
    99+
    2023-05-31
    webview javascript android
  • 怎么在MySQL数据库中实现MMM高可用群集架构
    这篇文章给大家介绍怎么在MySQL数据库中实现MMM高可用群集架构,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MMM高可用架构说明mmm_mond:监控进程,负责所有的监控工作,决定...
    99+
    2024-04-02
  • 应该怎么样去对MySQL数据库的表结构进行修改
    这篇文章给大家分享的是有关应该怎么样去对MySQL数据库的表结构进行修改的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL ALTER TABLE语句ALTER ...
    99+
    2024-04-02
  • MYSQL的架构中主从异步复制是怎么进行的
    这篇文章将为大家详细讲解有关MYSQL的架构中主从异步复制是怎么进行的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。/主服务器从服务器Ip192.168.3...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作