webCppCluster

打印 上一主题 下一主题

主题 536|帖子 536|积分 1608

1.通讯协议、接口协议、数据传输格式之间的区别?

通讯协议

在TCP/IP四层模子中,四层分别是:应用层、传输层、网络层、网络接口层。
应用层通讯协议的代表:HTTP HTTPS
   主要规定传输消息的详细内容、什么格式传输、是请求还是相应,如果是请求时GET还是POST,如果时POST请求体的内容时什么传输格式的等等
  传输层通讯协议的代表:TCP UDP
   保证的时端对端的可靠性和安全性传输
  网络层通讯协议的代表:IP
   主要功能逻辑寻址、路由选择,实现端到端的数据传输
  网络接口层通讯协议的代表:以太网帧协议
   硬件层面上的
  这四个层的协议一叠加,形成数据帧,保证网络中数据的端到端的传输
接口协议

接口协议是在俩端中定义的一个接口标准,一端规定要传递什么参数,另一方去吸收传递过来的参数。
好比我项目中的WSGI接口协议,它就是uWSGI服务器和webpy框架之间的接口标准,uWSGI需要传递environ环境变量和并提供一个回调函数start_respone,webpy框架去吸收这些参数
WSGI由三大组件组成,webServer服务器、可调用对象、中心件
数据传输格式

protobuf、json、xml、HTML、Plain Text
一样平常是序列化和反序列化,好比protobuf序列化会酿成二进制格式,json序列化会酿成json格式
2.为什么利用protobuf协议?

Protobuf通信协议详解:代码演示、详细原理先容等 - 知乎 (zhihu.com)
protobuf是一种数据传输格式,就和json、html、xml、Plain-Text类似
protobuf数据传输格式是由Google开发的数据传输格式,它的序列化和反序列化特别的敏捷(因为序列化会酿成二进制格式)

优点

速率快

   序列化后是二进制格式,所以序列化和反序列化速率更快
  可以自定义消息格式

支持多语言利用

   protobuf定义的消息格式可以在多种语言中利用,有助于跨语言的通信。
  好比web服务器和C++服务器的通信
  主动天生代码

   包括序列化和反序列化所需的函数,跨语言的头文件等等
  利用场景

webCppCluster项目中,在web服务器和c++服务器的通信中利用,因为protobuf支持多种语言,可以实现不同语言服务器间的通信

3.为什么利用json协议?

优点

可以实现数据结构的嵌套(复杂的数据结构),利用更加机动

   好比在python中,定义一个字典,字典的value还可以是字典,还可以是列表、元组等等

  易于读写

   json利用简朴的文本格式,易于人类阅读和编写

  轻量级

   JSON的数据格式轻量级,传输数据时占用带宽较小,可以提高数据传输速率

  速率快

   那你咋不用protobuf,protobuf比json还快
  归根到底,还是json去实现复杂数据结构的数据传输更加速速
  项目中,获取商城设置,里面就是一个很复杂的数据结构,json的情势就很容易去传输
  http协议与json数据格式之间的联系
  1. HTTP/1.1 200 OK
  2. Content-Type: application/json
  3. {
  4.     "id": 1,
  5.     "name": "Alice",
  6.     "email": "alice@example.com"
  7. }
复制代码
利用场景

前后端数据传输

4.supervisor历程管理工具

简介

supervisor是用python语言编写的历程管理工具,它可以监听、启动、制止、重启一个或多个历程。当一个历程被不测杀死的时间,supervisor可以让历程主动恢复,不需要步伐员自己去管理。

我们写的py脚本可能会挂到,spervisor可以帮助我们主动拉起py历程
<img alt="image-20240904144910750" />
5.集群

什么是集群?

集群简朴了来说就是很多的人干相同的事情,如许每个人的压力都没那么大。
专业点,就是例如我们客户端这边忽然发送过来大量的请求,一个服务器肯定处理不了这么大的并发量,所以我们可以做一个服务器的集群,每个服务器部署的是相同的应用,用集群去分担高并发的请求。
集群的特点有哪些?

高可用性

当一台服务器挂掉之后,其他的服务器能够机制切换上去,实现对用户的不间断服务
高性能计算

重复利用集群中的每一台服务器资源,实现并行处理。
负载均衡

把负载压力根据某种算法合理的分配到集群的每个服务器上,以减轻主服务器的压力。
集群的分类

LBC(Load Balance Cluster 负载均衡集群)

举个例子:一个早餐店,有四个员工,1号员工专门负责点菜,然后告诉后厨要做什么,2 3 4 号员工都在后厨,等着1号员工给配发使命,并且2 3 4 员工都会做包子、牛奶、豆浆。
nginx服务器就是专门用来吸收http请求的服务器,然后再根据不同负载均衡算法去分发请求给uWSGI服务器

HA(High Availability Cluster高可用集群)

双机预热

双击预热指的是俩个大概是多个相同设置的服务器,此中主服务器处于活泼状态,其他的服务器处于随时待命的状态,主从服务器之间通过实时同步数据和状态信息,当主服务器发生故障的时间,备用服务器会立刻继承网络服务器的运行
<img alt="image-20240904153225064" />
HPC(High Performance Computing Cluster 高性能计算集群)

多个服务器同步并行的方式去办理一个复杂的问题
在我们的项目中利用的是负载均衡集群,Nginx负责分发请求,把负载压力分配到uWSGI服务器上,但是由于Nginx就部署了一个,当Nginx宕机的时间整个服务的挂了,所以可以对Nginx利用高可用集群的双击预热集群

6.分布式

就是每个服务器干的活是不同的
好比Redis的主从机制,主Redis专门吸收写操作命令,而从Redis专门吸收读操作命令,这句是分布式的架构
单机累如狗–> 居群 --> 分布式

7.Nginx

Nginx是一个高性能的能吸收HTTP请求的反向署理web服务器。
其特点是占据内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆利用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活泼的网站中有12.18%的利用比率,大约为2220万个网站。
Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的相应。
功能

正向署理

署理的是前面的客户端,好比你访问外网,你需要先访问已给署理服务器,然后这个署理服务器再去访问外网,这就是正向署理
<img alt="image-20240904172251710" />
反向署理

署理的是后面的服务器,好比你访问www.baidu.com就是访问的反向署理服务器,然后这个反向署理服务器再去分发请求到后面的服务器
<img alt="image-20240904172417658" />
负载均衡

三种负载均衡方式
轮询

<img alt="image-20240904172514121" />
加权轮询

<img alt="image-20240904172540944" />
ipHash

按照ip地址进行分配,可以办理session一致性问题,但是有缺点,信息都存储到一台服务器上,这台服务器挂了信息就没都没了
<img alt="image-20240904172555612" />
动静分离

请求分为静态请求(不需要后台业务逻辑代码的处理,好比:.jpg html等)和 动态请求(需要后台业务逻辑代码处理)
Nginx可以实现动静分离,对于静态请求直接再Nginx这台服务器中获取,动态请求再去分发给后面的服务器
<img alt="image-20240904172947292" />
常用指令

  1. cd /usr/local/nginx/sbin/
  2. ./nginx  启动
  3. ./nginx -s stop  停止
  4. ./nginx -s quit  安全退出
  5. ./nginx -s reload  重新加载配置文件
  6. ps aux|grep nginx  查看nginx进程
复制代码
8.CGI

Python CGI 编程 | 菜鸟教程 (runoob.com)
什么是 CGI

CGI(Common Gateway Interface)表现通用网关接口协议,它是用于webServer于CGI应用步伐之间的通信(CGI应用步伐可以由多个语言实现,C/C++、Python等等),webServer吸收到HTTP请求并剖析,把它封装成CGI应用步伐能看懂的CGI协议,如果是GET请求,就把数据放到PATH_INFO(环境变量中),如果是POST请求,就把数据存储到标准输入中。CGI步伐吸收到CGI协议,然后处理,把反馈结构放到STDOUT中,CGI步伐发送CGI协议给webServer。
  1. #!/usr/local/bin/python
  2. import cgi
  3. def main():
  4. form = cgi.FieldStorage()
复制代码
工作模式

<img alt="image-20240830194953557" />
1.创建CGI工作历程

2.处理请求

3.kill历程

   也就是说每次请求都需要创建一个历程,造成较大的系统开销,并且CGI协议不支持高并发请求

  类似于HTTP的短链接,每次发送HTTP请求前都需要简历TCP连接,等下一次请求又要重新简历TCP连接
9.FastCGI

什么是FastCGI?

FastCGI(快速网关接口协议),它是CGI协议基础上发展的,它用于WebServer与FastCGI应用步伐间的通讯协议。它不需要像CGI那样,来一个请求就得fork一个历程,而是先创建已给Master历程,然后去剖析设置文件,根据设置文件创建子历程,然后等请求来的时间,分配子历程去吸收请求。当请求数过多的时间会主动再创建子历程
工作流程

1.创建Master历程(主工作历程)

2.根据设置文件创建子历程(如果历程不敷用的话,请求过多,会主动创建子历程)

10.你这个项目,容灾是怎么做的?

负载均衡

Nginx做反向署理服务器,实现负载均衡,将负载压力分配后面的服务器,以防止单点故障问题
双击预热

Nginx服务器只有一个,如果Nginx挂到的话整个服务器就挂了,所以对Nginx有一个配用的服务器,主服务器与备用服务器进行实时同步数据和状态信息,当主Nginx该了之后,备用Nginx顶上去
康健检查

可以设置定期发送请求给后端服务器,如果运行不正常,Nginx立马会从从服务器列表中移出,后面请求就不会再分配给这个服务器了
数据备份与恢复

Redis设置主从结构

MySQL设置主从复制,将数据实时同步到服务器中

11.Web服务器与C++服务器通信


12.Web集群中怎么保证并发环境下的数据一致性的?

用Redis中的分布式锁实现接口的幂等性

对数据进行Redis中的原子操作

   incrby这个操作就是原子操作,它的get 和 set 是原子操作

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表