微信扫一扫

028-83195727 , 15928970361
business@forhy.com

【架构】百万级数据的解决方案以及架构设计

数据库,架构设计,解决方案,数据,数据存储2016-07-22

百万级数据的解决方案以及架构设计

前言

随着业务的不断扩展,早期的架构方案不再能满足业务的持续进行。
面对百万级别的数据,需要采用适当的方式进行处理,实现业务架构共同增长。

数据处理

基础数据存储

百万级别的基础数据,并不是一次生成的,我们采用数据拆分(LIST)拆分,将用户数据(举例)通过uid进行拆分,存入不同的数据库实例。

拆分举例如下

对于单个数据库实例,采用主库进行读取,从库进行写入的主从分离配置

这样,将千万级别的数据分散成几十个百万机别的数据实例,减少单一实例的压力。

二次产生数据

基础数据产生之后,由于产品业务的进行,会产生更多的业务数据。

拿电商类商品来说,如果用户的下单比例为3%,就会产生100w * 3% = 3w的订单数据,每个订单产生的订单日志,账单流水,至少是单条订单数据的5到10倍,也就是30w条数据的产生。

对于特定类型的数据,最好根据业务特性,对数据进行相关存储。

订单类数据,用户查看历史数据的概率很小,在大量数据面前,采用日期方式拆分存储业务数据,能避免大量查询最近数据的同时不去遍历几个月或者几年之前的历史数据,从而达到效率上的提升。

业务处理

大量的数据存储意味着大量的业务访问,所以对应的服务器架构也在增长。

负载均衡

当单个服务器的配置提升的花费和提升的性能不能满足要求,就需要对服务器架构转向横向扩展,用多台服务器把总体的请求分散开。

关于负载均衡下的服务器分配,我们采用加权最小连接数(WLC)对下面的服务器进行动态分配,同时根据服务器的配置不同设置权重。

缓存层(Memcache)

对于短期不变或者长期不变的数据,通过写入缓存层,提高读取速度,减少数据库的连接。

增加缓存数据

当对应的数据第一次读取,可以写入缓存。当进行数据读取时,先对缓存层进行判断读取。

删除缓存数据

当数据发生变化,比如修改删除,调用操作删除缓存层数据,避免数据冲突。

整体架构

待续

针对不同的业务的数据模型,可以选择非关系型数据库进行存储。随着业务不断扩展,架构也在不断完善中。