首页 » Web前端 » 京东php后端技巧_京东上千页面搭建基石CMS前后端分离演进史

京东php后端技巧_京东上千页面搭建基石CMS前后端分离演进史

访客 2024-11-23 0

扫一扫用手机浏览

文章目录 [+]

CMS即内容管理系统(ContentManagementSystem),目的是用于快速进行网站培植或者网页开拓。
对付京东网站部门来说,CMS核心目的是用来快速开拓和上线各种页面,诸如各种垂直频道页,访问www.jd.com将看到如下页面,如点击“服装城”、“家用电器”等都会跳转到一个垂直频道页;这些页面中有许多页面风格是类似的,因此很适宜利用CMS进行快速搭建。

对付我们来说,CMS最核心的目的便是进行数据和模板的统一管理、页面的统一发布,从而减少之前的很多重复事情。

京东php后端技巧_京东上千页面搭建基石CMS前后端分离演进史

京东CMS是2014年提出来的,经由两年多的完善,目前已经发展为一个集标准做事管理、标准组件做事和智能投放于一体的标准化导购运营系统。
具有以下特点:

京东php后端技巧_京东上千页面搭建基石CMS前后端分离演进史
(图片来自网络侵删)

搭建快速,统一发布,统一架构;

前后端分离,后端不再卖力页面渲染,只供应高性能、可复用的API;

移动端页面支持;

数据剖析、智能投放的特点。

业务支持场景:

首页、频道页、垂直页、活动页的搭建及单品页、列表页部分可掩护的业务等。

从基本功能及架构来看,可以分为三个阶段:

CMS 1.0——虚拟分类系统

CMS 2.0——CMS系统

CMS 3.0——CMS-portal系统

CMS 1.0—虚拟分类系统

虚拟分类系统是一个独立的匆匆销商品、匆匆销笔墨掩护系统,与详细前端业务架构分开,哪条线接入虚拟分类,须要根据自己的业务逻辑单独开拓、掩护、支配自己的架构。
说白了,虚拟分类系统供应一些根本数据;然后比如我要搭建一个家电频道页,则须要开拓一个Web项目,然后调用虚拟分类系统获取数据然后进行模板渲染处理处理。
因此虚拟分类系统当时只是一个根本数据掩护平台,无法实现信息的共享、复用和集约化管理。
这就会存在各种各样的频道页系统,导致管理混乱,性能上各有差异,涌现过很多次事件。
而且各系统须要独立配置,导致事情量大,占用资源多,无法快速相应业务需求。

下图是当时不同业务体系的架构:

可以看出部分频道页和活动页用的nginx+tomcat,部分频道及垂直站用的nginx+php-fpm,与虚拟分类联系不大,总体遵照各业务层获取虚拟分类的数据,分别独立上线、支配、掩护,运用层直连mysql,mysql 抗不住,会增加一层 memcache。

CMS 2.0—CMS系统

Cms2.0总结了1.0时的不敷,从节省资源、掌握本钱的角度考虑,把导购类的个体页面业务进行了统一,模板能复用的复用,以前虚拟分类系统的频道也须要迁移到新的系统。

我们做了以下改动:

CMS 2.0数据构造适宜虚拟分类体系,方便新老数据兼容;

升级架构,统一配置、发布流程;去memcache为redis,做大量性能压测来调优php-fpm配置,单机TPS能达到3000+; 配置定时任务,担保redis数据实时性;

单点发布,一键预览增强采销掩护数据的机动性;

单机闭环,单机闭环做事设计是CMS整体架构的核心部分,须要展示的内容在本机获取、封装、校验;

模块化、动态数据类型初期版本(CMS 3.0会细说)。

架构图:

比拟1.0,新的CMS可以让频道页的开拓周期降落2~4周,大大提高了业务需求的相应速率;它看起来更独立,更像一个整体,在容灾、规避风险方面做了严谨的优化;同时让采销在掩护数据时,更方便、更大略。

后续由于个性化的需求越来越多,大量的频道业务须要开拓职员一个一个套模板来实现,大大加大了开拓职员的事情强度,之前的模板复用办法已经无法知足业务的需求,同时太大略的数据模块,须要手工来绑天命据类型也增加了开拓本钱,这时候须要我们必须做出改变。

CMS 3.0—CMS-portal系统

CMS 2.0后也存在很多痛点,因此我们也想在CMS3.0上办理这些问题:

实质问题便是要快:快速支持、相应业务越来越多的垂直化页面改版;

前后端分离,页面渲染让前端实现,解放后端让后端做高大上的事情;

减轻运营职员的事情量,系统大略好用,提高导购类商品的转化率;

其他系统的支撑,实现CMS的集约化管理;

兼容手机端;

站点管理、统一架构、容灾、高性能、水平扩容。

通过两版CMS系统的开拓,我们创造CMS无外乎管理的是数据和模板,其余须要好的预览、一键发布支持。
而传统数据管理都是静态数据类型,而我们做了动态数据类型的设计;其余我们做了模板管理中央,并抽象了模板、楼层、元件、模块的观点,从而实现更好的复用性。

统一架构

紧张分为如下几部分

CMS系统:统一管理CMS干系数据,并进行页面的天生和发布;

数据Worker管理中央:调用第三方做事进行数据校验(如库存不敷补货),并调用CMS系统进行页面天生和发布,发布到单点做事器上;

单点做事器:干系页面的单机闭环实现,即CMS发布的页面会存储在这些单点做事器上;每个机房会支配一台;

页面定时更新Worker:定期同步单点做事器内容到静态运用做事器集群,并保存历史版本,当涌现问题时可以切换回上一个版本;

静态运用做事器集群:静态托底实现,会存储干系的静态页面文件,当单点做事器挂了时,降级到该集群;

异步加载的个性化做事:有些数据不能存储到静态页,如价格/库存/推举等数据,此时通过异步加载这些数据,实现个性化做事;

接入层Nginx:接入层Nginx卖力要求的路由和做事的降级。

紧张思路

引入动态数据类型;

页面模板管理中央,模板、楼层、元件、模块设计,实现可复用;

利用元件实现前后端分离;

动态做事和业务数据闭环;

预览、一键发布,单点管理;

H5版直接搭建,native版 API 支持;

大数据智能选品运用。

动态数据类型

所谓的动态是指能灵巧扩展的,不须要上线也不须要修正数据库字段,支持自由扩展;这样做的好处是能够快速相应电商网站的日益灵巧多变的匆匆销需求。
比如匆匆销语:

目前常用的数据类型为笔墨链、小图文、商品池等。

操作界面:

动态数据类型数据构造:

fields是json串,用于动态定义字段。

利用元件实现前后端分离

利用动态数据类型定义了数据之后,须要在模板中利用它。
而在我们CMS系统中进行了页面、模板、楼层、元件、模块的划分。
模块是某种数据类型的详细化,即有了数据的数据类型。
元件是由模块和HTML代码段(根据模块数据进行渲染的一小段模板)组成;楼层通过一系列元件组成,而模板会引入多个楼层,当然也会引入一些JS、CSS等,终极通过模板渲染出相应页面。

type是数据类型表,module是模块表,source是数据表,按照上面的逻辑我们是通过数据类型获取到数据模块,并同时能拿到该模块所对应的商品数据(商品池)。

有了这个元件之后,就可以彻底解放后端,页面渲染事情完备交由前端来开拓,实现了前后真个分离。

即CMS研发只卖力平台和根本数据(动态做事)的掩护,业务职员进行模块的掩护,而前端职员独立完成元件开拓、模板设计、开拓和发布。

动态做事

跨线条业务间的资源复用、独立调用时须要供应干系的API,如三级地址做事,类目做事、动态加载的数据(如爆款特卖、今日推举等)等。
数据格式知够数据闭环原则。
Lua+redis架构实现,单机(16U)QPS能达到20000+。

频道业务数据闭环

数据闭环,即数据的自我管理,或者说数据都在自己系统掩护,不依赖与其他任何系统,去依赖化,这样得到的好处是别人抖动与我没紧要。
因此我们先要数据异构。

数据异构是数据闭环的第一步,将依赖系统的数据拿过来,按照自己的业务需求存储起来。
频道业务须要异构的数据紧张是三部分:商品基本信息、第三方数据、大数据。

数据原子化处理,数据异构的数据是原子化数据,这样未来我们可以对这些数据再加工再处理而相应变革的需求。
我们有了一份原子化异构数据虽然方便处理新需求,但正好由于第一份数据是原子化的,那么它会很分散,前端读取时mget的话 性能不是很好,因此我们又做了数据聚合。

数据聚合,是将多个原子数据聚合为一个大JSON数据,这样前端展示只须要一次get,当然要考虑系统架构,比如我们利用的Redis改造,Redis又是单线程系统,我们须要支配更多的Redis来支持更高的并发,其余存储的值要尽可能的小。

容灾

运用层容灾

数据校验,CMS在页面预览有一层严格的数据校验逻辑,比如数据格式、数据大小、敏感词等,担保页面天生100%没有问题。

版本降级,静态页面涌现问题,除了页面本身数据有问题外,潜入的js、css涌现问题也会影响页面展示,这时候会版本降落为前一天的精确版本;

异步做事,异步化数据容灾方面紧张是监听做事的状态及相应韶光;降级访问有隐蔽该功能和切换做事器实现;

做事器容灾

紧张是通过多机房支配,监控80端口,涌现问题可以自动把流量水平切走。

智能选品

智能选品,是做事于前台的流量运营,为采销及运营职员供应运营支持,为每一次访问供应最得当和匹配的商品、品牌以及匆匆销活动。
是根据用户的行为推举出干系的商品及活动。
可以分为群体特色和个体特色。
群体特色分为两部分,数据部分及规则部分。

数据部分是从大数据平台异构过来,当然这个数据是海量的,我们选择热点TOP 5000的数据来异构。

规则部分是通过京智后台创建,在审核通过后,触发MQ,通过ES 跑出对应数据,然后由频道页动态做事系统对外供应json格式的http做事。
前端业务以异步的办法通报干系规则参数进行调用。

智能选品实现数据化、定制化、个性化、自动及半自动化内容运营。
它可以仿照人脑选货逻辑,以运营指标为导向(GMV、订单转化率、点击量、毛利等),分区域、分用户选取最匹配的内容。
目前运用于京东超市、行业频道以及618大匆匆主会场,带来优于人工选品的转化效果,并解放采销运营职员日常繁琐的运营事情,提高了整体效率。

碰着的坑

rsync文件同步

上面的先容过,我们的静态页面为了保持数据的同等性由单点做事器通过rsync同步静态文件到其他做事器,有时候会创造做事器负载无端的被打满。

剖析问题创造如果定时任务脚本的同步未在规定韶光内完成,crontab接下来的还会实行此脚本,这样就会产生相同的rsync的进程。
按照这种状态,永劫光就会衍生出很多个rsync进程,就会导致负载过高,乃至有些做事器会挂掉。
这时候我们用到了rsync的进程锁,在目录下天生一个rsync.lock文件,当crontab实行时,rsync会判断锁文件是否存在,如果存在解释本次同步未完成,则不实行rsync。

数据一定要闭环

别人的接口抖动以及返回数据的非常,影响到前端展示对我们来说说是不能容忍的,这就须要我们针对各种情形逐一校验。

CMS总结

目前通过CMS搭建、正在搭建以及利用CMS API支持的PC端、移动端页面约有上千个,这对CMS来说意义重大,随着业务需求量的越来越大,也给我们带来了新的期望。
接下来,我们会从可视化编辑、数据统计剖析、关键词管理、商品下架预警等方面进行干系的优化事情。

作者:于林坤,2012年加入京东,网站移动研发部频道业务技能卖力人,先后多次主导京东商城首页、频道页技改及架构升级,在高并发系统架构、前端系统架构与优化方面有丰富履历,PHPer。

Apache Spark 2.0正式版发布下载:

15 个 Android 通用盛行框架大全

浅谈软件架构师的本色与职责

深受C/C++程序员欢迎的11款IDE

标签:

相关文章

QQ伪装黑客代码大全技术与风险警示

网络安全问题日益凸显。QQ作为一种流行的社交工具,成为了黑客攻击的主要目标之一。本文将针对QQ伪装黑客代码大全进行深入剖析,揭示其...

Web前端 2025-03-02 阅读1 评论0