为什么80%的码农都做不了架构师?>>>
电商平台多用户商城系统架构行业现状
浏览全球知名电商机构(天猫 淘宝 亚马逊 当当 阿里巴巴...),包括开源电商软件(Magento、OpenCart、Xcart、Zencart、Prestashop....),知名的就那几家或者几十家乃至几百家,为什么这么少的可怜?电商技术平台建设的难度究竟在哪里?
大多数单位都是慎重的选一款电商软件(如:Ecshop)来进行二次开发,但是就算这样,大多企业都停留在修BUG、填前任留下的坑、被所谓的代码规范给约束的死去活来...
但是只要提到如淘宝这种多用户商城系统(也许你会提到.NET、Java,那个成本,也许只有企业领导者才知道到底有多痛!),那少的更是可怜了...
电商平台多用户商城系统架构企业困境
中小企业电商想PK亚马逊、阿里巴巴、天猫、淘宝、京东、当当...先不考虑市场、营销、物流、策划、货源,单说说电商技术架构之路,难!难!难!
在中国这片土地上,有不少单位实践了电商平台技术架构之路,都想打造自己的电商平台!却大多失败了!
其中不乏各路大神、各路专家、各路前单位(国企公司、上市公司)牛逼哼哼者、精神领袖、意见领袖、畅想领袖、批判领袖、预测领袖...
那么问题来了,为什么企业耗费了这么多的研发资金,招了华丽丽的明星研发队伍,就是很少有企业真正的打造出可用的企业满意的电商平台呢?
我们知道,企业拥有自主版权的多用户商城系统的电商平台是多么重要!
- 这是企业的固定技术资产!如虎添翼中的“翼”之一!
- 这是企业随时东山再起的保证之一!
- 这是企业领导者出去吹牛逼、拉投资的产品底气之一!
电商平台多用户商城系统架构博主介绍
博主是1个有8年研发经验的PHP工程师,话说有人理解PHP为“拍黄片”,所以非诚勿扰的美女都对PHP工程师灭灯了,幸好博主已经有家室了,妹子们,基友们,你们没机会了...
博主曾经做过一些年头的外贸电商公司技术平台主要架构设计、开发者、顾问...
博主曾经有幸经和国企公司技术大牛、上市公司大牛、行业专家(京东、淘宝)都进行过共同码代码的DIAO丝岁月...
电商平台多用户商城系统架构通用原则
本文着重以以下原则来打造一个尽可能“抠门“基础上的牛逼的牛逼型多用户商城电商平台!
- 多:承载的用户多
- 快:用户访问速度快
- 好:功能设计好扩展
- 省:运维省、开发省、硬件省
电商平台多用户商城系统架构原则一:多
电商平台多用户商城系统架构之承载更多的用户
核心思想:资源是有限的,用户是无限的;
破:每个用户浪费最少的服务器资源(不浪费更好)方可
- 找运维老大(5年+)调优你的服务器参数(Nginx、PHP、Mysql.....)
- Mysql做成读写分离,并分别调优
- 程序逻辑按照用户所属企业或地区(华东区)为单位,必须对海量用户进行Mysql业务分表
- Mysql并发不强、链接数很宝贵,尽一切可能不要让用户直接和Mysql通信,每个页面尽可能的少执行SQL语句,尽量走缓存
- 系统搜索、筛选、过滤等耗费Mysql资源的业务功能,尽可能的转化为Sphinx搜索或MongoDB、Redis这种缓存服务
- 内存很贵,CPU很重要,尽可能的保证你每条代码都是性能最好的,尽量的使用最新版本的系统内置方法!(如更省内存的yield)
- 避免恶意蜘蛛爬虫、恶意采集(Demo1,Demo2)对系统造成不必要的资源浪费,做好Robots(Demo1,Demo2,Demo3)恶意蜘蛛爬虫爬取频率限制,或者限制每个用户访问频率以及恶意访问者加入黑名单封号系统,以便让更多的真实用户访问我们的站!
- 某些业务如果可以容忍更新延迟的话,建议首先在用户客户端先JS、Cookie等保存,最后隔10秒或者每10个步骤在一次性批量同步到服务器,这样可以减少对服务器资源的消耗!
- 业务冗余数据不建议分散的做在Mysql中,建议做在Redis、MongoDB中,统一管理操作,而且利于大数据统计报表分析!
- 可以保存到用户客户端的数据,尽可能的保存到用户客户端(Cookie、localStorage、sessionStorage),不要什么都塞给服务器或者从服务器频繁读取...
- 如果平台有大文件下载服务,记得一定要使用X-Sendfile来下载文件给客户,节省服务器资源!
电商平台多用户商城系统架构原则二:快
电商平台多用户商城系统架构之响应速度更加快
核心思想:减少用户等待服务的时间;
破:资源更少(没有更好),更小,传输更快方可
- 买更好的服务器、更多的CPU、更大的内存、更好的硬盘、更快的宽带、更好的域名DNS....
- 服务器安装好全系列最新版 Nginx+PHP(7系列)+Mysql+MongoDb+Redis+Memcached+Sphinx!
- 开发技术选择YAF(PHP的C语言框架)、YAR(PHP Soap RPC功能C语言级框架)、YAC(PHP C语言级的共享内存框架)、Yaconf(PHP C语言级的常住内存的用户自定义常量)、Taint(PHP C语言级的XSS过滤框架),尽可能的选择PHP扩展来实现你的业务!没事多搜搜pecl,多看看手册!
- 静态资源(JS、CSS、小图标等)一定要放到CDN上,实在穷就用百度等免费的CDN尽可能多的分流静态文件
- 尽可能的减少用户请求的资源数目(如CSS、JS可以合并输出,小图标可以使用CSS图片精灵的方式减少请求个数)
- 服务器设置GZIP等尽可能高的压缩你的资源输出
- 巧用HTTP协议的状态码,配合实现用户浏览器端页面级缓存,不仅可以更快,而且省很多资源!
- 如果实在避免不了Sql,那么程序上保证每个Sql语句都必须走索引且是高效的,尽量使复合索引和覆盖索引!必须避免表锁!
- 业务尽量以读为主,尽量少的写操作,如果是日志捕捉、用户行为分析这种与核心业务关系不大的写操作,强烈推荐写到Redis、MongoDB!
- 一定使用InnoDB引擎(支持行锁),但是绝对不要使用InnoDB外键约束(产生锁的原因之一),不要使用Event、触发器(资源杀手)!尽可能少的使用存储过程(要注意考虑并发)、视图(大数据测试下发现偶尔不走索引)!
- 放弃PHP默认的低效存储Session机制,用户Session存储更改为存储到Redis,而且更有利于Session综合管理(跨域访问)
- 一定要使用PJAX技术,不但有AJAX的优点,还利于SEO,利于跨设备,跨平台,请求资源更小,更快!
- 也许你可以试试MySQL开源存储引擎TokuDB了,基本可以代替INNODB,而且存储数据更省空间,插入更快!
- 如果你既觉得MYSQL的LIKE ‘%%’慢,又觉得FULLTEXT对中文支持不友好,还觉得专业搜索引擎Sphinx等技术门槛高,那么可以试试Mysql插件Mysqlcft试试,完美支持FULLTEXT中文搜索,功能和LIKE‘%%’一样,速度提升数十倍!
电商平台多用户商城系统架构原则三:好
电商平台多用户商城系统架构之功能设计好扩展
核心思想:功能更全,更强大,开发更方便,交接更容易;
破:设计灵活、简单可依赖的系统架构
- 系统一定要基于Module、Hook机制的(如灵活的控制header),每个工程师只需专注自己的Module和灵活的使用系统资源,功能开发就像搭积木一样快,给出一定的规则后,模块还可以外包出去...
- 程序类扩展一定要使用工厂模式机制开发(虽然开发过程有点慢,但是使用效率高),随时可以以业务功能点为单位废弃、反转、升级、排序、扩展、更改功能实现方式等诸多好处
- 每个PHP文件必须使用命名空间特性,避免多人协作时候代码冲突
- 每个action下可以系统默认以HTTP提交协议来执行默认方法!利用反射简单高效(POST请求就执行actionPost,GET请求就执行actionGet...最后在每个具体action里进行switch判断执行)
- 研发出自己的Cookie分析系统,又利于业务增长等等,业务逻辑参照淘宝、天猫、百度对我们无处不在的用户喜好分析就知道了
- 开发中尽可能的选择开源软件作为开发支撑,首选PHP扩展或PECL,其次是搜大神写的、支持率高的PHP文件写的类库,最后才是自己手动发明写类库!(如,博主的原创PHP类库)
- 开发中尽可能的使用最新版本的特性,尽可能的保证项目可以安全无痛部署到最新PHP版本!因为你可以免费的最快的拥有最新版的好处!(当然也有少许坏处 哈)
- API尽量使用RESTful架构,返回结果尽量全是JSON格式(JSON利于和JS通信,如果追求性能,可以使用igbinary)
电商平台多用户商城系统架构原则四:省
电商平台多用户商城系统架构成本节省之运维节省
核心思想:让运维更简单,更高效,运维成本更低;
破:减少业务复杂度
- 多做备份,选择有一键备份功能的服务器
- 慎重看待集群,鸡蛋放在1个篮子(推荐:利润不大的时候,不要分开部署) VS 鸡蛋放在多个篮子里(主流:参考携程事件)...
电商平台多用户商城系统架构成本节省之开发节省
核心思想:用最低的技术门槛、最短的开发时间,开发最牛的业务平台;
破:系统架构模块化,互不干扰,手册人手一份
- 做好技术开发共享文档
- 平台基础架构好后,只需稍等PHP的小白也可以按照Module来搭积木,因为每个模块既是独立,也是有Hook联系的
电商平台多用户商城系统架构成本节省之硬件节省
核心思想:在最经济的硬件上,尽可能的榨干软件性能;
破:程序设计要规划充分、随时一键部署扩充硬件
- 尽可能的榨干软件(Nginx+PHP(7系列)+Mysql+MongoDb+Redis+Memcached+Sphinx)性能,在利润产生前乃至用户量未破百万(保守估算)的时候,完全可以抗住一阵子了!
问题来了,如果电商平台访问量到达一定数据规模且有利润了,上述仍然解决不了我的访问量大的问题怎么办?
说半天也没有看到博主提到 反向代理 LVS 主从 热备 F5 DDOS 监控 容灾 负载均衡 分布式啥的....
OK,一句话:4个选择
- 自己是无敌超能大神,时间多,技术好,精力旺盛...自己全部搞定!
- 招运维团队花上不小的代价+不小的时间来给你专业定制,架设一套即可!
- 也许你可以用到阿里云全套服务产品的级别了!背后是经过数次苛刻实践的淘宝、天猫、阿里巴巴 双11 双12 国庆 过年等真正高手团队打造的产品!
- 可以选择亚马逊全套服务产品。
程序设计时候最好记得用工厂模式,而且很多业务接口、参数灵活处理可配置的,到时候好用云服务来代替本地服务器低效的运算法则!
真正的把1个平台做活,是很不容易的!且写且反思! 如果感兴趣,可以关注 ,https://github.com/letwang/HookPHP 既是按照上述理念量身打造的一款平台型框架。