C++项目】v2.6美鹅外卖-总集介绍博客
项目源码连接: https://github.com/sis-shen/BeautyGoose 项目介绍个人独立设计和多轮迭代开发的C/S架构开源项目。按照业务功能进行解耦合和分层,形成良好的层次结构。服务端采用高并发的应用服务器集群架构,使用Drogon作为HTTP框架。代码实现自定义的数据库客户端和Redis客户端,保持代码的易读性和易维护性。同时使用Docker容器编排技术完成应用集群构建和数据库服务部署。客户端包含QT实现的18个不同的交互界面,有完善的页面流转逻辑。 使用的技术点有: QT界面框架 Json序列化与反序列化 Drogon网络库 MySQL connector/c++ Redis 缓存层 Nginx 负载均衡 Docker容器与镜像管理技术 运行环境当前版本v2.6 客户端: windows 11 服务端: 支持Docker的任意平台 需求分析用户需求当前目标实现的用户需求有 用户注册、登录 商家添加产品 商家查看和修改产品 商家查看和处理订单 消费者查看和添加购物车 消费者查看和结算订单 消费者优惠等级变化 管理员查看销售日志 角 ...
【保持最新】C++基于多设计模式下的同步&异步⽇志系统
当前版本v1.3 戳我查看项目源码🔗 前置知识 Linux日志器(简易版) 初识Linux线程 初识设计模式&单例模式&代理模式–设计模式介绍(1) 工厂模式与建造者模式–设计模式介绍(2) 项目介绍背景引入 日志系统在软件开发和运维中扮演着至关重要的角色,主要体现在以下几个方面: 问题排查和调试:日志记录了系统运行过程中的重要信息,包括错误信息、异常堆栈、接口调用信息等。开发人员可以通过分析日志快速定位问题,减少排查时间,提高开发效率。 性能监控:通过记录应用程序的性能指标(如响应时间、请求吞吐量等),开发团队可以监控系统的健康状态,发现性能瓶颈并进行优化。 安全审计:日志可以记录用户的操作和系统事件,为后期的安全审计提供依据。一旦发生安全事件,通过分析日志可以追踪到攻击来源和攻击方式。 用户行为分析:通过对日志进行分析,开发团队可以了解用户的使用习惯和需求,这有助于改进产品功能和用户体验。 合规要求:在许多行业中,日志记录是合规的要求之一。维护完整的日志记录可以帮助企业满足法律法规和行业标准。 系统健康监控:通过实时监控日志,可以及时发现系统异常,进行预警和 ...
什么是领域驱动设计(DDD)
软件设计不止UML在软件开发的世界中,设计方法论层出不穷。从早期的结构化设计到面向对象设计,再到如今备受关注的领域驱动设计(Domain-Driven Design,DDD),每一种方法都在试图解决软件复杂性不断增长的问题。虽然UML作为统一建模语言在软件设计中发挥了重要作用,但它并不是唯一的解决方案。 UML简介统一建模语言(Unified Modeling Language,UML)是一种标准化的建模语言,用于软件系统的可视化设计。UML提供了多种图形符号和规则,包括用例图、类图、序列图、活动图等十几种不同类型的图表。 UML的主要特点: 标准化:提供了统一的建模符号和语法 全面性:涵盖了软件开发生命周期的各个阶段 工具支持:有丰富的建模工具支持 文档化:便于团队沟通和知识传承 然而,UML也存在一些局限性: 学习曲线陡峭,需要掌握大量符号和规则 过于技术导向,业务人员难以理解 容易陷入过度设计的陷阱 维护成本高,文档与代码容易脱节 DDD的起源领域驱动设计(DDD)由Eric Evans在2003年的同名著作中首次提出。这一设计方法论的诞生背景是软件项目日益复杂,传统的技 ...
【架构】浅谈服务化
什么是服务化不相关的业务合集不是服务化烟囱架构不是服务化
【架构】浅谈微服务架构
TODO 服务化微服务的历史尽管微服务(microservice)的概念第一次在2014年被提出,实际上相关的思想早在零几年就已经诞生。 什么是微服务将服务拆分成更小的微服务。 如何拆分微服务基于DDD原则拆分 何时拆分微服务 业务的根逻辑不同,需要拆分到不同的微服务中 单个服务的代码过于庞大,需要拆分解耦合分别独立演进 何时不要拆分微服务拆分微服务也是有代价的 再优秀的网络调用实现也比本地调用慢一个数量级,过多的网络通信会增大时延和带宽压力 越是复杂的分布式系统,一致性就越难保持 多个实际上紧密相关的微服务可能常常需要同步更新部署
【Linux】离线安装apt包-如何配置断网虚拟机的环境
情景引入今天在公司实习的时候,遇到了云服务器上虚拟机配环境困难的问题,来看看我是如何部分解决的吧 众所周知公司的开发环境往往是内网环境,网络通信的出入都有可能是十分严格的。这些管控依赖于电脑中配置的安全软件,包括公司内的服务器也有这些安全软件,而运行在这些服务器之上的虚拟机,却有可能因为种种原因,可能是安全软件不方便安装,或者是其它我不知道的原因,总之为了防止虚拟机绕过安全检测产生泄密问题,虚拟机的网络往往比内网的弱互联网更弱,不仅访问不了官方apt源,甚至因为网络配置或者安全拦截等问题访问不到公司内的镜像apt源,对于这种情况,如果想要配置必要的环境,有没有什么办法解决呢? 方法原理我们可以利用宿主机能够访问apt源的网络优势,获取apt包的离线安装包,传入虚拟机后,再用dpkg -i指令安装 具体步骤我们以离线安装lcov包为例子,演示如何解决我们的问题 1. 下载apt离线包我们使用apt download指令下载 1apt download lcov 输出如下 2. 转移离线包到虚拟机这里我们主要有两种方式 scp <源目录> <登录用户>@< ...
suprpc-json基于json的C++ RPC框架
介绍RPC服务RPC (Remote Procedure Call的缩写),即远程过程调用,是一种通过网络将业务过程交给远端进程而不是本地进程完成的调用方式。它可以实现业务过程细节的保密性以及减轻调用方算力需求等功能。RPC属于一类方法的统称,不过它们基本上依赖于网络通信,因此可以分为基于HTTP协议或者基于传输层实现的自定义应用层RPC协议等类型。 RPC的目标就是把实际上的网络通信接口调用封装起来,使其用起来就好像在调用本地方法一样。
【软件工程】为什么要有规范化的技术文档
美鹅外卖项目文档【3】《模块设计说明书》
TODO
美鹅外卖项目文档【3】《技术选型报告》
技术选型报告 项目名称: 美鹅外卖平台系统编写人: 沈冬法日期: 2025年6月3日版本号: V2.7 1. 文档说明1.1 编写目的本报告旨在明确美鹅外卖平台各技术组件的选型依据与优劣分析,为后续开发、部署与维护提供技术决策支持。 1.2 适用范围本报告适用于系统架构师、开发工程师、测试工程师与运维团队,涉及平台核心架构及相关中间件、工具组件的选型。 2. 项目背景简述美鹅外卖平台采用 C/S 架构,支持用户、商户、管理员三类角色,核心需求包括高并发支持、安全交易、跨平台客户端、模块化服务。系统部署需兼容容器化和分布式调度架构。 3. 技术选型原则 ✅ 性能优先:支持高并发、高I/O吞吐 ✅ 跨平台能力:客户端需支持 Win/macOS/Linux ✅ 社区成熟度:优先选择文档丰富、维护活跃项目 ✅ 易部署可维护:简化运维部署流程,容器支持友好 ✅ 开源优先,商业授权可控 4. 技术选型与对比分析4.1 客户端开发框架 框架 跨平台 GUI支持 文档完备 性能 最终选择 Qt 6.7 ✅ 强 ⭐⭐⭐⭐ 高 ✅ Elect ...
美鹅外卖项目文档【2】《系统架构设计说明书》
项目名称: 美鹅外卖平台系统 编写人: 沈冬法 日期: 2025年6月3日 版本号: V2.71. 文档概述1.1 编写目的本说明书用于描述的系统整体架构设计,包括部署拓扑、模块划分、通信机制及技术栈选型,帮助开发、测试、运维人员理解系统架构并指导开发实施。 1.2 项目背景外卖服务作为本地生活服务的核心业务之一,需支持高并发、快速响应、安全支付等特性。本项目采用 C/S 架构,构建一个多角色(用户、商家、平台)参与的外卖服务系统。 1.3 读者对象 架构师 开发工程师(C++ / Qt / MySQL) 测试工程师 产品经理 运维人员 1.4 术语与缩写 缩写 含义 SADD 系统架构设计说明书 C/S Client/Server 架构 Qt 跨平台图形界面开发框架 API 应用程序编程接口 1.5 参考文献 软件需求规格说明书(版本 V1.0) Qt官方开发指南 MySQL文档 项目调研报告与行业竞品分析 2. 系统总体设计2.1 系统架构概述系统采用典型的 C/S 架构模型:客户端通过 Q ...
美鹅外卖项目文档【1】《软件需求规格说明书》
软件需求规格说明书(SRS)项目名称: 美鹅外卖平台系统 编写人: 沈冬法 日期: 2025年6月3日 版本号: V2.7 1. 引言特别声明,这里只提出了最小的逻辑自洽的软件需求 1.1 编写目的本文档用于分析说明“基于Qt框架的C/S架构的外卖平台”项目的软件系统架构、运行环境、功能及非功能需求,帮助开发者与用户对系统达成一致理解,为后续设计与开发提供基础。 1.2 项目背景与范围该文档适用于本项目相关的所有干系人,明确: 系统架构与组件分布 运行环境与依赖 主要功能模块 子功能及输入/输出说明 非功能性需求描述 1.3 术语与缩写 术语/缩写 说明 消费者 使用平台购买产品的一方 商家 在平台售卖产品的一方 管理员 有权限查看系统销售日志的角色 C/S Client/Server 架构 2. 总体描述2.1 产品功能概述该平台支持用户注册登录、商品浏览、下单支付、订单管理,商家上架商品、处理订单、查看日志等核心功能。 2.2 用户特征 消费者端:普通用户,桌面端或浏览器端下单 商家端:负责商品管理 ...
美鹅外卖项目文档【0】《需求调研报告》
《需求调研报告》项目名称: 美鹅外卖平台系统 编写人: 沈冬法 日期: 2025年6月3日 版本号: V2.7 一、调研背景与目的近年来,线上外卖行业迅猛发展,用户对送餐效率、食品安全及平台服务的要求不断提升。然而,当前主流外卖平台普遍存在高额抽成、商家信用体系不完善及食品安全问题频发等痛点。大学周边区域外卖需求旺盛,同时校内拥有机房、信息网络中心等丰富的算力与网络资源。基于此背景,构建一个专注于大学校园的地域性外卖平台,兼具显著的商业价值与社会价值。 本次调研目的: 明确用户端、商户端、平台端的核心业务需求 识别外卖服务过程中的主要痛点 提供可支持系统分析与架构设计的第一手资料 二、调研方法个人开发精力和资源有限,部分调研方法仅供参考 用户访谈(共计12人,包括学生、白领与自由职业者) 问卷调查(线上问卷,收集有效数据210份) 竞品分析(美团外卖、饿了么) 行业报告研读(艾媒咨询、国家市场监管总局等) 三、调研对象与样本概况虚假数据,仅供参考 对象类型 数量 占比 普通用户 150 71% 商户 40 19% 骑手 10 5% 平台人员 10 ...
v2.7美鹅外卖平台项目规范更新
按Doxygen的语法完善项目注释,并生成参考文档 文档更新为了规范项目的接口注释、类注释等,我们使用了Doxygen作为注释文档工具,并按照其语法完善了各个接口的注释 生成的网页版文档示例如下:
美鹅外卖平台v2.7+版本更新计划
引入建造者模式 引入继承来使模块间规范性更高和解耦合 编写生成和插入初始化测试数据的测试用初始化程序 编写自动化测试网络API的接口测试程序 引入etcd和brpc技术 引入消息队列,研究流量削峰技术 引入网关和令牌桶技术,提高项目的抗压能力 项目重组,将服务拆分为微服务模块 引入Redis集群 MySQL分库分表 MySQL集群搭建 网页版客户端
C++异步web框架drogon使用探究
简介Drogon是一个基于C++17/20的Http应用框架,使用Drogon可以方便的使用C++构建各种类型的Web应用服务端程序。Drogon是作者非常喜欢的美剧《权力的游戏》中的一条龙的名字(汉译作卓耿),和龙有关但并不是dragon的误写,为了不至于引起不必要的误会这里说明一下。 Drogon是一个跨平台框架,它支持Linux,也支持macOS、FreeBSD,OpenBSD,HaikuOS,和Windows。它的主要特点如下: 网络层使用基于epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高并发、高性能的网络IO。 全异步编程模式; 支持Http1.0/1.1(server端和client端); 基于template实现了简单的反射机制,使主程序框架、控制器(controller)和视图(view)完全解耦; 支持cookies和内建的session; 支持后端渲染,把控制器生成的数据交给视图生成Html页面,视图由CSP模板文件描述,通过CSP标签把C++代码嵌入到Html页面,由drogon的命令行工具在编译阶 ...
v2.6美鹅外卖平台Web框架替换更新
Drogon简介Drogon是一个基于C++17/20的Http应用框架,专门用于构建高效的Web应用和服务端程序 网络层使用基于epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高并发、高性能的网络IO。 安装123456789101112#安装依赖(Ubuntu示例)sudo apt install -y gcc g++ cmake libssl-dev libjsoncpp-dev uuid-dev zlib1g-dev#克隆仓库git clone https://github.com/drogonframework/drogon.gitcd drogongit submodule update --init#编译安装(约5-10分钟)mkdir buildcd buildcmake ..make -j$(nproc)sudo make install 创建控制器类12345678# 当前位置:BeautyGoose/Server/server/srcmkdir controllers && cd cont ...
v2.5美鹅外卖平台延迟瓶颈测试
计时器类为了测量延迟,我们需要使用计时功能,为此我们把相关的功能封装进计时器类内,简化使用 这段代码位于logger.hpp中 12345678910111213141516171819202122232425262728class ScopedTimer{public: ScopedTimer(const std::string&name) :_name(name),_start(std::chrono::high_resolution_clock::now()) { _prev = _start; } int64_t staged() { auto stage = std::chrono::high_resolution_clock::now(); auto ret = stage - _prev; _prev = stage; return (std::chrono::duration_cast<std::chrono:: ...
etcd服务发现功能使用探究
简介etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。通过分布式锁,leader选举和写屏障(write barriers)来实现可靠的分布式协作。etcd集群是为高可用,持久性数据存储和检索而准备。 特性 通过官网给出的特性,我们可以看到: 简单的接口: etcd使用标准HTTP接口读写 键值对存储: etcd的核心业务是键值对存储,实际业务中常常用于服务注册和发现 监控变化: etcd能监控特定的key或者目录,并触发回调函数(对于监控服务十分有用) 安装在宿主机上安装服务12345678sudo apt update -y# 安装sudo apt-get install etcd # 启动sudo systemctl start etcd# 配置开机自启sudo systemctl enable etcd 在Docker中运行etcd容器1234# 从官方镜像仓库拉取git pull gcr.io/etcd-development/etcd:v3.5.19# 从国内镜像源拉取git pull swr.cn-north-4.myhuaweiclou ...
v2.5美鹅外卖平台Redis数据缓存更新
更新要点 在容器编排中引入Redis 7.2.4 将Redis服务作为MySQL缓冲层 修复客户端部分bug,并使用Release模式重新编译 为什么引入Redis缓存根据时间局部性原理,访问过的数据,短时间内大概率会被再次访问,由于服务端的业务处理运行在内存中,而数据库的访问数据会发生硬盘IO,存在巨大的速度差异,导致性能瓶颈,所以我们在数据库与业务层中引入数据缓存,提高数据的访问速率。 创建Redis容器为了更方便地使用Redis服务,我们使用Redis的Docker镜像生成一个容器来提供服务。比如我们使用镜像redis:7.2.4 1docker pull redis:7.2.4 下面是docker-compose.yml的部分代码,特别的,我们的业务层容器依赖于redis容器先启动,所以也要修改server容器的配置 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253services: server: build: ...
内存管理机制探究
什么是计算机的内存我们都知道计算机的实际计算发生在CPU中,但是对于一个程序本身和它所使用的数据来说,CPU的那点寄存器和CPU三级缓存的那点空间远远不够,因此我们需要专门为存储程序和数据开辟一段空间,而这些空间,则是由内存提供。 内存在物理上的是真实存在的,如下图是一根内存条 计算机组成架构主存与CPU,磁盘的交互虚拟内存与物理内存为什么有虚拟内存内存管理内存映射机制内存回收机制Swap分区
Rust自学一周初印象
经过一周对Rust语言圣经的学习和第三方包的使用体验,我成功从纯Rust小白成为了Rust爱好者,已经有了能进行网络编程和数据库交互的基本能力。 概括一下Rust的特点 超高效的运行时效率 大聪明编译器 干费我2核2G服务器的rust analyzer 安全,安全,还是安全! 特征,特征对象,超牛的泛型编程方式 又见堆栈我原本是以C/C++为主语言的,在使用Python或Java这种有GC垃圾回收机制的语言时,对堆栈并不强调,没想到遇上Rust,堆栈的概念再一次被强调了起来,但与C/C++这种对堆栈,尤其是堆区的分配的过于自由的管理相比,Rust对堆栈的管理十分严格,且涉及到Rust是如何在没有GC机制的前提下,既能高效使用内存,又能保证安全。 所有权与借用对于变量的数据,它有一个所有权规则,没错,变量和数据之间的联系更为松散,存在通过所有权转移导致数据还在,但变量已经失效的情况 以上是一点,而还有一点就是当变量拥有分配在堆上的数据的所有权时,变量一旦带着所有权被释放时,堆上的数据会一并被自动回收,这样就不用担心内存泄漏的问题了,也不用手动释放内存。 不想转移所有权?,那就试试使用克 ...
Rust框架入门之Axum+Sea-ORM实现MySQL增删查改
框架介绍Axum一款基于tokio的web框架TODO Sea_ORM一款提供对象关系映射服务的项目 环境准备 编程环境: 安装好rust 编码环境:vscode + rust analyzer插件 数据库:安装好本机上的MySQL Server 开始上手数据库准备虽然Sea-ORM提供数据库的建库和建表操作,但是为了简化项目难度,这次我们就手动创建了 这里给出初始化的sql语句 123456789DROP DATABASE if EXISTS RustMysql;CREATE DATABASE RustMysql DEFAULT CHARACTER SET utf8mb4;use RustMysql;create table account( `id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` varchar(16) not null unique)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 安装swa-orm-cli客户端这是一个专门用于自动生成sea-o ...
v2.4美鹅外卖平台压力测试
日志查阅在2.4出现后台服务器挂掉的情况后,我立即去查看了容器的日志信息,获得了如下日志: 12345678910111213141516171819202122[default-logger][06:16:43][9][info ][HTTPServer.cpp:415] [消费者获取菜品详情]成功,dish id:D7d33e8b47dda[default-logger][06:16:43][9][trace ][HTTPServer.cpp:416] { "dish" : "{\n \"base_price\" : 11.0,\n \"description\" : \"11\",\n \"icon_path\" : \"https://ts3.cn.mm.bing.net/th?id=ORMS.800de0e05f326302bea15ba2e5ff707d&pid=Wdp&w=26 ...
avatar
副驾supdriver
动物界 脊索动物门 哺乳纲 灵长目 人科 人属 智人种
我github还蛮大的
公告
主域名:
supdriver.top
网站资讯
文章数目 :
112
已运行时间 :
本站总字数 :
340.3k
本站总访问量 :
最后更新时间 :