一个大型系统-高数据量,高并发的系统设计理念

这是前段时间面试,被问到的一个问题,觉得还是不错的,记录下来;

	整体记录:
	1.解决DB的读写压力;
	2.高可用;
	3.数据同步;
	4.再优化

只是记录理念,具体的实现搭建自行学习哈;

首先,算是个人逻辑,
在我们拿到这样一道题目,或者说,平时工作过程中,接到新需求时,
我们应该会有一个大概的实现方案,包含我们将会采用的技术,实现的逻辑等等;

也就是说:想一想实现过程中可能遇到的问题,及其解决方案.

1.问题分析及解决方案

正如上面说的:我们首先拿到这道题目,我们应该来分析,我们可能遇到的问题,及其解决方案.

1.1 DB的读写压力;

首先:映入眼帘的,高数据量.高并发;

那最直接的问题:**数据库的读写压力**;

解决方案:
分库分表

关于分库分表;
暂时简单了解一些,懂得这些东西就够了,具体需要搭建设计的时候,再深入去学习实践吧;

分库分表:
	1,水平分库分表:
		分库:
			把一个数据库的数据表分到多个不同的数据库,每个库只有这个表的部分数据,这些库可以分布在不同服务器,从而使访问压力被多服务器负载;
		分表:
			把一个表的数据分到多个同一个数据库的多张表中,每个表只有这个表的部分数据,从而减轻数据库表的压力;

	2.垂直分库分表:
		分库:
			把一个数据库里的表,按照不同的标准规则,分别保存在不同的数据库,实现减轻服务器的压力,提高性能;
		分表:	
			把一张表里的字段,按照不同的标准规则,分别保存在不同的表中.实现减轻数据库表的压力,提高性能;

通过分库分表,解决-单个数据库读写压力过高的问题;

1.2 高可用

那解决了数据库的读写压力后,问题又来了,这么多数据库,万一其中一个挂了,那涉及到这部分的业务全都挂,阻塞从而导致整个系统的崩溃;

解决方案:
主从备份,读写分离,集群

1.3 数据同步

通过主从备份,读写分离解决了高可用的问题;但是,同时也带来了新问题:

数据的同步问题;

保证主从数据库间的数据同步;
解决方案:
中间件

2.再优化

2.1添加缓存

对数据进行分类:

1.一些实时性和精确性要求比较高的数据,比如订单信息,支付信息等  -->  不添加缓存,直接读写数据库;
2.一些读多写少的数据  -->  可以使用redis缓存;
3.一些几乎没有业务关联的数据,  -->  可以使用mongoDb缓存;
3.几乎不修改的数据,比如一些商品的分类栏目等,  -->  可以使用本地内存缓存;
2.2有些特殊时刻.拥有超高的并发,比如,整点发放优惠券.双十一呀这种的;

解决方案:

可以采用消息队列 --> 削峰;  以保证程序不会瞬间宕机;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值