当前位置: 代码迷 >> 综合 >> 服务器基础 :服务器的特性与任务、服务器常见问题与解决方案、代理服务器(高可用性(心跳机制)+负载均衡(3种算法))、如何保证高效长连接
  详细解决方案

服务器基础 :服务器的特性与任务、服务器常见问题与解决方案、代理服务器(高可用性(心跳机制)+负载均衡(3种算法))、如何保证高效长连接

热度:7   发布时间:2024-01-09 07:13:03.0

服务器简介:服务器在网络中为网络用户提供数据信息,资料文件等等 , 大多数企业服务器是internet中的一个数据仓库, 这个时代纯粹的单机应用很少见,几乎所有的软件应用有服务器做支撑,可以一对多处理若干用户请求, 服务器是互联网重要组件。
一、服务器种类
1、WEB服务器(HTTP服务器):常见于经典的BS架构中,浏览器/web服务模型 ,是互联网中最常见也是使用最频繁的服务器 , 提供了大量的网站资源, 门户网站,搜索引擎 , 视音频网站等等。
2、邮件服务器(Mail Server):所有邮件的收发中转都是利用Mail Server实现的 , 网络用户的邮件转发与存储都要通过该服务器进行,每天世界范围的业务量可能达到百亿级别。
3、FTP服务器(FTP SERVER):专门为用户提供文件存储服务,经典的上传下载服务器。
网盘和云盘 (类似于ftp服务器)
1)网盘为每个用户申请一块空间 ,每个用户在自己的空间内存储使用文件。网盘的缺点:其一特别消耗网络空间,其二如果很多用户上传相同的文件,无意义的开销越来越多。
2)云盘所有用户共享一块空间,但是每个用户对空间里文件的权限不同。
比如用户A上传了一个电影,用户B也上传了一个电影,用户B就可以实现看起来似乎是秒传,因为空间中已经存在这部电影。但是现在网盘和云盘的界限已经模糊。
4、应用软件服务器:CS架构中,软件服务器为软件提供数据支持,具体提供哪些服务与软件业务相关(视音频业务、数据中转、语音识别、文本识别等等),所使用的协议大多数也是企业自定义的(包裹经典协议)。
5、处理服务器:对处理能力和算力有较高的要求, 具备高并发性 , 可以及时有效的处理大量用户业务。
6、代理服务器(在下文会有详细解释)
7、文件服务器/数据库服务器:持久化层,用于保存用户信息用户数据, 缓存配置等等, 可能需要各种类型数据库 Oracle , Mysql 或者直接预装文件系统直接保存。(文件服务器可能就是实际存储数据的。而需要较高的安全性,存储的信息关系比较复杂,存储在数据库服务器。文件服务器也可能作为数据库服务器的底层 ,数据库服务器将各种关系对应存储整理好后,再存储到文件服务器中。)
二、服务器系统
1、WINDOWS服务器系统
windows2000server , windows2003server
2、Unix与Linux服务器系统(也是以后我们主要学习的)
目前最为广泛的服务器搭载系统 , 性能较强,稳定性安全性好。
三、服务器软件
1、Apache服务器:世界范围影响力和市场占有率比较高的服务器软件,是经典的web服务器(WWW服务) ,服务器配置并发模型中,多进程并发模型比较经典。
2、IIS服务器:微软开发的WEB服务器, 使用HTTP协议进行数据交互。
3、Nginx 服务器:流行的Web服务器 ,专注于性能提升与优化, 提高业务处理能力 , 并发能力强大(线程并发模型)。
开发者无需自行开发服务器, 只需要安装配置服务器软件就可以获取强大的服务器特性与并发处理能力。
四、服务器的特性与任务
1、服务器特性
1)服务器需要较强的处理能力(并发性)
2)服务器需要较强的稳定性
3)可靠性强/安全性
4)可管理性强, 可扩展性
2、服务器任务
1)服务器有较强的存储能力,便于共享软硬件资源,持久化用户数据信息。
我们使用的聊天工具 ,好友的聊天记录保存在哪里?保存在本地 。哪些需要保存在服务器? 个人信息,好友关系,访问权限等关键信息。帮助用户持久化关键信息 ,聊天记录一般存在本地,缓解服务器压力。
2)服务器的数据中转(网络穿透)
什么叫数据中转?
①某一个人把信息发送给另一个人,QQ显然有数据中转,头条这种新闻软件有吗?也算是数据中转,A将编辑好的新闻上传到服务器,A不是主动将信息发送给读者,而是读者通过推荐等自己去拉取阅读,但是只要是将数据送到了另一个人手里,就算是数据中转。打游戏实时更新自己和敌人状态,都算是数据中转。
②假如我们写一个聊天软件,没有服务器,两个用户能不能找到对方?写死固定ip可以找到,也可以收发数据。我有500个好友,我需要将500个好友的ip信息缓存在本地,然后去跟好友交流,但是如果用户网络环境频繁变更,地址频繁更换无法通过保存固定地址的方式进行持续交互。为什么ip会变? 比如在家可能用wifi,出去可能就用流量,ip会发生改变。
服务器的网络穿透
客户端登录就会提交给服务器网络信息,你从家里出去以后,在切换网络的时候,就发生了网络变更,发生网络异常,客户端和服务器会发生中断,可能时间会很短暂,你用流量重新登陆的时候 ,会重新提交给服务器你新的网络信息,服务器就会实时更新你的网络信息,不会失去连接。我把数据包发送给服务器,服务器一定能找得到对方,帮我把数据包转发给对方。服务器搭建桥梁 ,这就是数据中转和网络穿透。
客户端找服务器怎么找?(客户端也不能固定服务器ip,如果服务器ip失效,所有客户端都需要强制更新服务器ip。)
访问服务器可以直接绑定域名,公网上有一种域名解析服务器,提交域名,解析出对应ip。先通过域名服务器将我们绑定的域名解析成有效的服务器ip ,域名解析服务器中一个域名对应着许多个能访问这个服务器的ip ,域名解析服务器会返回给我们有效的服务器ip,我们拿到这个ip后再与服务端进行链接。
五、服务器常见的问题和解决方案
我们上面说的客户端与服务器的连接,都是二者之间的直接连接。
1、客户端和服务器直接连接(用户通过设备直接访问服务器)有许多隐患。
1)将服务器真实地址直接暴露给用户可能会造成安全隐患。
2)大量用户直接连接服务器设备,该设备如果出现异常宕机,所有连接失败,客户端无法访问。
3)随着用户数量激增,服务器处理能力有限,当服务器处理达到极限,会出现延迟卡断等情况,不能很好的响应客户端。
2、代理服务器作用
1.用户完全面向代理服务器,所有的请求都是向代理服务器发送的,代理服务器从真实服务器获取结果,对用户进行反馈(隐藏真实服务器信息)。代理服务器不处理数据 ,就是转发任务。
2.这种模型的好处是便于我们服务器横向扩展实现高可用性,防宕机策略,大大提高了服务器扩展与灾害处理能力。
服务器高可用性:
有了一个代理服务器我们完全可以对我们的处理服务器进行扩展,比如现在有3个处理服务器分别为01、02、03。代理服务器和处理服务器之间有一个心跳机制 ,这个心跳机制是不停的测探处理服务器真实的处理情况的。假如现在客户端来的消息代理服务器接收,根据自己的某些策略将消息转发给 3台处理服务器中的某台去处理 ,但是过了一会通过心跳机制代理服务器收到了消息其中指出01号处理服务器宕机了,代理服务器就会将01号处理服务器设置为暂停转发(而不是取消转发给01处理的资格)。代理服务器再接收到客户端的消息时就会交给02或者03去处理。可能经过修整后01服务器可以继续工作了,代理服务器通过心跳机制知道了01号处理服务器已经可以正常工作了,就会恢复给他转发的资格。
3.假如100个消息来了 如何分发任务给这些处理服务器? 不能让有的服务器一直工作,而有的服务器却没有多少任务。
负载均衡技术:针对代理服务器,因为代理服务器负责是转发消息的。
负载均衡理念
1)负载均衡是高可用网络架构的重要概念 , 将工作负载分发到多个服务器中,可以充分提高网站、应用、数据库的服务性能和可靠性。
2)大量用户访问同一服务器,可能导致处理缓慢,服务器到达处理极限,可以引入负载均衡器与扩容处理服务器的方式,提高处理能力。
如果任务分发方式选则不当,可能无法利用服务器资源,某些服务器很忙碌,某些服务器被闲置,采用负载均衡技术可以检测服务器的处理压力,将任务分发给负荷最小的服务器进行处理。
有三种转发任务的方式(算法):
1)Round Robin:轮询任务分发,将每一个请求以轮询的方式依次分发给处理服务器,保证处理服务器业务平均。
来一个请求给01,再来给02,然后给03,再来再给01,然后02 … …但是这种策略也可能导致有的处理服务器特别忙,有的特别闲。因为任务也分复杂和简单的。如果这种巧合变多,那么也会造成不均衡。一般web服务器采用的就是这种方法,因为网页一般大多都是相同形式,不涉及复杂度。
2)Least Connections:最小连接方式,如果服务器与客户端是长连接模式,那么每个服务器上可能绑定不同数量的客户端连接,可以通过计算最小连接数量,将新的连接或者新请求分发给连接数量最少的服务器。(客户端连接代理服务器,代理服务器连接处理服务器)
3)Source :这种方式可以保证特定用户能连接到相同的服务器,用户请求ip与服务器做映射绑定。
六、服务器服务模型
服务器对软件的支持,不同软件因业务不同,服务策略也不同。
1)高并发低活跃(新闻软件,播放视频的软件)更注重并发数量。
并发量较高, 用户访问服务器,与服务器交互频率较低。
2)高并发高活跃(打游戏):更注重与客户端的连接性,有效性
维护高效长连接,持续支持客户端,与客户端进行较为密集的数据交互与服务。客户端较多,并发量较高 , 服务端与客户端交互频繁。
七、高效维持连接的有效性
一个tcp长连接,怎么高效的维护这个连接的有效性?使其质量和存活度高?
我们首先要考虑什么会影响连接断开?
1)网络进程异常,程序异常退出
客户端崩溃/服务器处理与客户端连接的进程或者线程异常。
解决方法:检测与拉活,再创建恢复连接。
2)活连接冷却问题
运营商网络检测两端在一段时间内没有任何数据交互,运营商会主动冷却这个连接 ,也就是断开这个连接。断开的连接不单是指客户端与服务器之间的连接,运营商会把你的网络断开。
解决方法:心跳机制,定时发送试探包,有效避免冷却问题。
3)设备异常导致网络异常
网卡、路由器坏了
解决方法:使用一些函数对网络设备进行试探,检测设备有效性。

  相关解决方案