zoukankan      html  css  js  c++  java
  • 如何开发及维护一个可运营性很高的电商系统

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

    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

  • 相关阅读:
    TCP/IP 基础知识
    30 岁的码农人生 ——人生至暗时,你依然能窥见光明
    巨经典论文!推荐系统经典模型Wide & Deep
    带你领略拼多多2020校招笔试题,这样的难度你可以搞定吗?
    做业务、做技术和打杂,你的职场现状是哪种?
    内卷预警,本科生真的很不适合算法岗位吗?
    codeforces 1424J,为了过这题,我把祖传的C++都用上了!
    有了Git这个操作,我再也不怕代码混乱了!
    学会了这一招,距离Git大神不远了!
    好端端的数据结构,为什么叫它SB树呢?
  • 原文地址:https://www.cnblogs.com/zhangxiaolei521/p/5310938.html
Copyright © 2011-2022 走看看