电商项目怎样处理或用啥技术解决高负载、高并发、高可用性问题
本文转载自微信公众平台“京东技术”
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x00 一切源自网卡
高并发的流量通过低调的路由器进入我们系统,第一道关卡就是网卡,网卡怎么抗住高并发?这个问题压根就不存在,千万并发在网卡看来,一样一样的,都是电信号,网卡眼里根本区分不出来你是千万并发还是一股洪流,所以衡量网卡牛不牛都说带宽,从来没有并发量的说法。
网卡位于物理层和链路层,最终把数据传递给网络层(IP层),在网络层有了IP地址,已经可以识别出你是千万并发了,所以搞网络层的可以自豪的说,我解决了高并发问题,可以出来吹吹牛了。谁没事搞网络层呢?主角就是路由器,这玩意主要就是玩儿网络层。
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x01 一头雾水
非专业的我们,一般都把网络层(IP层)和传输层(TCP层)放到一起,操作系统提供,对我们是透明的,很低调、很靠谱,以至于我们都把他忽略了。
吹过的牛是从应用层开始的,应用层一切都源于Socket,那些千万并发最终会经过传输层变成千万个Socket,那些吹过的牛,不过就是如何快速处理这些Socket。处理IP层数据和处理Socket究竟有啥不同呢?
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x02 没有连接,就没用等待
最重要的一个不同就是IP层不是面向连接的,而Socket是面向连接的,IP层没有连接的概念,在IP层,来一个数据包就处理一个,不用瞻前也不用顾后;而处理Socket,必须瞻前顾后,Socket是面向连接的,有上下文的,读到一句我爱你,激动半天,你不前前后后地看看,就是瞎激动了。
你想前前后后地看明白,就要占用更多的内存去记忆,就要占用更长的时间去等待;不同连接要搞好隔离,就要分配不同的线程(或者协程)。所有这些都解决好,貌似还是有点难度的。
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x03 感谢操作系统
操作系统是个好东西,在Linux系统上,所有的IO都被抽象成了文件,网络IO也不例外,被抽象成Socket,但是Socket还不仅是一个IO的抽象,它同时还抽象了如何处理Socket,最著名的就是select和epoll了,知名的nginx、netty、redis都是基于epoll搞的,这仨家伙基本上是在千万并发领域必备神技。
但是多年前,Linux只提供了select的,这种模式能处理的并发量非常小,而epoll是专为高并发而生的,感谢操作系统。不过操作系统没有解决高并发的所有问题,只是让数据快速地从网卡流入我们的应用程序,如何处理才是老大难。
操作系统的使命之一就是最大限度的发挥硬件的能力,解决高并发问题,这也是最直接、最有效的方案,其次才是分布式计算。前面我们提到的nginx、netty、redis都是最大限度发挥硬件能力的典范。如何才能最大限度的发挥硬件能力呢?
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x04 核心矛盾
要最大限度的发挥硬件能力,首先要找到核心矛盾所在。我认为,这个核心矛盾从计算机诞生之初直到现在,几乎没有发生变化,就是CPU和IO之间的矛盾。
CPU以摩尔定律的速度野蛮发展,而IO设备(磁盘,网卡)却乏善可陈。龟速的IO设备成为性能瓶颈,必然导致CPU的利用率很低,所以提升CPU利用率几乎成了发挥硬件能力的代名词。
\u0026gt;\u0026gt;\u0026gt;\u0026gt;0x05 中断与缓存
CPU与IO设备的协作基本都是以中断的方式进行的,例如读磁盘的操作,CPU仅仅是发一条读磁盘到内存的指令给磁盘驱动,之后就立即返回了,此时CPU可以接着干其他事情,读磁盘到内存本身是个很耗时的工作,等磁盘驱动执行完指令,会发个中断请求给CPU,告诉CPU任务已经完成,CPU处理中断请求,此时CPU可以直接操作读到内存的数据。
中断机制让CPU以最小的代价处理IO问题,那如何提高设备的利用率呢?答案就是缓存。
操作系统内部维护了IO设备数据的缓存,包括读缓存和写缓存,读缓存很容易理解,我们经常在应用层使用缓存,目的就是尽量避免产生读IO。
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 滁宁城际铁路一期项目汊河新城特大桥箱梁架设完成
- 广西鹿寨贫困户玩直播带货变身创业新星以电商帮老乡卖滞销农产品
- 互联网怎样解决“家政服务上门速度慢”的问题
- 盐都区|15个高质量项目签约落户盐城高新区
- |盐城在建省级农业农村重大项目已完成投资65.9亿元
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 南通大学|创业项目聚焦二孩家庭,南通大学喜获国赛金奖
- 农民工工资|海门三项目被省住建厅列入拖欠农民工工资预警名单