在中大型网站中,内容和并发往往会达到千万级别,市面的cms基本都是单体架构,都不适合大型数据和高并发,不分库,甚至不分表,以wordpress为例,每个栏目的数据都放在一个表中,当数据达到10万以上,wp会非常卡,就算安装各种优化插件也解决不了根本问题,国内支持大数据的屈指可数,其中比较有代表性的有PageAdmin CMS,为了应对大数据和高并发场景,下面看看pageadmin cms的架构和底层是如何设计的?
一、数据层面的拆分
数据通过下面4个层面进行拆分
1、数据库层面拆分
主站,分站单独使用不同的数据库或架构
如:
主站:app_db_mian 分站1:app_db_1 分站2:app_db_2 ....
不同站点共用不同的数据或架构,站点数据之间不会互相影响。
2、内容模型分表
PageAdmin采用完全自定义内容模型的方式,后台通过可视化创建新闻,产品,下载,视频等模型时候会自动根据设计字段生成一张内容表,有全局搜索再通过把数据推送到专门的全文搜索引擎。
如:
新闻表:news_content 产品表:product_content 下载表:download__content 留言表:feedback_content 视频表:video_content ....
3、栏目层面再次分表
如新闻栏目可以根据栏目类型再次分表,如国内新闻,娱乐新闻,国际新闻等拆分成不同的表。
如:
国内新闻:news_content_1 娱乐新闻:news_content_2 国际新闻:news_content_3 ....
根据栏目拆分可以实现更细粒度的分表。
4、业务表按时间拆分
如审批,日志类业务数据自动根据时间按月,或按年自动拆分,通过这种设计就可以保证系统不会因为使用年限太久,基础业务表因数据膨胀导致检索缓慢的问题。
通过以上4点设计,就算数据到达上亿级别,仍然可以打散到不同数据库和数据表,保证每个表中的数据控制在百万级甚至数十万级的数量。
二、多级缓存+html静态化
在高负载网站中,如果每次都从数据库加载数据,系统的负载肯定会极大降低,PageAdmin采用多级缓存+页面静态化来实现大负载。
1、栏目表这类基础表采用多级缓存保存
首先从本地缓存中加载栏目数据,如果本地缓存没有,再次redis缓存中加载,如果redis也没有,则直接从数据库读取并同步到本地缓存和redis缓存。
很多朋友会问,为什么要用redis,这里要说一下,cms如果分布式部署多个实例时,本地缓存无法保证缓存一致性,这时候就必须使用redis这类分部署缓存。
2、新闻、产品、下载这类不适合加到缓存的内容采用Html静态化
新闻,产品这类内容页面全部生成静态化,用户访问时候直接访问静态页面,不会对数据库造成压力。
通过这两点就可以保解决在高并发下数据库容易成为瓶颈的问题。
三:分布式部署
在高并发下,单台服务器在带宽,内存上都会有上限,这时可以通过添加服务器来实现分部署部署,把并发压力分散到不同服务器。
pageadmini在底层通过异步队列通知实现了缓存,配置,全文检索的同步更新,保证每个服务器上的数据一致。
上面就是PageAdmin在大数据和高并发下的架构设计,希望对大家有帮助。