
在中大型网站中内容和并发往往会达到千万级别市面的cms基本都是单体架构都不适合大型数据和高并发不分库甚至不分表以wordpress为例每个栏目的数据都放在一个表中当数据达到10万以上wp会非常卡就算安装各种优化插件也解决不了根本问题国内支持大数据的屈指可数其中比较有代表性的有PageAdmin CMS为了应对大数据和高并发场景下面看看pageadmin cms的架构和底层是如何设计的一、数据层面的拆分数据通过下面4个层面进行拆分1、数据库层面拆分主站分站单独使用不同的数据库或架构如主站app_db_mian 分站1app_db_1 分站2app_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在大数据和高并发下的架构设计希望对大家有帮助。