2023年7月21日发(作者:)
⾼性能架构设计——数据库篇⾼性能数据库集群的第⼀种⽅式是“读写分离”,其本质是将访问压⼒分散到集群中的多个节点,但是没有分散存储压⼒;第⼆种⽅式是“分库分表”,既可以分散访问压⼒,⼜可以分散存储压⼒。⼀、⾼性能数据库集群:读写分离读写分离的基本实现是:数据库服务器搭建主从集群,⼀主⼀从、⼀主多从都可以。数据库主机负责读写操作,从机只负责读操作。数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。业务服务器将写操作发给数据库主机,将读操作发给数据库从机。两个设计复杂度: 主从复制延迟和分配机制。解决主从复制延迟有⼏种常见的⽅法:1. 写操作后的读操作指定发给数据库主服务器2. 读从机失败后再读⼀次主机3. 关键业务读写操作全部指向主机,⾮关键业务采⽤读写分离分配机制将读写操作区分开来,然后访问不同的数据库服务器,⼀般有两种⽅式:程序代码封装和中间件封装。程序代码封装。⽰意图: 中间件封装:中间件封装指的是独⽴⼀套系统出来,实现读写操作分离和数据库服务器连接的管理。中间件对业务服务器提供 SQL 兼容的协议,业务服务器⽆须⾃⼰进⾏读写分离。对于业务服务器来说,访问中间件和访问数据库没有区别,事实上在业务服务器看来,中间件就是⼀个数据库服务器。其基本架构是:
⼆、⾼性能数据库集群:分库分表 分散存储的⽅法“分库分表”,其中包括“分库”和“分表”两⼤类。1、分库:业务分库指的是按照业务模块将数据分散到不同的数据库服务器。 通过分库,将业务分别存储在不同的数据库中,从⽽降低数据库存储压⼒。分库后,SQL的join和事务⽆法使⽤,不建议初创公司使⽤。单台数据库服务器的性能:⼀般来说,单台数据库服务器能够⽀撑 10 万⽤户量量级的业务。2、分表:将不同业务数据分散存储到不同的数据库服务器,能够⽀撑百万甚⾄千万⽤户规模的业务,但如果业务继续发展,同⼀业务的单表数据也会达到单台数据库服务器的处理瓶颈。此时就需要对单表数据进⾏拆分。单表数据拆分有两种⽅式:垂直分表和⽔平分表。垂直分表适合将表中某些不常⽤且占了⼤量空间的列拆分出去。⽔平分表适合表⾏数特别⼤的表。⽔平分表相⽐垂直分表,会引⼊更多的复杂性,主要表现在下⾯⼏个⽅⾯:⽔平分表后,某条数据具体属于哪个切分后的⼦表,需要增加路由算法进⾏计算。常见的路由算法有:范围路由 ⼀般建议分段⼤⼩在 100 万⾄ 2000 万之间。优点是可以随着数据的增加平滑地扩充新的表。缺点是分布不均匀。Hash 路由选取某个列(或者某⼏个列组合也可以)的值进⾏ Hash 运算,然后根据 Hash 结果分散到不同的数据库表中。Hash 路由的优缺点和范围路由基本相反,Hash 路由的优点是表分布⽐较均匀,缺点是扩充新的表很⿇烦,所有数据都要重分布。配置路由三、NoSQLNoSQL 是 SQL 的⼀个有⼒补充,NoSQL != No SQL,⽽是 NoSQL = Not Only SQL。NoSQL ⽅案带来的优势,本质上是牺牲 ACID 中的某个或者某⼏个特性。常见的 NoSQL ⽅案分为 4 类。K-V 存储:解决关系数据库⽆法存储数据结构的问题,以 Redis 为代表。⽂档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。列式数据库:解决关系数据库⼤数据场景下的 I/O 问题,以 HBase 为代表。全⽂搜索引擎:解决关系数据库的全⽂搜索性能问题,以 Elasticsearch 为代表。
四、⾼性能缓存架构1. 需要经过复杂运算后得出的数据,存储系统⽆能为⼒2. 读多写少的数据,存储系统有⼼⽆⼒缓存就是为了弥补存储系统在这些复杂业务场景下的不⾜,其基本原理是将可能重复使⽤的数据放到内存中,⼀次⽣成、多次使⽤,避免每次使⽤都去访问存储系统。缓存能够带来性能的⼤幅提升,以 Memcache 为例,单台 Memcache 服务器简单的 key-value 查询能够达到 TPS 50000 以上,其基本的架构是:缓存穿透是指缓存没有发挥作⽤,业务系统虽然去缓存查询数据,但缓存中没有数据,业务系统需要再次去存储系统查询数据。缓存雪崩是指当缓存失效(过期)后引起系统性能急剧下降的情况。缓存热点的解决⽅案就是复制多份缓存副本,将请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压⼒。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689900465a293381.html
评论列表(0条)