HBlock盘活视频监控系统存储资源

随着网络技术的普及,安防IT化更加深化,安防系统的许多环节,特别是网络环境,逐渐转变为借助通用产品进行构建,包括存贮、显示在内的后端设备也更趋于通用化。云存储、云计算的出现使后端设备云化也正在行业内逐步显现,基于IP网络技术的安防前端设备呈现更快速的发展。

视频监控作为“平安城市”建设的核心组成部分,是城市公共安全的重要保障。国家大力开展社会面监控系统建设,通过与公安网络相连接,大力预防、发现犯罪行为,为公安机关侦查破案提供有力支撑。当前,视频监控在社会公共安全中发挥着越来越重要的作用,并成为继刑事科学技术、行动技术、网络侦查技术之后的第四大侦查技术领域。随着“平安城市”建设向纵深推进,系统建设从一线城市向二三线城市拓展,由大、中城市向区县、乡镇推广。

视频监控系统的部署与使用中存在五大痛点:

存储扩展能力。随着视频技术的应用发展,视频监控的路数、质量、存储时长都大幅提高,数据量成倍增长。在视频存储系统的容量与扩展能力都面临巨大挑战。视频存储系统需要具备海量的数据管理规模和动态的存储扩展能力。

独特性要求。多路摄像头并发不间断写入,要求存储系统具有长时间稳定的写入速率,写入延迟抖动小,防止出现丢帧;视频回放时,要求存储系统读取性能稳定,避免视频断流和马赛克。反复写入删除时,存储系统需消除磁盘碎片问题,读写性能不下降。

可靠性与可用性。视频监控数据的存储需要满足高可靠要求,数据的有效存储容量达到1个月至3年之久。存储系统必须能够容忍存储服务器和硬盘的故障,以及突然断电等挑战,保证在发生故障时不丢失数据,确保存储系统的可靠性。

热数据调取需求。随着应用技术的发展,视频内容的快速检索、回看、对比分析已经在公安、交通、安检等场景得到广泛应用。曾经作为冷数据的视频数据,如今正成为需要不断调取的温数据甚至热数据。

成本控制要求。视频监控系统数量大,数据保存时间长,数据价值密度不高,存储系统必须具有较低的成本,从而应对长时间大容量存储的业务需求。

存储资源盘活系统(HBlock)将通用服务器及其管理的存储资源转换成高性能的虚拟存储阵列,通过标准iSCSI协议提供分布式块存储服务。它专注于服务稳定数据持久,具有数据冗余、数据恢复、数据平衡、数据校验等功能。超强兼容无缝衔接,智能扩展持久可用,容灾备份稳定高效,服务协调统一管理。存储模式多样化,支持本地模式、缓存模式、存储模式。支持纠删码(EC),相比传统多副本模式提供了相同或者更高的可靠性,并显著提高了磁盘的利用率,节省了总成本。

该方案的优势在于:软硬件兼容性强,兼容支持Linux操作系统的x86和ARM硬件,支持国产设备;扩展性优秀,支持横向和纵向扩展,在不中断业务的情况下,扩展至数千台服务器,或增加服务器数据盘;绿色,不干扰其他进程的执行,可以与其他应用同时运行在同一操作系统实例中,支持盘活利用旧设备上的存储资源,进一步节约成本;易安装,高度优化的压缩安装包,3分钟即可完成集群安装;高可用,分布式双控架构,提供像传统硬件存储阵列一样的低延迟和高可用性。自动化秒级故障切换,一个逻辑卷对应两个 Target:Active Target 和 Standby Target。当卷对应的Active Target 所在服务器故障时,几秒内自动切换到 Standby Target,而不会导致业务中断。可靠性高,服务器中其他应用引起的高负载,CPU/内存使用率高,网络异常(如数据包丢失或高延迟)以及其他异常情况,这些情况统称为亚健康状态。在亚健康状态下,仍可以确保数据不丢失,服务不停止。灵活动态扩展,节省成本。可根据需求动态扩展,容量和性能线性增加,能满足任意规模摄像头数量的监控需求,增强监控系统存储能力的扩展性、节省成本。性能优异,读写延迟抖动小,视频回放更流畅,遇到重大安全事件时视频检索更快速。绿色轻量,极易安装部署。具备极简易用的Web图形化管理界面,学习使用成本低,易于运维和管理。

HBlock参与了某城市轨道交通安全视频监控项目。为满足公安部对地铁监控视频存储90天的要求,在工程实施中,解决了视频数量多、带宽要求高、存储体量大等各种问题,具体包括:前段 摄像头规格不统一、众厂商产品复杂、信号源不一致等。中段 链路带宽流量大,交换机站点数量多、监控平台接入等。后段 存储池容量不足、如何进行多资源池的流量调度、网关协议转换等问题。该项目充分体现出存储资源盘活系统HBlock在视频监控领域的优势。实现该地铁监控88个重点站及其它站点A类视频,共计11000路摄像机的存储空间得到有效保障。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<stdio.h> #include "dos.h" #include "stdlib.h" #include "conio.h" //PCB结构体 struct pcb{ int id; //进程序号 int ra; //所需资源A的数量 int rb; //所需资源B的数量 int rc; //所需资源C的数量 int ntime; //所需的时间片个数 int rtime; //已经运行的时间片个数 char state; //进程状态 struct pcb *next; } *hready=NULL,*hblock=NULL,*p; //hready,hblock分别为指向就绪和阻塞队列 typedef struct pcb PCB; int m,n,r,a,b,c,h=0,i=1,time1Inteval; //m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //建立一个PCB结构体型的空链表 PCB *increat(void) { PCB *head=NULL; //head=NULL; return(head); } //从链表起始地址开始输出该链表的内容 void disp(PCB *head) {PCB *p1; p1=head; AnsiString str2; if(head!=NULL) //链表非空 { do { str2+=" "; str2+=IntToStr(p1->id);str2+=" "; str2+=(p1->state);str2+=" "; str2+=IntToStr(p1->ra);str2+=" "; str2+=IntToStr(p1->rb);str2+=" "; str2+=IntToStr(p1->rc);str2+=" "; str2+=IntToStr(p1->ntime);str2+=" "; str2+=IntToStr(p1->rtime);str2+="\r\n"; p1=p1->next; }while(p1!=NULL); //不断输出进程的信息,直到链尾! } //if else { str2+="\t\t该 队 列 中 没 有 进 程!\r\n" ;} Form1->Memo1->Lines->Add(str2); } //将进程插入到链尾(包括就绪队列和阻塞队列) PCB *insert(PCB *head,PCB*pcb) //带两个指针形参:队列指针和当前进程PCB { PCB *pi,*p1; p1=head; pi=pcb; if (head==NULL) { head=pi; pi->next=NULL; } else { while(p1->next!=NULL) {p1=p1->next;} p1->next=pi; pi->next=NULL; } return(head); } //对进程进行初始化,建立就绪队阻塞队列。 void input() { AnsiString str1; m=StrToInt (Form1->Edit1->Text); //读取要模拟的进程总数给m n=StrToInt (Form1->Edit2->Text); //读取需初
实验一 进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序 。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法 的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进 程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据 实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行 时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均 由用户给定。 2、系统资源(r1…rw),共有w类,每类数目为r1…rw。随 机产生n进程Pi(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程 中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设 初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需 要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执 行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1 ,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图 2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0; listBox1.Items.Add("产生进程ID:" + jincheng.id); listBox1.Items.Add("所需A资源数目:" + jincheng.ra); listBox1.Items.Add("所需B资源数目:" + jincheng.rb); listBox1.Items.Add("所需C资源数目:" + jincheng.rc); listBox1.Items.Add("所需时间片数:" + jinc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值