【架构】浅谈服务化
什么是服务化不相关的业务合集不是服务化烟囱架构不是服务化
【架构】浅谈微服务架构
前言微服务架构作为现代软件开发中的重要架构模式,正在被越来越多的企业和团队所采用。从单体应用到服务化,再到微服务架构的演进,反映了软件系统复杂度不断增长和技术架构不断优化的过程。本文将从历史发展、核心概念、实践方法等角度,浅谈微服务架构的设计与实现。 服务化的演进历程软件架构的演进通常遵循着从简单到复杂、从单一到分布式的发展轨迹: 单体架构阶段 特点:所有功能模块部署在同一个应用中 优势:开发简单、部署方便、调试容易 问题:随着业务增长,代码量激增,维护困难,技术栈固化 服务化架构阶段 特点:按照业务领域将应用拆分为多个独立的服务 优势:服务间相对独立,可以采用不同技术栈 问题:服务粒度较粗,内部仍可能存在耦合 微服务架构阶段 特点:服务拆分粒度更细,每个服务职责单一 优势:高度解耦、独立部署、技术多样性 挑战:分布式复杂性、数据一致性、运维成本 微服务的历史尽管微服务(microservice)的概念第一次在 2014 年被 Martin Fowler 和 James Lewis 正式提出并系统化阐述,实际上相关的思想早在 2000 年代初就已经诞生。 发展时间线 2000s ...
【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三级缓存的那点空间远远不够,因此我们需要专门为存储程序和数据开辟一段空间,而这些空间,则是由内存提供。 内存在物理上的是真实存在的,如下图是一根内存条。内存(RAM - Random Access Memory)是计算机中的临时存储设备,它具有以下特点: 易失性:断电后数据会丢失 随机访问:可以直接访问任意地址的数据 高速读写:相比磁盘存储,内存的读写速度要快得多 有限容量:相对于磁盘存储,内存容量较小但成本较高 内存的主要作用是在程序运行时存储程序代码和数据,为CPU提供快速的数据访问通道。当我们运行一个程序时,操作系统会将程序从磁盘加载到内存中,CPU再从内存中读取指令和数据进行处理。 计算机组成架构现代计算机采用冯·诺伊曼架构,其中内存系统是核心组成部分之一。整个存储层次结构从上到下包括: 存储层次结构 CPU寄存器 容量:几十到几百字节 访问速度:1个时钟周期 成本:最高 CPU缓存(L1/L2/L3) L1缓存:32K ...
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 ...
v2.4美鹅外卖平台反向代理更新
更新内容 架构上添加代理层,升级为应用服务集群架构 容器编排上,后端服务程序数量提升为两个 采用反向代理负载均衡技术,后端服务器均衡承载负载 什么是应用服务集群架构当单台应用服务器出现了性能瓶颈之后,可以有如下两种扩展解决方案: 垂直扩展/纵向扩展ScaleUp。通过购买性能更优、价格更⾼的应⽤服务器来应对更多的流量。这种⽅案的优势在于完全不需要对系统软件做任何的调整;但劣势也很明显:硬件性能和价格的增⻓关系是⾮线性的,意味着选择性能2倍的硬件可能需要花费超过4倍的价格,其次硬件性能提升是有明显上限的。 ⽔平扩展/横向扩展ScaleOut。通过调整软件架构,增加应⽤层硬件,将⽤⼾流量分担到不同的应⽤层服务器上,来提升系统的承载能⼒。这种⽅案的优势在于成本相对较低,并且提升的上限空间也很⼤。但劣势是带给系统更多的复杂性,需要技术团队有更丰富的经验 这里我们决定使用水平扩展,调整软件架构的方式提高服务法并发量。 但这需要引⼊⼀个新的组件⸺负载均衡:为了解决⽤⼾流量向哪台应⽤服务器分发的问题,需要⼀个专⻔的系统组件做流量分发。 关于流量分发的策略,有以下几种常见的策 ...
C++复习小短篇】访问基类的私有函数
题目内容该问题考察对虚函数表的理解,虚函数表就是是一个类存储虚函数地址的指针列表,每一个声明的虚函数(不论是新建还是重写)都会写入虚函数表的对应位置。 虚函数表的地址在vc编译器下存储在每个对象内存空间的最前面,通过解引用可以访问虚函数表的首地址,接下来我们可以通过遍历等方式访问里面存的函数地址。 代码如下 12345678910111213141516171819202122232425262728293031323334353637383940414243#include <iostream>using namespace std;class A{public: virtual void g() { cout << "A::g" << endl; }private: virtual void f() { cout << "A::f"<<endl; }};class B :public A{public: vir ...
初阶】初识Redis与指令学习
认识RedisRedis 是⼀种基于键值对(key-value)的NoSQL数据库,同时它也是一款高性能的内存数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满⾜很多的应⽤场景,⽽且因为Redis会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。 Redis的八大特性Redis有着八大令人青睐的特性 1. 速度快Redis最突出的特点就是速度快,官⽅给出的读写性能可以高达10万/秒,而保证它能有如此之高性能的基础,主要有如下四点: 基于内存:相比于传统数据库基于外存上存储的数据库文件,Redis所有的数据都是存放在内存中的,由于内存和外存的读写速率差异是以数量级论的,所以Redis相比之下速度特别快 C语言实现:C语言本身就具有高性能的特点 单线程数据处理: 单线程的处理方式避免了锁竞争造成的性能损耗 高性能的代码实现 2. 基于键值对的数据结构服 ...
avatar
副驾supdriver
动物界 脊索动物门 哺乳纲 灵长目 人科 人属 智人种
我github还蛮大的
公告
主域名:
supdriver.top
网站资讯
文章数目 :
133
已运行时间 :
本站总字数 :
388k
本站总访问量 :
最后更新时间 :