小Q今天晚上打开京东商城的PC端首页,挑选几本自己比较喜欢的技术类书籍(比如Spring Cloud Alibaba微服务架构实战派(上下册)),并查看商品详情时,发现商品详情中的商品属性值都丢失了。凭借小Q多年的电商经验,立马反应过来,去查看手机端的同一个商品的商品详情,发现手机端是正常的。小Q还特意去验证了多个商品,发现不同品牌和类目的商品,在PC端都打不开详情。顿时我就在想,京东商品团队的程序员,2022年第一季度的绩效会很差了。
这就是程序员的生活,作为程序员总希望自己的技术有用武之地,但是又很害怕出现这种技术故障,虽然故障多出几次,老板就会多重视一下技术,并投入资源去升级技术,但是谁也不想做第一个吃螃蟹的人,因为过来人都知道,第一个吃螃蟹的人,都会过的很苦。
本文只是刚好碰到了“京东商城商品详情一分钟不可用的技术故障”,目前已经恢复,只是拿这个场景探讨技术,没有其它目的。
为什么会出现“手机端商品详情可用”而“PC端商品详情不可用”的现象
在电商服务中,如果流量非常大,并为了提高访问商品的速度,一般我们会做如下技术优化:
- 引入分布式缓存,比如Redis;
- 将商品信息存储在Redis中,并利用Redis的高性能的特性,提高访问商品的速度;
- 为商品服务自建一个独立的Redis集群,通过缓存隔离,进一步的提升性能;
- 用CDN缓存商品详情页的静态数据,并使用CDN加速,提前将这些静态数据传输到用户就近的CDN节点上;
- 隔离热点商品和普通商品,并提前预热热点缓存;
- 隔离手机端商品缓存流量和PC端商品缓存流量,针对不同类型的流量,采用不同的高可用技术手段。
好吧,为了提升性能,技术人员可以隔离手机端和PC端的访问商品的流量,同理也会隔离其它高流量的服务,比如交易服务和订单服务等,那么隔离流量的原因是什么呢?主要包括如下:
- 手机端的流量要远大于PC端的流量,这个是不争的事实(毕竟我们现在已经进入智能手机时代);
- 京东APP访问的后端的一系列的服务(包括交易服务、订单服务、商品服务等)可以用最好的机器,集群中服务节点数可以更多,相反PC端对应的后端服务的机器以及集群节点数就要偏少一点。
这样我们就不难理解,为什么会出现“手机端商品详情可用”而“PC端商品详情不可用”的现象。
如何隔离流量
隔离流量的技术手段有很多,主要包括如下方式:
- 用网关隔离入口流量,当然这里的网关可以有很多种,比如路由器、负载均衡器(Nginx)以及业务网关(比如Spring Cloud Gateway);
- 用服务治理,从微服务层隔离流量,比如治理Dubbo服务并隔离流量;
- 全链路流量隔离,比如通过一个全局唯一ID(手机端和PC端规则不一致),来识别流量,这样不仅从服务的角度来隔离流量,而且从中间件和存储设备的角度去隔离流量。
总结
本文从生活中一次普通的购物经历,去联想到一些技术问题,希望给大家一些借鉴和帮助。
大家好我是小Q,今天我来和大家继续聊聊“Spring Cloud Alibaba”。
小Q和博文视点学院合作,会采用录制加直播的模式,给书友分享技术以及一些学习路径的心得。
小Q最后告诉大家,大厂不一定好,适合自己才是王道。 知识输出是笔者的初衷,借助知识输出,能够认识更多的牛人,能够和牛人沟通,也是自己技术提升的一个机会。
下一期:几张图搞定Spring Cloud Alibaba配置中心的架构原理