前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qt 实现视频监控系统

Qt 实现视频监控系统

原创
作者头像
派大星在吗
发布于 2021-12-15 07:37:20
发布于 2021-12-15 07:37:20
3K0
举报
文章被收录于专栏:我的技术专刊我的技术专刊

二、功能特点

(一)软件模块

  1. 视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。
  2. 视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。
  3. 电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。
  4. 日志查询模块,包括本地日志、设备日志等。
  5. 系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、用户管理等。

(二)基础功能

  1. 支持各种视频流(rtsp、rtmp、http等)、视频文件(mp4、rmvb、avi等)、本地USB摄像机播放。
  2. 支持多画面切换,包括1、4、6、8、9、13、16、25、36、64画面切换。
  3. 支持全屏切换,多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键(alt+enter全屏,esc退出全屏)。
  4. 支持视频轮询,包括1、4、9、16画面轮询,可设置轮询分组(轮询预案)、轮询间隔、码流类型等。
  5. 支持onvif协议,包括设备搜索、云台控制、设备控制(图片参数、校对时间、系统重启,抓拍图片等)。
  6. 支持权限管理,不同的用户可以对应不同的模块权限,比如删除日志、关闭系统等。
  7. 数据库支持多种,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。
  8. 本地USB摄像机支持设置分辨率、帧率等参数。
  9. 所有停靠模块都自动生成对应的菜单用来控制显示和隐藏,在标题栏右键可以弹出。
  10. 支持显示所有模块、隐藏所有模块、复位普通布局、复位全屏布局。
  11. 双击设备弹出实时预览视频,支持图片地图、在线地图、离线地图等。
  12. 摄像机节点拖曳到对应窗体播放视频,同时支持拖曳本地文件直接播放。
  13. 删除视频支持鼠标右键删除、悬浮条关闭删除、拖曳到视频监控面板外删除等多种方式。
  14. 图片地图上设备按钮可自由拖动,自动保存位置信息。百度地图上可以鼠标单击获取经纬度信息,用来更新设备位置。
  15. 视频监控面板窗体中任意通道支持拖曳交换,瞬间响应。
  16. 封装了百度地图,视图切换,运动轨迹,设备点位,鼠标按下获取经纬度等。
  17. 双击节点、拖曳节点、拖曳窗体交换位置等操作,均自动更新保存最后的播放地址,下次软件打开自动应用。
  18. 右下角音量条控件,失去焦点自动隐藏,音量条带静音图标。
  19. 支持视频截图,可指定单个或者对所有通道截图,底部小工具栏也有截图按钮。
  20. 支持超时自动隐藏鼠标指针、自动全屏机制。
  21. 支持onvif云台控制,可上下左右移动云台摄像机,包括复位和焦距调整等。
  22. 支持任意onvif摄像机,包括但不限于海康、大华、宇视、天地伟业、华为等。
  23. 可保存视频,可选定时存储或者单文件存储,可选存储间隔时间。
  24. 可设置视频流通信方式tcp+udp,可设置视频解码是速度优先、质量优先、均衡等。
  25. 可设置软件中文名称、英文名称、LOGO图标等。
  26. 存储的视频文件支持导出到指定目录,支持批量上传到服务器

(三)特色功能

  1. 主界面采用停靠窗体模式,各种组件以小模块的形式加入,可自定义任意模块加入。
  2. 停靠模块可拖动任意位置嵌入和悬浮,支持最大化全屏,支持多屏幕。
  3. 双重布局文件存储机制,正常模式、全屏模式都对应不同的布局方案,自动切换和保存,比如全屏模式可以突出几个模块透明显示在指定位置,更具科幻感现代化。
  4. 原创onvif协议机制,采用底层协议解析(udp广播搜索+http请求执行命令)更轻量易懂易学习拓展,不依赖任何第三方组件比如gsoap。
  5. 原创数据导入导出机制,跨平台不依赖任何组件,瞬间导出数据。
  6. 内置多个原创组件,宇宙超值超级牛逼,包括数据导入导出组件(导出到xls、pdf、打印)、数据库组件(数据库管理线程、自动清理数据线程、万能分页、数据请求等)、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。
  7. 自定义信息框+错误框+询问框+右下角提示框(包含多种格式)等。
  8. 精美换肤,高达17套皮肤样式随意更换,所有样式全部统一,包括菜单等。
  9. 视频控件悬浮条可以自行增加多个按钮,监控界面底部小工具栏也可自行增加按钮。
  10. 双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点下的所有视频。可选主码流、子码流。
  11. 录像机管理、摄像机管理,可添加删除修改导入导出打印信息,立即应用新的设备信息生成树状列表,不需重启。
  12. 可选多种内核自由切换,ffmpeg、vlc、mpv等,均可在pro中设置。推荐用ffmpeg,跨平台最多,默认提供好了linux和mac平台上编译好的库。
  13. 支持硬解码,可设置硬解码类型(qsv、dxva2、d3d11va等)。
  14. 默认采用opengl绘制视频,超低的CPU资源占用,支持yuyv和nv12两种格式绘制,很牛逼。
  15. 高度可定制化,用户可以很方便的在此基础上衍生自己的功能,比如增加自定义模块,增加运行模式、机器人监控、无人机监控、挖掘机监控等。
  16. 支持xp、win7、win10、linux、mac、各种国产系统(UOS、中标麒麟、银河麒麟等)、嵌入式linux等系统。
  17. 注释完整,项目结构清晰,超级详细完整的使用开发手册,精确到每个代码文件的功能说明,不断持续迭代版本。

三、体验地址

  1. 体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_video_system.zip。
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
  6. 在线文档:https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/

四、效果图

8.jpg

五、核心代码

代码语言:txt
AI代码解释
复制
void frmVideoUpload::addItem(const QString &name, const QString &data)
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    int row = fileNames.count();
代码语言:txt
AI代码解释
复制
    QString fileName = data + "/" + name;
代码语言:txt
AI代码解释
复制
    fileNames << fileName;
代码语言:txt
AI代码解释
复制
    //复选框,如果勾选了全选则自动选中当前设备
代码语言:txt
AI代码解释
复制
    QCheckBox *itemCk = new QCheckBox(this);
代码语言:txt
AI代码解释
复制
    itemCk->setChecked(ckAll->isChecked());
代码语言:txt
AI代码解释
复制
    //添加文件名称
代码语言:txt
AI代码解释
复制
    QTableWidgetItem *itemFile = new QTableWidgetItem;
代码语言:txt
AI代码解释
复制
    itemFile->setText(name);
代码语言:txt
AI代码解释
复制
    itemFile->setData(Qt::UserRole, QString(data));
代码语言:txt
AI代码解释
复制
    itemFile->setTextAlignment(Qt::AlignCenter);
代码语言:txt
AI代码解释
复制
    //添加文件大小
代码语言:txt
AI代码解释
复制
    QTableWidgetItem *itemSize = new QTableWidgetItem;
代码语言:txt
AI代码解释
复制
    quint64 size = QFile(fileName).size();
代码语言:txt
AI代码解释
复制
    itemSize->setText(TcpFileHelper::getFileSizeMB(size));
代码语言:txt
AI代码解释
复制
    itemSize->setTextAlignment(Qt::AlignCenter);
代码语言:txt
AI代码解释
复制
    //添加单位
代码语言:txt
AI代码解释
复制
    QTableWidgetItem *itemUnit = new QTableWidgetItem;
代码语言:txt
AI代码解释
复制
    itemUnit->setText("MB");
代码语言:txt
AI代码解释
复制
    itemUnit->setTextAlignment(Qt::AlignCenter);
代码语言:txt
AI代码解释
复制
    //增加进度条
代码语言:txt
AI代码解释
复制
    QProgressBar *itemBar = new QProgressBar(this);
代码语言:txt
AI代码解释
复制
    itemBar->setRange(0, size);
代码语言:txt
AI代码解释
复制
    itemBar->setValue(0);
代码语言:txt
AI代码解释
复制
    ui->tableWidget->setCellWidget(row, 0, itemCk);
代码语言:txt
AI代码解释
复制
    ui->tableWidget->setItem(row, 1, itemFile);
代码语言:txt
AI代码解释
复制
    ui->tableWidget->setItem(row, 2, itemSize);
代码语言:txt
AI代码解释
复制
    ui->tableWidget->setItem(row, 3, itemUnit);
代码语言:txt
AI代码解释
复制
    ui->tableWidget->setCellWidget(row, 4, itemBar);
代码语言:txt
AI代码解释
复制
}
代码语言:txt
AI代码解释
复制
void frmVideoUpload::on_btnSelect_clicked()
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    QDate dateStart = ui->dateStart->date();
代码语言:txt
AI代码解释
复制
    QDate dateEnd = ui->dateEnd->date();
代码语言:txt
AI代码解释
复制
    if (dateStart > dateEnd) {
代码语言:txt
AI代码解释
复制
        QUIHelper::showMessageBoxError("开始时间不能大于结束时间!", 3);
代码语言:txt
AI代码解释
复制
        return;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    //将日期转换为日期时间计算相差的天数,超过最大天数则提示不用继续
代码语言:txt
AI代码解释
复制
    if (dateStart.daysTo(dateEnd) >= 60) {
代码语言:txt
AI代码解释
复制
        QUIHelper::showMessageBoxError("每次最大只能查询60天内!", 3);
代码语言:txt
AI代码解释
复制
        return;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    fileNames.clear();
代码语言:txt
AI代码解释
复制
    ui->tableWidget->clearContents();
代码语言:txt
AI代码解释
复制
    QString filePath;
代码语言:txt
AI代码解释
复制
    if (ui->cboxType->currentText() == "存储视频") {
代码语言:txt
AI代码解释
复制
        filePath = AppData::VideoNormalPath;
代码语言:txt
AI代码解释
复制
    } else {
代码语言:txt
AI代码解释
复制
        filePath = AppData::VideoAlarmPath;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    //获取所有文件夹名称,根据时间查询对应通道对应类型视频
代码语言:txt
AI代码解释
复制
    //如果开始时间小于或者等于结束时间,则将开始时间对应文件夹下的视频文件添加到列表
代码语言:txt
AI代码解释
复制
    //然后将开始时间加一天,直到大于结束时间
代码语言:txt
AI代码解释
复制
    while (dateStart <= dateEnd) {
代码语言:txt
AI代码解释
复制
        //生成对应日期的文件夹
代码语言:txt
AI代码解释
复制
        QString savePath = QString("%1/%2").arg(filePath).arg(dateStart.toString("yyyy-MM-dd"));
代码语言:txt
AI代码解释
复制
        QDir saveDir(savePath);
代码语言:txt
AI代码解释
复制
        //判断文件夹是否存在
代码语言:txt
AI代码解释
复制
        if (saveDir.exists()) {
代码语言:txt
AI代码解释
复制
            //指定文件拓展名过滤,按照时间升序排序
代码语言:txt
AI代码解释
复制
            QStringList filter;
代码语言:txt
AI代码解释
复制
            filter << "*.mp4" << "*.h264";
代码语言:txt
AI代码解释
复制
            QStringList names = saveDir.entryList(filter, QDir::NoFilter, QDir::Time | QDir::Reversed);
代码语言:txt
AI代码解释
复制
            foreach (QString name, names) {
代码语言:txt
AI代码解释
复制
                //如果是选择的所有通道,则不过滤视频文件
代码语言:txt
AI代码解释
复制
                if (ui->cboxCh->currentText() == "所有通道") {
代码语言:txt
AI代码解释
复制
                    addItem(name, savePath);
代码语言:txt
AI代码解释
复制
                } else {
代码语言:txt
AI代码解释
复制
                    //对应通道的视频文件添加进来
代码语言:txt
AI代码解释
复制
                    QString videoCh = name.split("_").first();
代码语言:txt
AI代码解释
复制
                    QString chName = QString("Ch%1").arg(ui->cboxCh->currentIndex());
代码语言:txt
AI代码解释
复制
                    if (videoCh == chName) {
代码语言:txt
AI代码解释
复制
                        addItem(name, savePath);
代码语言:txt
AI代码解释
复制
                    }
代码语言:txt
AI代码解释
复制
                }
代码语言:txt
AI代码解释
复制
            }
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
        dateStart = dateStart.addDays(1);
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}
代码语言:txt
AI代码解释
复制
void frmVideoUpload::on_btnUpload_clicked()
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    //过滤选中的文件
代码语言:txt
AI代码解释
复制
    int fileCount = fileNames.count();
代码语言:txt
AI代码解释
复制
    QList<QString> files;
代码语言:txt
AI代码解释
复制
    QList<QProgressBar *> bars;
代码语言:txt
AI代码解释
复制
    for (int row = 0; row < fileCount; row++) {
代码语言:txt
AI代码解释
复制
        QString fileName = fileNames.at(row);
代码语言:txt
AI代码解释
复制
        QCheckBox *itemCk = (QCheckBox *)ui->tableWidget->cellWidget(row, 0);
代码语言:txt
AI代码解释
复制
        QProgressBar *bar = (QProgressBar *)ui->tableWidget->cellWidget(row, 4);
代码语言:txt
AI代码解释
复制
        bar->setValue(0);
代码语言:txt
AI代码解释
复制
        if (itemCk && itemCk->isChecked()) {
代码语言:txt
AI代码解释
复制
            files << fileName;
代码语言:txt
AI代码解释
复制
            bars << bar;
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    int count = files.count();
代码语言:txt
AI代码解释
复制
    if (count == 0) {
代码语言:txt
AI代码解释
复制
        QUIHelper::showMessageBoxError("没有选中设备!", 3);
代码语言:txt
AI代码解释
复制
        return;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    //每个上传都一个线程
代码语言:txt
AI代码解释
复制
    for (int i = 0; i < count; i++) {
代码语言:txt
AI代码解释
复制
        TcpSendFileThread *sendFileThread = new TcpSendFileThread(this);
代码语言:txt
AI代码解释
复制
        sendFileThread->setFileName(fileNames.at(i));
代码语言:txt
AI代码解释
复制
        //网络不好可以自行调整每次发的包的大小
代码语言:txt
AI代码解释
复制
        sendFileThread->setMaxPackageSize(0xFFFF);
代码语言:txt
AI代码解释
复制
        sendFileThread->setReceiveIP(AppConfig::UploadHost);
代码语言:txt
AI代码解释
复制
        sendFileThread->setReceivePort(AppConfig::UploadPort);
代码语言:txt
AI代码解释
复制
        sendFileThread->setProgressBar(bars.at(i));
代码语言:txt
AI代码解释
复制
        sendFileThread->start();
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
Raft: 寻找可理解的共识算法(完)
Figure 10: Switching directly from one configuration to another is unsafe because different servers will switch at different times. In this example, the cluster grows from three servers to five. Unfortunately, there is a point in time where two different leaders can be elected for the same term, one with a majority of the old configuration (Cold) and another with a majority of the new configuration (Cnew).
s09g
2022/07/06
5090
Raft: 寻找可理解的共识算法(完)
Raft: 寻找可理解的共识算法(2)
Figure 2: A condensed summary of the Raft consensus algorithm (excluding membership changes and log compaction). The server behavior in the upper-left box is described as a set of rules that trigger independently and repeatedly. Section numbers such as §5.2 indicate where particular features are discussed. A formal specification [31] describes the algorithm more precisely.
s09g
2022/07/06
5490
Raft: 寻找可理解的共识算法(2)
Raft: 寻找可理解的共识算法(3)
Figure 6: Logs are composed of entries, which are numbered sequentially. Each entry contains the term in which it was created (the number in each box) and a command for the state machine. An entry is considered committed if it is safe for that entry to be applied to state machines.
s09g
2022/07/06
4490
Raft: 寻找可理解的共识算法(3)
详细解读Raft 共识算法
1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:
Kunkka Wu
2022/01/13
1.9K0
详细解读Raft 共识算法
raft算法详解_python raft
  raft是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos。但Paxos是:少数真正理解的人觉得简单,尚未理解的人觉得很难,大多数人都是一知半解。本人也花了很多时间、看了很多材料也没有真正理解。直到看到raft的论文,两位研究者也提到,他们也花了很长的时间来理解Paxos,他们也觉得很难理解,于是研究出了raft算法。
全栈程序员站长
2022/09/20
8100
raft算法详解_python raft
Raft 共识算法总结
Raft 算法是目前应用广泛的分布式共识算法,在许多知名的开源项目比如 etcd 中,都有 Raft 的身影。同时,随着 MIT6.824 课程的普及,Raft 俨然成为了最广为人知的分布式共识算法。
月梦@剑心
2024/02/14
2410
Raft 共识算法总结
共识算法-raft论文分析
中文:https://destinywang.github.io/blog/2018/04/15/%E7%BF%BB%E8%AF%91-In-Search-of-an-Understandable-Consensus-Algorithm-%E2%80%94%E2%80%94-Raft%E7%AE%97%E6%B3%95/
早起的鸟儿有虫吃
2019/05/14
8210
共识算法-raft论文分析
Raft 一致性协议算法 《In search of an Understandable Consensus Algorithm (Extended Version)》
《In search of an Understandable Consensus Algorithm (Extended Version)》
WindWant
2020/09/11
1.8K0
Raft 一致性协议算法 《In search of an Understandable Consensus Algorithm (Extended Version)》
MIT 6.824 - Raft学生指南
For the past few months, I have been a Teaching Assistant for MIT’s 6.824 Distributed Systems class. The class has traditionally had a number of labs building on the Paxos consensus algorithm, but this year, we decided to make the move to Raft. Raft was “designed to be easy to understand”, and our hope was that the change might make the students’ lives easier.
s09g
2022/07/06
8660
raft 共识算法详解
上一次分享了 CAP 定理,我们了解到在有网络分区(Partition)的情况下,我们只能在一致性(Consistency)与可用性(Availability)之间二择一,更进一步地说,我们其实是在光谱的两端 — 强一致性(Strong Consistency)与最终一致性(Eventually Consistency)之间做选择。
写bug的高哈哈
2024/11/04
1660
raft 共识算法详解
CAP, BASE, Paxos, and Raft: Key Concepts in Distributed Systems
When discussing the design principles underpinning distributed systems, the CAP theorem and BASE theory serve as essential foundations that warrant our understanding.
ppxai
2023/11/18
2360
由Consul谈到Raft
在前一篇文章consul配置与实战中,介绍了consul的一些内幕及consul配置相关,并对项目中的一些实际配置进行展示。这篇文章重点介绍consul中所涉及到的一致性算法raft。 1. 背景 分布式系统的一致性是相当重要的,即为CAP理论中的C(Consistency)。一致性又可以分为强一致性和最终一致性。这篇文章重点讨论强一致性算法raft。 Lamport发表Paxos一致性算法从90年提出到现在已经有二十几年了,直到2006年Google的三篇论文初现“云”的端倪,其中的Chubby Lock
aoho求索
2018/04/03
1.7K0
由Consul谈到Raft
从JRaft来看Raft协议实现细节
一致性问题(consensus problem)是分布式系统需要解决的一个核心问题。分布式系统一般是由多个地位相等的节点组成,各个节点之间的交互就好比几个人聚在一起讨论问题。让我们设想一个更具体的场景,比如三个人讨论中午去哪里吃饭,第一个人说附近刚开了一个火锅店,听说味道非常不错;但第二个人说,不好,吃火锅花的时间太久了,还是随便喝点粥算了;而第三个人说,那个粥店我昨天刚去过,太难喝了,还不如去吃麦当劳。结果,三个人僵持不下,始终达不成一致。
luozhiyun
2020/06/18
1.2K0
从JRaft来看Raft协议实现细节
一致性协议浅析:从逻辑时钟到Raft
春节在家闲着没事看了几篇论文,把一致性协议的几篇论文都过了一遍。在看这些论文之前,我一直有一些疑惑,比如同样是有Leader和两阶段提交,Zookeeper的ZAB协议和Raft有什么不同,Paxos协议到底要怎样才能用在实际工程中,这些问题我都在这些论文中找到了答案。接下来,我将尝试以自己的语言给大家讲讲这些协议,使大家能够理解这些算法。同时,我自己也有些疑问,我会在我的阐述中提出,也欢迎大家一起讨论。水平有限,文中难免会有一些纰漏门也欢迎大家指出。
王知无-import_bigdata
2019/07/09
1.1K0
一致性协议浅析:从逻辑时钟到Raft
分布式共识算法(Paxos、Raft)
多个参与者针对某一件事达成完全一致:一件事,一个结论。 已达成一致的结论,不可推翻。
leobhao
2022/06/28
3.7K0
分布式共识算法(Paxos、Raft)
浅谈 CAP 和 Paxos 共识算法
作者:郑勰,腾讯 CSIG 网络产品部后台开发工程师 什么是 CAP 关于 CAP 理论的背景介绍已经很多,这里不过多介绍,我们谈谈如何理解它的问题。 用通俗易懂的话解释三个名词: 一致性 如果刚刚向一个节点写入,那么之后,从另外一个节点读取的必须是刚刚写入的数据,不能是更老的数据。 可用性 如果请求一个节点,这个节点必须能够给予回复,如果节点挂掉了,那就谈不上可用性了。 分区容忍性 是否容忍网络分区,即可以允许节点和其它节点无法通信。 CAP 的意思就是说我们最多只能保证其中两个条件同时成立
腾讯技术工程官方号
2020/02/14
9980
浅谈 CAP 和 Paxos 共识算法
深入剖析共识性算法 Raft
Raft 是一种为了管理日志复制的分布式一致性算法。Raft 出现之前,Paxos 一直是分布式一致性算法的标准。Paxos 难以理解,更难以实现。Raft 的设计目标是简化 Paxos,使得算法既容易理解,也容易实现。
2020labs小助手
2021/04/19
1.3K0
解读Raft(一 算法基础)
最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理。
林一
2018/07/24
6991
解读Raft(一 算法基础)
Raft 算法分析
官方定义: A Distributed Coordination Service for Distributed Applications。本质:基于内存的 KV 系统,以 path 为 key。
Yano_nankai
2021/01/26
6770
Raft 算法分析
从Paxos到Raft,分布式一致性算法解析
导语 | 后台服务架构经过了集中式、SOA、微服务和服务网格四个阶段,目前互联网界大都使用微服务和服务网格。服务从集中式、中心化向分布式、去中心化不断演进,服务也变得更灵活,能够自动扩缩容、快速版本迭代等。但是分布式架构也将集中式下一些问题放大,比如通信故障、请求三态(成功、失败、超时)、节点故障等,这些问题会导致一系例数据不一致的问题,也是计算机领域的老大难问题。本文将与大家一起学习分布式一致性算法,因作者水平有限,若文中有不正处,还请多多指导。文章作者:董友康,腾讯PCG研发工程师。 一、CA
腾讯云开发者
2021/03/01
5250
相关推荐
Raft: 寻找可理解的共识算法(完)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档