为什么有些客户觉得让程序员抄一个淘宝很简单?
大概因为他只能看到查询,下单,结账这三个功能,而看不到背后涉及到的高并发,事务,数据不一致,大数据存储与查询等等场景带来的风险。
接下来,我们简单分析下这些风险。
高并发这个和12306卖火车票有点像,既然是卖东西,就势必涉及到数据一致性的问题。如果一个产品只剩下最后一件了,,但是此时有两百个各自独立的线程跑过来说我要下单结账,那么这最后一个该给谁呢。我们说的再详细一点,购买的逻辑简要的过程如下:
1 将产品放入购物车,此时只要产品余量不为0,就可以执行成功,也就是说,就算此时产品只剩下1件,也可被200个人放入购物车。
2 点击结算,发送请求到服务器,生成订单
3 将订单返回给用户,由用户确认订单信息无误后
4 用户发起结账请求
5 网站与银行沟通,申请扣款
6 银行反馈扣款成功
7 告知用户订单结账完毕
这个过程有两个点非常重要,分别是
a)生成订单,即如果此时200个请求来抢同一个产品,那么就会涉及到数据一致性,通常需要用分布式锁来解决,
b)与银行通信过程其实并不是原子的,因此需要保证这个过程的原子性,并且不会出现明明已经扣款,却显示失败等让用户恐慌的情况。
大数据存储与查询淘宝每天的查询并发量难以估计,而不算成交量,仅仅是把这些数据写入“我的足迹”这里,每天涉及到的数据存储都是非常可怕的。不仅如此,有存储就有对应的查询,这已经不是一个简单的创业公司用一个MySQL+redis就能实现的了。想象一下你打开淘宝,查看自己的订单/足迹的时候,那其实是从浩如繁星的数据中,火速帮你精确找出来的啊。
因此,对于不懂技术的老板来说,微信,淘宝,百度搜索引擎,都是很容易抄的,人家都做出来了,你抄一抄就好了嘛。
以上是我的浅见,欢迎各位在下方评论区吐槽留言。
我是苏苏思量,来自BAT的Java开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有