存储系统设计

存储系统设计

什么是池化技术?

在一些项目中,会提前分配一块大的内存空间作为数据缓冲区,用来优化内存分配,这就是一种“内存池”化技术。还可以用数据库连接池来优化数据库的连接,这就是连接池技术。池化技术是预先分配一些资源并循环利用,以达到池化的目的。

  1. 不用连接池会出现哪些问题?

  2. 单连接无法支撑高并发

  3. 每次请求都需要建立和关闭连接,会增加请求延迟

  4. 如果在高并发场景下频繁地建立和关闭连接,则会导致操作系统耗费 过多 CPU资源。

  5. 连接池原理

连接池是指,预先分配一批连接,并将他们放入一个缓冲区中循环使用,形成池化效应。数据库连接池有3个重要地配置:最小连接数、空闲连接数和最大连接数

  1. 如果当前连接数小于最小连接数,则创建新地连接来处理数据库地请求

  2. 如果连接池中有空闲连接,则复用空闲连接。如果没有空闲连接,且当前连接数小于最大连接数,则创建新地连接

  3. 如果当前数连接数大于最大连接数,则根据配置中设定地时间等待旧地 连接可用

  4. 如果等待时间超过了设定地时间,则向用户抛出错误。

  5. 如何维护数据库连接池中的连接?导致连接异常的原因有哪些?

  6. 数据库域名或者IP地址发生了变更。

  7. MYSQL数据库会主动断开一定时间内没活跃的连接,这个过程无感知。

    解决方案:

    1. 启用一个线程池,定期检测数据库连接池中的连接是否可用。如C3P0连接池就可以使用这种方法放出 select 1进行检测
    2. 在获取连接后,先验证是否可用,可用则执行SQL语句。
  8. 线程池是如何工作的?

  9. 线程池有6个参数

    1. corePoolSize 核心线程数 即常驻线程的数量
    2. maxPoolSize 最大线程数
    3. keepAliveTime 空闲线程的存活时间
    4. ThreadFactory 线程工厂用于创建新线程
    5. workQueue 用于存放任务的队列
    6. Handler 处理被拒绝的任务
      1. 在提交任务后,如果线程池数小于核心线程数,则创建新的线程执行任务
      2. 随着任务的不断增加,如果线程池中的线程数大于核心线程数,则新提交的任务会被放入任务队列中,等待核心线程空闲后再执行队列中的任务
      3. 当任务队列WorkQueue中的任务堆满时,线程池会参照最大线程数继续创建线程来执行任务。
      4. 当线程数达到最大线程数,如果还有新的任务提交,则拒绝这些任务。
  10. 使用线程池的好处

    1. 线程池不仅可以解决线程生命周期的开销问题,还可以加快响应速度
    2. 线程池 可以统筹内存 和CPU使用,避免资源使用不当
    3. 线程池可以统一管理资源。
  11. 协程池有什么作用

在高并发场景下,线程的创建和销毁都会给CPU和内存带来的一些性能开销,所以协程出现了。协程在Go语言当中,一个协程的初始内存时2KB。

  1. 协程的创建和销毁完全是在用户态下执行的,不涉及用户态和内核态的切换。
  2. 协程完全由应用程序在用户态下调用,不涉及内核态的上下文切换。
  3. 在切换协程时不需要处理线程状态,所以需要保存的上下文也很少,速度也很快。

协程是如何实现的?

  1. 抢占式 在这种实现方式中,所有任务被存放在一个共享的channel中,多个协程同时消费channel中的任务,谁先拿到谁先执行。
  2. 调度式 在调度式协程池中,每个协程都有自己的channel,每个协程只消费自己的channel。
数据库采用主从架构——数据再也不会丢了
  1. 什么是数据库的主从架构?
    1. 主从复制 保证数据安全,最简单且最有效的方式是对数据进行定期备份。
      1. Master将数据的变更记录到binlog文件中
      2. 主库Master中的Binlog dump thread在收到写请求后 读取Binlog文件,然后将读取的数据推送给从库Slave中的I/O thread。
      3. 从库Slave中的I/O thread将读取的Binlog 写入本地的Relaylog日志文件中
      4. 从库Slave中的SQL thread 检测到Relaylog的变更请求,读取Relaylog文件在从库Slave中的回放,以实现主从数据库的一致性。
    2. 主从延迟 对于 主从复制,基于性能的考虑,主库的写入流程并不是等待从库完成同步后才给客户端返回结果,而是采用异步的方式直接返回结果。
  2. 主从架构中的数据是如何实现同步的?、
    1. 主库提交事务、更新存储引擎中的数据
    2. 主库将binlog文件写入磁盘
    3. 主库给客户端返回响应结果
    4. Binlog文件被复制到所有的从库中
    5. 每个从库将复制过来的Binlog文件写入中继日志
    6. 从库回放Binlog文件、更新存储引擎中的数据,然后给主库返回复制成功的结果。
  3. 数据库读写分离能解决什么问题?
    1. 提升数据库并发能力,将读流量分摊到各个从库中,且从库可以横向扩展
    2. 保证数据库的可用性
  4. 数据库读写分离造成数据不一致,该怎么办?
    1. 根据业务的特点来设计业务场景、尽量规避 无完美解决方案。
数据库分库分表——处理海量数据的终极 大招
  1. 在什么情况下需要分库分表?

在Mysql数据库无法承受海量数据压力时,可以采用分布式思想对数据库进行拆分

  1. 分库分表的思考?

    1. 如果单张表数据达到了千万条或者亿条,那此时对数据库本身进行优化基本不会提升多少性能
    2. 数据量的飞速增长,使得磁盘空间特别紧张,此时数据的备份和恢复耗时增加不少
    3. 对于部分核心模块的数据,可以将其单独存放在一个核心库中,一旦该库出现异常,那该如何隔离其他核心模块以使其不受影响?
    4. 必须思考如何突破单台数据库的写请求瓶颈?

    所以最有效的解决办法是分片——对数据进行分片存储。

  2. 如何分库分表?

    1. 分库分表的核心思想是 尽可能将数据平均分散到多个 数据库节点或者多张表中。分库分表解决3个关键问题
      1. 提升数据的查询性能,因为所有节点都只存储了一部分数据
      2. 突破单机的存储瓶颈
      3. 提升并发的写性能,因为数据被分摊到多个数据节点上了,所以数据的写请求 从 单一库的写入 变为多个分片的写入

    (1)垂直拆分 将一个数据库中的表拆分到多个数据中,或者一张表拆分成多张表,通常按照业务模型来进行垂直拆分。

    (2)水平拆分 是指将单张数据表的数据按照某种算法规则拆分到多个数据库和数据库表中。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容