带你认识真正的电商

       我是一名PHP程序员,从11年毕业到现在一直在从事php开发相关的工作,PHP让我对计算机语言有一个基本的认识,但对于众多语言来说,PHP语言的语法和特点只是冰山一角,工作6年多,自认为对PHP还是有一定的了解,而且做过的项目大多都是电商类的,因此在此分享一下我对电商项目的理解。

       电商网站对于众多网站来说确实也是一种对业务逻辑和技术有一定要求的项目,或许有的人做过很多项目,其中不乏有比电商业务更复杂的项目,或者有没有接触过电商类型的都好,以下都只是个人对电商项目的一些了解,欢迎各位大神指教。

       首先,做过电商的应该知道,里面的逻辑其实还是挺复杂的,就比如一个商品的浏览量怎么存,如果你觉得这不是一个问题的话,那您要不就是大神,要不就是水神,我们知道,当浏览量瞬间很大的时候,存在数据库中肯定是不现实的,有些人肯定知道,而且早就烂熟于心,有些人也会有疑问,但不管是谁,刚开始肯定是不会懂得,当你慢慢的接触到 大流量大并发的时候就会明白了。好了,废话少说,不现实的原因就是当浏览量大爆发的时候你不可能在每个人点击的时候都去修改数据库中的浏览量,当然也有人说,我可以把商品的浏览量存在一张分表里,可是这也是不现实的,具体不懂的可以看看《高性能mysql第三版》,这本书值得看。这里说一下,我不是书托。

       上面提到的只是一个小小的问题,接下来就进入实际的应用当中,说实话在我第一次接触电商的时候,立马就觉得电商网站为什么复杂了,举个例子:大多情况下用户在生成订单之前会对库存进行修改,这个时候就会用到事务了,用事务当然就会知道锁,既然有锁,就会有死锁,怎么解决,这估计是你的数据库设计的有问题,回去用explain分析一下sql吧,有人问死锁能解决吗,不能,是因为你的锁粒度没办法那么小,锁的开销也没办法那么小,虽然没办法彻底解决,但是却可以不断优化,至于优化到什么程度,那就看你的本事了。好了下一个问题,商城包括用户、商品、文章、活动、专题、特价、限时抢购、团购、优惠券、订单等,事实上,在实际的业务当中,还远远不止这些模块,看起来都不大,但是也不简单,商品模块有分类,用过ecshop的人都知道,分类下有模型,每个商品对应一个模型,当然还有sku,在实际场景中,sku库存是比较重视的,毕竟当你的项目上线之后,发现因为你的库存没有处理好,商品超卖了,用户会很生气,为什么我下单付款了然后告诉我没货了,这个问题就很大了。有一事儿也挺搞笑的,有两个同事告诉我要把普通商品存到队列当中去解决超卖的问题,先不说这样能不能解决,就假如你的普通商品有几十万到上百万乃至千万,把他放到队列里面,我也只能说实际上应用中不会这么做。当然,单单只是这么做的话也会出现超卖,所以解决问题不能只是片面的认为。

       没有出现过上面问题的,接下来就会遇到更难的问题了,就是抢购,抢购需要解决的就是用户在一小段时间内对数据库进行的并发操作,我们往往要根据tps和qps来分析才能更好的解决服务器并发压力,mysql支持每秒4万tps,你没有看错,但那只是官方进行测试的,你不能把它来作为参考数据,相反和显示有很大差距,1台4核8g的服务器,10m宽带的并发只是200左右,当然这是一台稍微好一点的服务器了,在测试并发中jmeter的结果是可以作为真实生产环境中的参考数据,当然也有apache的ab,都可以运行测试,目前我只用过这两种。当你发现一台服务器已经不能满足生产要求时,你可以搭建主从分布式实现高可用的负载,这篇文章到这里其实也差不多了,后面再说如果实现高可用分布式架构。

你可能感兴趣的:(带你认识真正的电商)