合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
众所周知,中国人口很多,人口资源相当丰富,十几亿人口。现如今的互联网/移动互联网发展的也很庞大,就因为人多,在大家都在使用一个app的时候,就会造成拥堵的现象,就跟超市一样,人多必然会拥挤,东西少,你需要抢购,你慢了一拍,就买不到,你遇到过早上大爷大妈抢着买鸡蛋的场景吧?而且结账速度也会比平时更慢,甚至还会出现限购的现象。这其实和互联网环境中的高并发道理是一样的。
相反,有些国家的人口基数本来就少,几千万吧,和我们没法比,他们那边的拥堵现象会好一些,但是毕竟人少。人多资源多,相应的,我们这的大数据发展很快,人多了,用户画像分析啊,用户行为分析啊,就更好做。人家国家就只有几千万,活跃用户可能百来万,大数据玩不溜。
人多人少有啥区别?消费啊,一个国家人口那么多,那么资源开发就更多,如果有一定的手段,你可以撬动他们来消费,我一个电商平台,做好运营/营销/推广,吸引用户多了,市场份额上来了,消费就上来了。如果你一个电商在一个人口少的国家去推广,市场就那么点大,消费水平上不来呀,人多人少没法比啊对吧~ 老铁。所以,大家会很容易会联想到什么?
此外,我们还有一个叫做粉丝经济,现如今,人人都是自媒体,只要你的流量大,粉丝多,你就能赚钱,就比如李佳琪啊罗胖呀,对吧。直播买东西就是推广产品的一中手段,如此一来,就能撬动大家的购买欲望,向电商平台输送流量。
这个时候,直播间里的用户会有一部分进入到电商平台购物。那么流量比例大概多少?一般来说都是28或者37原则,20%的用户会进来,甚至会少一些,假设有1000万用户,那么这个时候涌入的流量就是200万,那你平台能吃得消不?并发支撑够不够?有没有负载均衡,高并发处理行不行,有没有做高可用,这些都要考虑,并且也都和网络相关。所以要支持用户量,要想公司赚大钱,技术要和业务贴合,整体系统的并发与高可用以及稳定性,都要保证。如果因为某一个短板效应出现问题,那么用户的流失会很惨重,对平台与企业造成的影响是巨大的,除非是12306,用户必须用,否则,用户流量会分发的其他不同的渠道与电商平台。
所以,由技术来拉动市场,来稳定用户的。并发场景无处不在,那么这整个过程其实也是贴分布式系统的架构发展的。比如如下:
单体-->分布式-->集群高可用-->高并发-->微服务-->容器化。
轮训,加权轮训,ip_hash(一致性哈希),url_hash,最小连接数
负载均衡分为7层负载和4层负载
以上这些其实本质上都是基于网络,有了网络才能交互,网络通信和我们的生活息息相关。那么说到网络通信,咱们就得来聊一聊七层模型了,这个其实也是网络基础,很多小伙伴们在接触nginx以及集群啊啥的有点混乱,这其实本身就是比较偏网络的,这边我们就来一起聊一下。
人和人之间面对面对话沟通通过讲话,打电话通过电话走电话线,那么如果这两个人在计算机(或者手机)屏幕的两边沟通,那么就是用户A和计算机交互,然后计算机和用户B交互,达到沟通的目的。其实不论是人机交互还是计算机之间(机机)交互,那么都会有一个通信的过程。
通信就会涉及到计算机网络,和网络相关。我记得在我大学那会这个就是必考知识点。这里就会涉及到OSI七层网络模型。
图片
什么是OSI,可以把它当做是一种规范,计算机之间的通信,数据交互,要符合OSI标准才能够把数据从一端发到另外一端,从而让另外一个用户看到,如此以来达到交互。而且分层了,那么每一层的目的就更加明确了,做什么事由自己那一层决定,就跟MVC一样,各司其职,解耦。并且对于每一层的开发人员来讲,更加专注了,不同的开发人员维护不同层面的东西,不会耦合在一起。所以,分层解耦无处不在,在开发的过程中也要多考虑。咱们先来简单看一下:
图片
七层模型其实就是一些协议的定义和划分,每一层所执行的功能不同,对应的协议也不同,而且我们可以把他们再进行合并,如下图,分成4层或5层或7层其实都行。
图片
每一层的只能都是不同的,如下:
图片
图片
4. 传输层:建立端口与端口之间的通信。什么意思呢,就是说呢,我们可以通过ip与mac地址找到对应的目标计算机节点,那么假设我们现在通过微信或者qq聊天,这个时候数据传输到对方的计算机了,那么对方的qq或者微信如何来接受你的数据呢?或者说如何把数据交给微信qq来展示给用户?这个时候就有端口的概念了,每个应用程序都会有一个端口,一个应用程序要多开,那么端口号肯定不一样,原理同tomcat。每个端口都会和网卡产生关联,我们在进行计算机交互的时候都会携带端口,比如8080,如此一来,那么对应的对方的应用程序才会接受到数据并且展示。ok吧。
5. 应用层:应用层+表示层+会话层可以共同定义为应用层。用户所使用的所有的应用程序都是基于应用层,就比如qq,微信,浏览器,idea,eclipse都是,这是电脑与人最直观的交互。每个应用程序都可以有自己的不同的数据格式,数据组成形式,那么应用层就是规定了应用程序的数据格式。比如qq/微信/邮箱/浏览器,这些应用程序的数据传输的时候,协议都是不同的,数据格式也都是不同的,协议的不同在表示层 进行规范。会话层是建立在传输层之上的,和我们所说的session道理一致,用于维护两点之间的通信的,也就是建立和管理应用程序之间的通信,如果我电脑重启了,再次打开软件需要重新建立连接,也就是重新建立会话,OK吧。
TOP