webCppCluster

news2024/11/16 5:34:20

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数据格式之间的联系

HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": 1,
    "name": "Alice",
    "email": "alice@example.com"
}

使用场景

前后端数据传输

4.supervisor进程管理工具

简介

supervisor是用python语言编写的进程管理工具,它可以监听、启动、停止、重启一个或多个进程。当一个进程被意外杀死的时候,supervisor可以让进程自动恢复,不需要程序员自己去管理。

我们写的py脚本可能会挂到,spervisor可以帮助我们自动拉起py进程

image-20240904144910750

5.集群

什么是集群?

集群简单了来说就是许多的人干相同的事情,这样每个人的压力都没那么大。

专业点,就是例如我们客户端这边突然发送过来大量的请求,一个服务器肯定处理不了这么大的并发量,所以我们可以做一个服务器的集群,每个服务器部署的是相同的应用,用集群去分担高并发的请求。

集群的特点有哪些?

高可用性

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

高性能计算

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

负载均衡

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

集群的分类

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

举个例子:一个早餐店,有四个员工,1号员工专门负责点菜,然后告诉后厨要做什么,2 3 4 号员工都在后厨,等着1号员工给配发任务,并且2 3 4 员工都会做包子、牛奶、豆浆。

nginx服务器就是专门用来接收http请求的服务器,然后再根据不同负载均衡算法去分发请求给uWSGI服务器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HA(High Availability Cluster高可用集群)

双机预热

双击预热指的是俩个或者是多个相同配置的服务器,其中主服务器处于活跃状态,其他的服务器处于随时待命的状态,主从服务器之间通过实时同步数据和状态信息,当主服务器发生故障的时候,备用服务器会立即接管网络服务器的运行

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 个并发连接数的响应。

功能

正向代理

代理的是前面的客户端,比如你访问外网,你需要先访问已给代理服务器,然后这个代理服务器再去访问外网,这就是正向代理

image-20240904172251710

反向代理

代理的是后面的服务器,比如你访问www.baidu.com就是访问的反向代理服务器,然后这个反向代理服务器再去分发请求到后面的服务器

image-20240904172417658

负载均衡

三种负载均衡方式

轮询
image-20240904172514121
加权轮询
image-20240904172540944
ipHash

按照ip地址进行分配,可以解决session一致性问题,但是有缺点,信息都存储到一台服务器上,这台服务器挂了信息就没都没了

image-20240904172555612

动静分离

请求分为静态请求(不需要后台业务逻辑代码的处理,比如:.jpg html等)和 动态请求(需要后台业务逻辑代码处理)

Nginx可以实现动静分离,对于静态请求直接再Nginx这台服务器中获取,动态请求再去分发给后面的服务器

image-20240904172947292

常用指令

cd /usr/local/nginx/sbin/
./nginx  启动
./nginx -s stop  停止
./nginx -s quit  安全退出
./nginx -s reload  重新加载配置文件
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。

#!/usr/local/bin/python
 
import cgi
 
def main():
 
form = cgi.FieldStorage()

工作模式

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 是原子操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2106813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ueditorplus百度编辑器集成秀米及135编辑器

备用地址:ueditorplus百度编辑器集成秀米及135编辑器 下载拉取:ueditorplus: UEditorPlus 是基于 UEditor 二次开发的富文本编辑器,让 UEditor 焕然一新,已集成秀米、135编辑器,会不定时更新!!&#xff01…

MobaXterm 终端工具使用

文章目录 MobaXterm 相关介绍下载安装 MobaXterm添加 SSH 连接 MobaXterm 相关介绍 MobaXterm 是一款功能强大的终端仿真器和远程计算工具,专为 Windows 用户设计,提供了一站式解决方案,以便在本地和远程计算环境中工作。它结合了终端仿真、S…

C++设计模式——Chain of Responsibility职责链模式

一,职责链模式的定义 职责链模式,又被称为责任链模式,是一种行为型设计模式,它让多个对象依次处理收到的请求,直到处理完成为止。 职责链模式需要使用多个对象,其中的每个对象要么处理请求,要…

『功能项目』坐骑UI搭建及脚本控制显/隐【19】

本章项目成果展示 我们打开上一篇18怪物消亡掉落宝箱的项目, 本章要做的事情是搭建一个坐骑UI界面,并通过键盘B键/右侧坐骑按钮控制坐骑UI界面的显示与隐藏 在背包Bag上创建一个父物体, 命名为Middle 修改Bag的尺寸 将下面资源图片放进Art文…

开源|FormCreate低代码表单在弹窗中渲染表单时表单的值没有正常清空解决方法

如何在弹窗中通过低代码表单 FormCreate 渲染表单&#xff0c;包括表单的配置、表单验证、以及表单提交的处理。 源码地址: Github | Gitee <template><div><!-- 触发弹窗的按钮 --><el-button type"primary" click"showDialog true&quo…

国家商用密码算法——SM1、SM2、SM3

1、SM1 SM1 是中国国家密码管理局&#xff08;SCA&#xff09;发布的国密算法之一&#xff0c;属于对称加密算法&#xff0c;其分组长度、秘钥长度都是128bit。 【注】对称加密算法是一种使用相同密钥进行数据加密和解密的加密方式。在这种算法中&#xff0c;发送方和接收方共…

将本地的 IntelliJ IDEA 项目导入到 GitLab 上——超详细图文教程

要将本地的 IntelliJ IDEA 项目导入到 GitLab 上&#xff0c;可以按照以下详细步骤进行操作&#xff1a; 1. 在 GitLab 上创建一个新的仓库 打开 GitLab 或公司内部的 GitLab 服务器。 登录你的 GitLab 账号。 点击右上角的 号按钮&#xff0c;然后选择 “New Project”。 …

清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 及 通过使用文件或者套节字来识别进程的fuser命令

一、清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 最近又接触了一些线性求解的问题&#xff0c;以前主要都是在高中数学里接触到&#xff0c;都是使用笔算&#xff0c;最后通过一些函数式得出最小或者最大值&#xff0c;最近的研究生学业上接触到了一个Excel s…

C++入门基础知识50——【关于C++数字】之C++ 数学运算

成长路上不孤单&#x1f60a;【14后&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

C++string类相关OJ练习(2)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Cstring类相关OJ练习(2) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1.反转字符串 …

录屏软件电脑,精选5款录屏神器推荐

嘿&#xff0c;朋友们&#xff01;想象一下&#xff0c;你正在与好友分享你最新的游戏成就&#xff0c;或是与同事展示你的最新项目进展&#xff0c;但却发现文字描述无法完美呈现你的精彩瞬间。别担心&#xff0c;在这个数字化的时代&#xff0c;我们有着无数种方式记录和分享…

大型集团行业ITSM案例分析报告

一、项目背景 随着信息化建设的不断推进&#xff0c;大型集团的信息系统规模迅速扩大&#xff0c;业务系统对IT的依赖程度逐渐加深&#xff0c;IT网络应用系统的复杂度也随之增加。然而&#xff0c;相对滞后的运维服务体系却未能同步跟进&#xff0c;运维要求不断提高的同时&a…

SparkRA带你读论文 | 如何训练数据高效的 LLMs

简介 How to Train Data-Efficient LLMs 论文作者&#xff1a; Noveen Sachdeva, Benjamin Coleman, Wang-Cheng Kang, Jianmo Ni, Lichan Hong Ed H. Chi, James Caverlee, Julian McAuley, Derek Zhiyuan Cheng 论文链接&#xff1a; https://arxiv.org/pdf/2402.09668.pd…

Java CRM客户关系管理系统源码:基于Spring Cloud Alibaba与Spring Boot,专为成长型企业设计

项目名称&#xff1a;CRM客户关系管理系统 功能模块及描述&#xff1a; 一、待办事项 今日需联系客户&#xff1a;显示当日需跟进的客户列表&#xff0c;支持查询和筛选。分配给我的线索&#xff1a;管理分配给用户的线索&#xff0c;包括线索列表和查询功能。分配给我的客户…

Hive数据库与表操作全指南

目录 Hive数据库操作详解 创建数据库 1&#xff09;语法 2&#xff09;案例 查询数据库 1&#xff09;展示所有数据库 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;案例 2&#xff09;查看数据库信息 &#xff08;1&#xff09;语法 &#xff08;2&#…

【免费分享】嵌入式Linux开发板【入门+项目,应用+底层】资料包一网打尽,附教程/视频/源码...

想要深入学习嵌入式Linux开发吗&#xff1f;现在机会来了&#xff01;我们为初学者们准备了一份全面的资料包&#xff0c;包括原理图、教程、课件、视频、项目、源码等&#xff0c;所有资料全部免费领取&#xff0c;课程视频可试看&#xff08;购买后看完整版&#xff09;&…

U盘提示需要格式化才能使用怎么办?教你轻松应对

U盘作为一种便捷的数据存储设备&#xff0c;广泛应用于日常工作和生活中。然而&#xff0c;有时我们会遇到U盘插入电脑后提示需要格式化才能使用的情况&#xff0c;这让人倍感焦虑&#xff0c;因为格式化往往意味着数据丢失。不过&#xff0c;在采取极端措施之前&#xff0c;我…

如何验证mos管好坏

用万用表的二极管档位测试&#xff0c;只有D&#xff08;&#xff09;S&#xff08;-&#xff09;之间电压低于0.7v&#xff0c;其他任意两脚之间电压都是大于1.5V。这是正常的。

不限专业和工作经验,这个含金量巨高的IT证书,90%的大学生都不知道!

软考现在正在报名阶段&#xff0c;大学生们千万不要错过&#xff01;这个IT证书的含金量巨高&#xff0c;对你的大学生涯乃至毕业后的职业规划都有帮助&#xff01; 下面就来为大家详细讲解一番&#xff0c;速速码住&#xff01; 1、软考报名条件 软考报名没有学历、资历、年龄…

【Python常用库_1】网络安全清洁专家——Bleach

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要分享常用的一些Python库&#xff0c;让工作学习事半功倍&#xff0c;适用于平时学习、工作快速查询等…