【架构】常见技术点--网络通信

导读:收集常见架构技术点,作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务,技术跟业务具体结合才能发挥技术的价值。

目录

1. 连接池

2. 断线重连

3. 会话保持

4. 长连接/短连接

5. 流量控制/拥塞控制

6. 惊群效应

7. NAT


1. 连接池

预先建立一个连接缓冲池,并提供一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了连接频繁建立、关闭的开销。

连接池的作用就是为了提高性能,连接池就是为了避免重复多次的打开数据库连接而造成的性能的下降和系统资源的浪费。

连接池放了N个Connection对象,本质上放在内存当中,在内存中划出一块缓存对象,应用程序每次从池里获得Connection对象,而不是直接从数据里获得,这样不占用服务器的内存资源。


2. 断线重连

由于网络波动造成用户间歇性的断开与服务器的连接,待网络恢复之后服务器尝试将用户连接到上次断开时的状态和数据。常见几种情况:

情况一:客户端网络不好
情况二:客户端网络切换
情况三:心跳超时等原因被服务器断开
情况四:客户端程序切后台

重连主要步骤如下:
1)客户端记录了断线之前服务器IP,尝试连接并发送重连协议;重连协议是和正常连接登录协议不一样的;
2)服务器收到重连协议,会做一些安全检查、超时检查,判断是否可以重连;
3)如果可以重连,服务器会根据客户端找到之前旧用户所在的服务器当前的状态信息,然后下发
4)客户端拿到最新状态更新本地数据和状态,继续游戏


3. 会话保持

会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求都会分配到一台机器上。通俗而言:在一次会话过程中发起的多个请求都会落到同一台机器上。


4. 长连接/短连接

通常是指TCP的长连接和短连接。长连接就是建立TCP连接后,一直保持这个连接,一般会中间彼此发送心跳来确认对应的存在,中间会做多次业务数据传输,一般不会主动断开连接。

短连接一般指建立连接后,执行一次事务后(如:http请求),然后就关掉这个连接。

HTTP的长连接和短连接本质上是TCP长连接和短连接。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。TCP连接需要经过“三次握手”,断开连接需要经过“四次挥手”。

Http长连接 和 TCP长连接的区别在于: TCP 的长连接需要自己去维护一套心跳策略。,而Http只需要在请求头加入keep-alive:true即可实现长连接。


5. 流量控制/拥塞控制

流量控制防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理。

拥塞控制防止发送方发的太快,使得网络来不及处理产生拥塞,进而引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿。

拥塞控制主要是四个算法:1)慢启动,2)拥塞避免,3)拥塞发生,4)快速恢复。


6. 惊群效应

惊群效应也有人叫做雷鸣群体效应,简言之,惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。

惊群效应的危害:系统对用户进程/线程频繁地做无效的调度,加大了系统开销。

Linux 内核对用户进程(线程)频繁地做无效的调度、上下文切换等使系统性能大打折扣。上下文切换(context switch)过高会导致 CPU 像个搬运工,频繁地在寄存器和运行队列之间奔波,更多的时间花在了进程(线程)切换,而不是在真正工作的进程(线程)上面。直接的消耗包括 CPU 寄存器要保存和加载(例如程序计数器)、系统调度器的代码需要执行。间接的消耗在于多核 cache 之间的共享数据。

为了确保只有一个进程(线程)得到资源,需要对资源操作进行加锁保护,加大了系统的开销。目前一些常见的服务器软件有的是通过锁机制解决的,比如 Nginx(它的锁机制是默认开启的,可以关闭);还有些认为惊群对系统性能影响不大,没有去处理,比如 Lighttpd。


7. NAT

NAT(Network Address Translation,网络地址转换),就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。NAT还可以防止外部主机攻击内部主机(或服务器)。

借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。

你可能感兴趣的:(分享交流,软件架构,架构,分享)