高并发 前后置服务器 框架设计

目录

一:高并发

二:前后置服务器分离

三:共享内存共用


一:高并发

什么是高并发

高:允许同时上线的客户端数量高,即服务器能够同时接收到多(数量庞大)个客户端的连接请求(使用到epoll  IO多路复用技术)

并发:可以同时处理多个客户端的业务,客户端不需要“排队”等待服务器处理业务(使用到线程池完成并发设计)

高并发难点在于 IO操作(接收到的业务怎么进行处理)

内存(程序) ---》 硬盘(数据库文件)  ---》 内存(程序)

服务器要承载极多(数量庞大)个客户端对接(),同时还要承载极多(数量庞大)个客户端与其传递分析业务数据(并发),要执行线程池选择哪个线程执行任务,在接收到数据后还要做繁琐的IO操作

试想若是服务器设计为:业务服务器+文件服务器

业务服务器(硬件配置重点在 CPU算力+内存)(完成高并发所有的内存操作)

   文件服务器(硬件配置重点在硬盘)(完成高并发所有的文件操作)

将内存操作和硬盘操作分开处理,这样的设计能否有效解决高并发存在的问题?

思路大致为:由业务服务器去处理高并发所有的内存操作,若业务中涉及有文件操作则可以访问文件服务器调用指令,以此高并发存在的问题

二:前后置服务器分离

前后置服务器分离之间使用到IPC进程间通信:共享内存(需要共用) + 消息队列 + 信号量 

前置服务器:客户端对接 + 业务分析处理

后置服务器:文件处理 + 数据库处理

三:共享内存共用

共享内存共用设计思路:索引区 + 数据区

索引区  int数组 单元格4字节

数据区 数据区单元格大小要能够容纳最大的业务处理

前置服务器+后置服务器(两个进程)     

前置服务器可对索引区0对应数据区进行写数据

后置服务器可对索引去1对应数据区进行读数据

如下图

前置服务器:数据写入 共享内存[数据区] (索引由0到1,后置服务器对索引1对应数据区及时读数据处理)

共享内存中存在数据后(索引为1),

可以使用消息队列 也就是前置服务器[写完数据后]发送消息给后置服务器[令其可以及时读取数据],

如下图,根据 共享内存[索引区1代表有数据 索引区0代表没有数据 目前是有数据表示为1]索引为1对应数据区,后置服务器可以及时读取数据

读取数据后(索引由1到0),清空数据区数据     (memcpy + memset)

索引区为0代表无数据,前置服务器就可以进行下一次 数据的写入

指针偏移:索引区 数据区 

索引区操作公式

memcpy(共享内存首地址+sizeof(int)*索引下标,数据,sizeof(int)) 

数据区操作公式

memcpy(共享内存首地址+索引区总长度+单个数据块长度*索引区下标,数据指针,数据大小)

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenruhan_QAQ_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值