如何开发及维护一个可运营性很高的电商系统

1、  一定要逐步考虑安排分库分表

(1)  用户表、商品表、订单表等基本表必须要考虑分库分表,要不未来随着量大很容易出现异常。

(2)  首页、列表页等聚合页面,通过数据冗余,在分库分表后多写一份,以达到查询时直接使用索引,2秒内返回结果的目的

电商99%以上的量都是读,只要通过分库分表和多写些冗余数据的方式就可以提升性能,解决掉目前电商系统的根本问题


2、  技术语言

前端PHP,后端JAVA这样搭配着比较好。

如果已经全部是PHP或者JAVA了,也就别再换了,性价比不高

直接采用linux系统就好。初创企业,用云服务即可。


3、  日志流水的添加

所有的写操作(增、删、改)都要记录完善的日志,且记录下来:此次操作是否成功,以及耗时多少毫秒,如果不成功,还要记录当前所有环境变量,如果是数据库操作,最好把sql语句都记录下来。读操作如果量大,可以考虑把后台返回结果超过2秒的读请求记录,监控这块的量,超过2秒还没返回,用户多半就跑了

这个非常有必要,一个“可运营”、“可维护”的电商系统差别就差在这里。

4、  必须要做风控

日志流水的作用就出来了。通过读取日志流水,生成几个必备的监控

(1) 每隔10分钟,监控异常的:注册、登陆、下单、支付以及异常的金额等,让风险控制在10分钟内。

(2) 按天生成研发报表。

**接口

昨日执行次数

成功率

失败率

0-500毫秒

500毫秒-1秒

1-2秒

2秒以上

(3) 每天生成产品运营报表

多少人登陆

多少人下单

多少人支付

多少人付款

登陆失败多少人

下单失败多少人

取消订单多少人

等等明细数据。产品运营每天检测这些数据


5、  初步的架构

(1)          接入层,别考虑apache,直接升级到nginx

(2)          逻辑层用php,java都行

前台最好是ajax直接请求逻辑层jason数据,千万别用基础的框架打包一个html直接返回给前台。系统会出现白屏然后瞬间有内容了,前端性能优化可以参考:雅虎前端优化规则 (百度一下就行)

(3)          cache用redis最好(数据结构丰富),memcache也行(session等可以放到memcache里)

 cache的更新采用key-value,后台一旦修改,实时更新。千万别用多少分钟后让key全部失效,全部更新,那样体验太烂,经常会出现数据不同步。

(4)          数据库mysql直接用innodb就行。分库分表后sql语句就不会出现嵌套查询、关联查询(这个是系统慢的最根源问题)


6、电商系统必须要注意的2个技术问题

(1)、同一个请求被发送了多次

可能出现的地方:(1)和别人接口对接,别人同一份数据发送了多次
(2)用户在“提交”按钮里点击了多次
(3) 其他可能的一些恶意调用,尤其是涉及支付环节的,危险性非常大

解决办法:(1)  在网页端,用户点击“提交”后,将按钮disable掉
(2) 对于收到的数据插入到数据库或者其他一些地方,做好唯一键控制

把用户提交的内容+精确到秒的时间合并成一个字符串,然后md5一次,插入到数据库里作为唯一键控制。

(2)、同一秒内有多次请求

这个就是并发控制,涉及到抽奖等等需要控制到数量的地方,控制不好,会出现抽奖抽多了,卖东西卖超了等情况
出现的原因也很清晰,同一秒内收到多个请求,分布式的,可能不同的请求会分布到不同的机器或者程序上去执行,都去读取一下计数器(记录卖的数量),比如:1,每个请求都各自执行读取操作,发现都是1,没有超出1的限制,然后都来修改计数器为0,然后各自都去发货或者发送奖品,结果造成了卖超。

解决办法:

利用数据库或者其他有并发控制的程序来做一个锁的逻辑

利用数据库的话,有一个小技巧提供给大家
           伪代码如下: 

[php] view plaincopy

1.    //字段A里存储的是计数器数字  

2.    select  A  from  表B;  

3.    $a  = A;    

4.    if ( $a  <=  N && $a > 0)  

5.    {  

6.         update A=A-1  where A<=N and A >= 0;  

7.         //如果执行成功,则可以领取奖品  

8.        //这样可以控制并发时只卖掉N个奖品  

9.    }  


电商项目的运营可以参考之前写的这篇文章:http://blog.csdn.net/eroswang/article/details/8185676


   

原文地址:https://www.cnblogs.com/wangfengju/p/6172281.html