什么是协议
1、协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则
2、在接口测试中,从客户端发送request至服务器,服务器返回response,网络传输的数据就是接口测试中最重要的部分,而数据传输的本质就是基于网络传输协议。(网络传输:数据在网络上的传输过程)
3、每个协议可能需要获取不同的信息,即格式和传输的数据内容不同。所以协议可以分为很多种类,网络传输协议可以分为HTTP协议、HTTPS协议、WebSocket协议等
网络协议是由三个要素组成:
语义:语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
语法:语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
时序:时序是对事件发生顺序的详细说明。(也可称为“同步”)。
人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
网络架构
网络架构一般分为:
①C/S(Client/Server)结构
②B/S(Browser/Server)结构
1、对于核心的Server端来说,简单的是可以在一台服务器上布置代码和数据库;复杂的就需要一群服务器,有些服务器布置代码,有些服务器布置数据库,有些服务器做中间层,有些服务器用于储存
2、随着用户和访问量越来越多,并发的情况导致数据库堵塞,于是诞生的中间层。中间层也可以理解为另一种应用服务器,上面也有代码和数据库。即代码请求数据的时候不直接连接数据库,而是连接中间层,中间层连接数据库
逻辑如图:
注:
当中间层缓存了数据库的数据之后,第二次前端访问同样的数据时,即可以通过中间层返回,而不需要再去请求数据库。当然上面这只是读数据库的逻辑,写数据其实也差不多,就是通过中间层去写数据库,写完数据库再将写完的数据返回来缓存到中间层,这样就很大程度减少了读数据的压力,起到了保护数据库(增强服务器性能)的作用
分布式系统
随着业务的增多,应用服务器也可能随时承受不住压力,为了规避风险和提高服务质量,可以通过域名对业务进行分离,保证一块业务模块单独使用一个域名,然后每个域名再使用多台服务器。这样一旦某个业务模块出问题之后也不会影响到其他业务模块,而且单独一块业务用一群服务器也能提高处理效率
系统要有可扩展性:
横向扩展:横向扩展又叫分布式,一台Server撑不住我就多来几台。 但现实远比理想复杂。
纵向扩展:纵向扩展是金融高富帅或者企业软件比较常采用的方法,因为服务器的价格和性能不成正比,性能达到一定程度后,每一分性能的提高需要投入更多的钱——服务器性能的边际价格是不断上升的。 对于互联网的草根创业团队来说,这显然是不可接受的
数据库分离
实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步(备份)数据,再通过读写分离来提升数据库的并发负载能力。
什么是中间层服务器
中间层 (Middle Tier)也称作"应用程序服务器层或应用服务层",是用户接口或 Web 客户端与数据库之间的逻辑层。典型情况下 Web 服务器位于该层,业务对象在此实例化。中间层是生成并操作接收信息的业务规则和函数的集合。它们通过业务规则(可以频繁更改)完成该任务,并由此被封装到在物理上与应用程序程序逻辑本身相独立的组件中。
中间层服务器数据处理过程
1、客户端(用户界面层),提供用户与系统的友好访问;
2、第二层是应用服务层(也叫中间层),专司业务逻辑的实现;
3、第三层是数据源层(数据服务层,数据库系统),负责数据信息的存储、访问及其优化。
中间层服务器的优点
由于业务逻辑被提取到应用服务层,大大降低了客户端负担,因此也成为瘦客户(Thin Client)结构,三层结构在传统的二层结构的基础上增加了应用服务层,将应用逻辑单独进行处理,从而使得用户界面与应用逻辑位于不同的平台上,两者之间的通信协议由系统自行定义。通过这样的结构设计,使得应用逻辑被所有用户共享,这是两层结构应用软件与三层应用软件之间最大的别。三层结构将表示部分和业务逻辑部分按照客户层和应用服务层相分离,客户端和应用服务层、应用服务层和数据库服务层之间的通讯、异构平台之间的数据交换等都可以通过中间件或者相关程序来实现。当数据库或者应用服务层的业务逻辑改变时,客户端并不需要改变,反之亦然,大大提高了系统模块的复用性,缩短开发周期,降低维护费用。
Web服务器的工作原理并不复杂,一般可分成如下4个步骤:建立连接、请求过程、应答过程以及关闭连接。
1、建立连接:客户机通过TCP/IP协议建立到服务器的TCP连接。
2、请求过程:客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档。
3、应答过程:服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。
4、关闭连接:客户机与服务器断开。
常见服务器分类
Apache
是C语言实现的,专门用来提供HTTP服务。
特性:简单、速度快、性能稳定、可配置(代理)
1、主要用于解析静态文本,并发性能高,侧重于HTTP服务;
2、支持静态页(HTML),不支持动态请求如:CGI、Servlet/JSP、PHP、ASP等;
3、具有很强的可扩展性,可以通过插件支持PHP,还可以单向Apache连接Tomcat实现连通;
4、Apache是世界使用排名第一的Web服务器。
Tomcat
是Java开发的一个符合JavaEE的Servlet规范的JSP服务器(Servlet容器),是 Apache 的扩展。
特性:免费的Java应用服务器
1、主要用于解析JSP/Servlet,侧重于Servlet引擎;
2、支持静态页,但效率没有Apache高;支持Servlet、JSP请求;
3、Tomcat本身也内置了一个HTTP服务器用于支持静态内容,可以通过Tomcat的配置管理工具实现与Apache整合。
提高服务器性能的办法:
从网络架构上来说:
1、使用中间层:客户端的请求不直接与数据库进行数据交换
2、根据业务拆分成多个应用服务器(子域名):web服务与应用进行分离
3、使用负载均衡器:web服务器前面部署负载均衡服务器调用用户请求,根据设置不同的调度策略把用户的请求分发到各个web服务器中
4、数据库分离:主从数据库,读写分离
其他的还有些:缓存、cdn、cookie等
DNS
DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。
DNS解析就是把域名解析成IP的过程,一般的网络访问如图:
一般来说DNS服务器都是由网络运营商提供的,也就是说不需要特别设置,当你使用该网络时默认会去访问运营商提供的DNS服务器。当然也可以自己设置DNS服务器,在网络的TCP/IP协议中,手动输入DNS的IP,于是便会通过你设置的DNS去访问服务器进而解析对应的IP
备注:
1、用不一样的DNS有什么区别?
对于只有一个IP的网站来说是没有区别的,对于有多个IP的网站就不一定了
如:当百度只有一个IP时,无论哪个DNS解析到的都只有一个IP,这样域名对应IP就是一对一关系
当百度存在多个IP时,不同的DNS会解析到不同的IP,这样域名对应IP就是一对多的关系。然而一个用户只能使用一个DNS服务器,所以对于一个用户来说,他访问IP也是唯一的。如果他改了DNS服务器,也许才会解析到另外一个IP
2、DNS劫持原理:
计算机中病毒后,病毒修改了计算机的DNS设置。此时访问任意网站都会通过该DNS,而该DNS返回给你的IP并非该网站真正的IP,而是一些垃圾网站等。这种DNS劫持可以手动修改DNS设置;更高级的DNS劫持是,入侵正常的DNS服务器,改掉域名和IP的正确对应关系,于是使用该DNS的用户都会遭殃
负载均衡策略
CDN的全称是Content Delivery Network,即内容分发网络。是通过在网络各处放置节点服务器所构成的现有的互联网基础之上的一层智能虚拟网络
作用:
CDN系统能够实时地根据网络流量和各节点的连接、负载情况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
CDN缓存
客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向CDN边缘节点发起请求,CDN边缘节点会检测用户请求数据的缓存是否过期,如果没有过期,则直接响应用户请求,此时一个完成http请求结束;如果数据已经过期,那么CDN还需要向源站发出回源请求(back to the source request),来拉取最新的数据。
CDN的典型拓扑图如下:
CDN分配方式
最常见的就是通过CDN服务商去分配合适的IP给用户访问,一般遵循3种方式分配
1、就近分配:即CDN服务器获取本地IP所在地,然后访问最近的CDN节点。这样就可以少经过几条路由,从而加快访问速度
图片
2、负载均衡分配:如果上图的原则去分配,也会导致一个问题,即北京的用户多,上海的用户上,这样北京的用户都堵在了一个节点上,访问速度还是会慢。所以需要根据每个节点的负载压力自动将其分配到压力较小的节点
3、手动分配:这种主要是出现不可控因素时,需要手动分配节点保证用户不受影响