C++文件服务器项目—项目总结与反向代理—7

发布于:2022-12-21 ⋅ 阅读:(279) ⋅ 点赞:(0)

C++文件服务器项目—项目总结与反向代理—7

  组件介绍基本写完了,后续进行深入。

  本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接 C/C++后台高级服务器课程介绍 详细查看课程的服务。

1. 项目总结

项目架构图

  1. 客户端
    • 浏览器–>http协议
  2. nginx反向代理服务器
    • 如果为web服务器服务,web服务器需要集群化
    • 如果为fastdfs服务,存储节点需要集群化
  3. web服务器 - nginx
    • 处理静态请求 - > 访问服务器文件
    • 动态请求 -> 客户端给服务器提交的数据
      • 借助fastCGI进行处理
        • 讲的是单线程处理方式 - API
        • 也可以多线程处理 -> 另外的API
        • 使用spawn-fcgi启动
  4. mysql
    • 关系型数据库 - 服务器端
    • 存储什么?
      • 项目中所有用到的数据
  5. redis
    • 非关系型数据库 - 服务器端使用
    • 数据默认在内存, 不需要sql语句, 不需要数据库表
    • 键值对存储, 操作数据使用的是命令
    • 和关系型数据库配合使用
    • 存储服务器端经常访问的数据
  6. fastDFS
    • 分布式文件系统
    • 追踪器, 存储节点, 客户端
    • 存储节点的集群
      • 横向扩容 -> 增加容量
        • 添加新组, 将新主机放到该组中
      • 纵向扩容 -> 备份
        • 将主机放到已经存在的组中
      • 存储用户上传的所有的文件
      • 给用户提供下载服务器

2. 项目提炼

  1. 文件服务器可以用在哪些地方
    • 电商网站
    • 旅游网站
    • 租房
    • 装修公司
    • 医院
    • 短视频网站
    • 云盘
    • 图床
  2. 需要什么?
    • 首先需要的是fastDFS
      • 配置环境
      • 扩容
    • 操作fastDFS - 客户端
      • 浏览器
      • 桌面终端 - Qt,mfc
    • 数据库操作
      • mysql
      • oralce
    • 有一个web服务器 - Nginx
      • 静态资源部署
      • 动态请求 - 编写fastCGI程序
        • 注册
        • 登录
        • 上传
        • 下载
        • 秒传
        • 文件列表的获取等等
    • redis
      • 存储服务器访问比较频繁的数据

3. web服务器的反向代理

在这里插入图片描述

  注意,这里对web服务器做反向代理,完全是拓展知识点。实际上,单台web服务器能够承载很高的并发了,再做反向代理,真的适用吗?有这么高的并发来吗?本项目用的是单台web服务器,并没有对其做反向代理。

  在C++文件服务器项目—Nginx—3一文中以及详细写了如何做反向代理和负载均衡,这里不做详细介绍。

# 反向代理的那台服务器nginx.conf配置如下
    server {
        listen       80;         # 客户端访问反向代理服务器, 代理服务器监听的端口
        server_name  reverse.proxy.com; # 客户端访问反向代理服务器, 需要一个域名
        location / {
        	# 指令 / 转发所有
            # 反向代理服务器转发指令, http:// 固定的头
            proxy_pass http://linux.com;
        }

    }
    # 添加一个代理模块,代理两台服务器
    upstream linux.com
    {	# 可以配置权重
    	# 1/4 概率 走102
    	# 3/4 概率 走103
        #server 192.168.109.102:80 weight=1;
        #server 192.168.109.103:80 weight=3;
        server 192.168.109.102:80;
        server 192.168.109.103:80;
    }

## =====================================

# web服务器
# 相对于web服务器来说,它们的工作都是一样的
# 所有它们的所有location也应该相同
web服务器需要做什么?
# 192.168.109.102
location /
{
    root xxx;
    index xxx;
}

location /hello/ 
{
    root xx;
    index xxx;
}

location /upload/ 
{
    root xxx;
    index xx;
}

# 192.168.109.103
location /
{
    root xxx;
    index xxx;
}

location /hello/ 
{
    root xx;
    index xxx;
}

location /upload/ 
{
    root xxx;
    index xx;
}

4. 存储节点的反向代理

在这里插入图片描述

  上图的反向代理服务器代理的是每个存储节点上部署的Nginx。每个存储节点上的Nginx的职责: 解析用户的http请求, 帮助用户快速下载文件。

  客户端上传了一个文件, 被存储到了fastDFS上, 得到一个文件ID "/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3Asg3Z0782.mp4"。因为存储节点有若干个, 所有下载的时候不知道对应的存储节点的访问地址,给存储节点上的nginx web服务器添加反向代理服务器之后, 下载的访问地址:只需要知道nginx反向代理服务器的地址就可以了:192.168.109.100。只需要访问:http://192.168.109.100/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3Asg3Z0782.mp4即可

  客户端的请求发送给了nginx反向代理服务器,反向代理服务器不处理请求, 只转发, 转发给存储节点上的nginx服务器。

# 反向代理服务器的配置
 - nginx.conf
	- 找出处理指令: 去掉协议, iP/域名, 末尾文件名, ?和后边的字符串
		- /group1/M00/00/00/ - 完整的处理指令 
	- 添加location
server{

	location  ~/group1/M([0-9])([0-9])
    {
		# 数据转发, 设置转发地址
    	proxy_pass http://test1.com;
    }
	location  ~/group2/M([0-9])([0-9])
    {
		# 数据转发, 设置转发地址
    	proxy_pass http://test2.com;
    }
}
# 都属于group1一组,所以轮询发给谁都能,会自动同步
upstream test1.com
{
    # fastDFS存储节点的地址, 因为存储节点上安装了nginx, 安装的nginx作为web服务器的角色
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
}
# 都属于group2一组,所以轮询发给谁都能,会自动同步
upstream test2.com
{
    # fastDFS存储节点的地址, 因为存储节点上安装了nginx, 安装的nginx作为web服务器的角色
    server 192.168.2.101;
    server 192.168.2.102;
    server 192.168.2.103;
}
	
# ===================================
存储节点上的web服务器的配置
存储节点1
    location  ~/group1/M([0-9])([0-9])
    {
        # 请求处理
    	ngx_fastdfs_module;
    }

存储节点2
	location  ~/group2/M([0-9])([0-9])
    {
        # 请求处理
    	ngx_fastdfs_module;
    }

本文含有隐藏内容,请 开通VIP 后查看