SpringClound 微服务分布式Nacos学习笔记
一、基本概述
在实际项目中,选择哪种架构需要根据具体的需求、团队能力和技术栈等因素综合考虑。
单体架构(Monolithic Architecture)
单体架构是一种传统的软件架构风格,将整个应用程序构建为一个单一的、不可分割的单元。在这种架构中,所有的功能模块(如用户管理、订单处理、支付等)都打包在一个大型的、统一的代码库中,并且部署为一个单独的进程。
微服务架构(Microservices Architecture)
微服务架构是一种将复杂应用程序分解为一组小型、独立服务的架构风格。每个微服务都围绕特定的业务功能构建,运行在其独立的进程中,并通过轻量级的通信机制(通常是HTTP/RESTful API、消息队列等)协同工作。例如,一个电商系统可以被拆分为用户服务(处理用户注册、登录等功能)、订单服务(负责订单创建、查询等)、库存服务(管理商品库存)等多个微服务。
总结
-
单体架构适用于小型或简单的应用程序,开发团队规模较小,且对系统的扩展性和灵活性要求不高。
-
微服务架构适用于复杂、大型的应用程序,特别是需要高可扩展性、灵活性和快速迭代的场景。开发团队需要具备分布式系统的开发和运维能力。
一、单体架构(Monolithic Architecture)
(一)定义
单体架构是一种传统的软件架构风格,将整个应用程序构建为一个单一的、不可分割的单元。在这种架构中,所有的功能模块(如用户管理、订单处理、支付等)都打包在一个大型的、统一的代码库中,并且部署为一个单独的进程。
(二)特点
-
集中式开发
单体架构的代码通常集中在一个大型的代码库中,所有功能模块共享相同的代码库。开发团队需要在同一个代码库中协作,进行功能开发、修改和维护。 -
统一部署
整个应用程序作为一个整体进行部署。每次更新或修复任何功能模块时,都需要重新打包并部署整个应用程序。例如,如果只是修复了一个小的用户界面问题,也需要重新部署整个系统。 -
紧密耦合
功能模块之间通常存在紧密的依赖关系。一个模块的变更可能会影响到其他模块,因此在修改代码时需要非常谨慎,以避免引入新的问题。 -
可扩展性有限
单体架构的扩展通常是通过增加服务器的性能(如CPU、内存)来实现的,这种扩展方式称为垂直扩展。当系统负载增加时,垂直扩展的代价会越来越高,且存在硬件资源的瓶颈。
(三)优点
-
简单易理解
对于小型或简单的应用程序,单体架构的结构相对简单,开发和部署过程也较为直观。开发人员可以快速上手,不需要复杂的架构设计和分布式系统的知识。 -
开发工具友好
大多数开发工具(如IDE)对单体架构的支持较好,调试和测试也相对容易。开发人员可以在一个统一的环境中进行开发,不需要考虑跨服务的调试问题。 -
事务管理简单
在单体架构中,事务管理相对简单,因为所有的功能模块都在同一个进程中运行,可以通过传统的数据库事务来保证数据的一致性。
(四)缺点
-
可维护性差
随着应用程序的规模增大,代码库会变得庞大且复杂,开发和维护成本会急剧上升。新功能的添加或现有功能的修改可能会引入新的问题,影响整个系统的稳定性。 -
部署困难
由于每次更新都需要重新部署整个应用程序,部署过程可能会变得繁琐且耗时。同时,频繁的部署也可能对系统的稳定性产生影响。 -
技术栈受限
单体架构通常使用单一的技术栈,很难引入新的技术或框架。一旦选择了某种技术,后续很难进行技术的替换或升级。
二、微服务架构(Microservices Architecture)
(一)定义
微服务架构是一种将复杂应用程序分解为一组小型、独立服务的架构风格。每个微服务都围绕特定的业务功能构建,运行在其独立的进程中,并通过轻量级的通信机制(通常是HTTP/RESTful API、消息队列等)协同工作。
(二)特点
-
独立性
独立开发:每个微服务可以由不同的团队独立开发,团队之间只需要通过定义好的接口进行协作。例如,用户服务团队和订单服务团队可以分别开发和维护自己的服务,而不需要相互干扰。
独立部署:每个微服务可以独立部署,更新或扩展一个微服务不会影响到其他微服务。例如,当订单服务需要更新订单处理逻辑时,只需要重新部署订单服务相关的代码和配置。
独立扩展:可以根据每个微服务的负载情况独立扩展。如果用户服务的访问量突然增加,可以单独增加用户服务的实例数量,而不需要对其他服务进行扩展。
-
容错性
单个微服务的故障不会导致整个系统崩溃。例如,如果库存服务暂时不可用,订单服务仍然可以正常接收订单,只是可能无法实时更新库存信息,但系统可以设计为在这种情况下记录订单并等待库存服务恢复后再处理库存更新。 -
可维护性高
由于每个微服务都相对独立,代码库较小,开发和维护成本相对较低。新功能的添加或现有功能的修改不会对整个系统产生太大的影响。
(三)优点
-
敏捷开发
微服务架构支持敏捷开发,不同的团队可以并行开发不同的微服务,加快开发速度。同时,独立部署的特点也使得新功能可以快速上线。 -
可扩展性强
微服务架构支持水平扩展,可以根据每个微服务的负载情况独立扩展。例如,通过增加微服务实例的数量来应对高并发场景。 -
技术灵活性
开发团队可以自由选择最适合的技术栈来开发每个微服务,便于引入新技术和框架。 -
容错性好
单个微服务的故障不会导致整个系统崩溃,系统的整体可用性更高。
(四)缺点
-
分布式系统复杂性
微服务架构本质上是一个分布式系统,需要处理分布式事务、服务间通信、数据一致性等问题。例如,一个业务流程可能涉及多个微服务的调用,需要解决分布式事务问题。 -
部署和运维复杂
微服务架构需要管理多个独立的服务,部署和运维的复杂度会增加。例如,需要管理每个微服务的配置、监控、日志等。 -
性能开销
由于微服务之间通过网络通信(如HTTP/RESTful API、消息队列),可能会引入额外的性能开销。例如,服务间的调用延迟可能会比单体架构中的方法调用延迟更高。 -
数据一致性挑战
微服务架构中,数据通常分散在不同的微服务中,需要解决数据一致性问题。例如,订单服务和库存服务可能分别存储订单信息和库存信息,需要通过分布式事务或事件驱动的方式来保证数据的一致性。
三、单体架构与微服务架构的对比
特点 | 单体架构 | 微服务架构 |
开发方式 | 集中式开发,所有功能模块在同一个代码库中 | 分布式开发,每个微服务独立开发 |
部署方式 | 统一部署,更新需要重新部署整个应用程序 | 独立部署,更新或扩展一个微服务不影响其他微服务 |
技术栈 | 通常使用单一技术栈 | 可以使用多种技术栈 |
可维护性 | 小型应用简单,大型应用复杂且难以维护 | 可维护性高,每个微服务相对独立 |
扩展性 | 垂直扩展,受限于硬件资源 | 水平扩展,可以根据负载独立扩展每个微服务 |
容错性 | 一个模块的故障可能导致整个系统崩溃 | 单个微服务的故障不会影响整个系统 |
事务管理 | 传统数据库事务管理简单 | 需要分布式事务管理 |
性能开销 | 方法调用性能高,没有额外的网络通信开销 | 服务间通信可能引入额外的性能开销 |
开发工具 | 开发工具友好,调试和测试简单 | 开发工具支持有限,调试和测试复杂 |
适用场景 | 小型或简单的应用程序 | 复杂、大型的应用程序,需要高可扩展性和灵活性 |
SpringClound
官网地址: Spring Cloud
SpringCloud是目前国内使用最广泛的微服务框架。集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
微服务拆分
原则:
微服务通信
当我们将微服务拆分后,各自的资源会存在独立管理的状态,当某个服务需要调用另一个服务的资源的时候。我们可以通过 网络通信 的方式,进行各自的资源交互。
Spring RestTemplate工具
Spring给我们提供了一个RestTemplate工具,可以方便的实现Http请求的发送。使用步骤如下:
1、注入RestTemplate到Spring容器
@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
2、简单的Get引用获取交换资源
@RequiredArgsConstructor
public class demoServiceImpl extends ServiceImpl<demoMapper, demo> implements IdemoService {private final RestTemplate restTemplate;private void demo(){// 2.1 . 利用 RestTemplate 发起 http 请求,得到 http 的响应ResponseEntity<List<ItemDTO>> response = restTemplate.exchange("http://localhost:8081/items?ids={ids}",HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtil.join(itemIds, ",")));// 2.2 . 解析响应if(!response.getStatusCode().is2xxSuccessful()){
// 响应失败,直接结束return ;}List<ItemDTO> items = response.getBody();if (CollUtils.isEmpty(items)) {return;}// 3.转为 id 到 item的mapMap<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));// 4.写入vofor (CartVO v : vos) {ItemDTO item = itemMap.get(v.getItemId());if (item == null) {continue;}v.setNewPrice(item.getPrice());v.setStatus(item.getStatus());v.setStock(item.getStock());}}
}
服务治理-nacos
微服务远程通信问题
当我们多个服务运行后,其中某个服务挂机,而我们写的请求URL写死了,导致获取不到资源。又亦或重启服务后,端口方面有变动,我们又得要从源码中更改,这是不理想的情况的。
注册中心原理
什么是注册中心
在分布式系统中,服务会有很多实例,这些实例分布在不同的机器上。注册中心就像是一个“服务中心”,它记录了所有服务实例的信息,包括服务名称、实例的地址(IP和端口)等。当一个服务(客户端)需要调用另一个服务(服务提供者)时,它会先去注册中心查询服务提供者的地址,然后才能进行通信。
Nacos 注册中心
Nacos是目前国内企业中占比最多的注册中心组件。它是阿里巴巴的产品,目前已经加入SpringCloud Alibaba中。(官网:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网)
Nacos搭建步骤
1、配置MySQL表
我们基于Docker来部署Nacos的注册中心,首先我们要准备MySQL数据库表,用来存储Nacos的数据。官方Nacos-SQL表(mysql-schema.sql)
这里注意执行脚本前,自定义一个自己的数据库,同时添加用户信息(密码:nacos)
CREATE DATABASE nacos;
USE nacos;
-- 最后添加用户信息
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
2、dockers部署
- 拉取镜像
docker pull nacos/nacos-server:v2.5.1-slim
- 通过 SSL 执行生成随机base64的 NACOS_AUTH_TOKEN
openssl rand -base64 32
- 一键命令创建并启动镜像(系统参数 | Nacos 官网)
docker run -d \
--name nacos \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-e NACOS_AUTH_ENABLE=true \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=localhost \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai' \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_TOKEN='eZCEZeAxiQvbsTJMtc518ocS4vtiEwBTDqGVvk3FPww=' \
-e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=18000 \
-e NACOS_AUTH_IDENTITY_KEY=nacos \
-e NACOS_AUTH_IDENTITY_VALUE=123456 \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
nacos/nacos-server:v2.5.1-slim
启动成功后,通过 logs 可以看到
访问 http://localhost:8848/nacos/,就进入到需要登录的页面。
根据我们配置的MySQL默认账号密码都为:Nacos。登录即可看到页面
服务注册
1、引入依赖
父工程:
<!--spring cloud-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope>
</dependency>
<!--spring cloud alibaba-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope>
</dependency>
子工程:
<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、配置 yaml 文件
spring:cloud:nacos:discovery:server-addr: localhost:8848username: nacospassword: nacos
3、启动服务
可以看到服务注册成功。
服务发现
@Autowired
private DiscoveryClient discoveryClient;private void DemoItems(){// 根据服务名称获取服务的实例列表List<ServiceInstance> instances = discoveryClient.getInstances("item-service");if(CollUtils.isEmpty(instances)){
// 没有可用的服务,直接结束return ;}// 使用 cn.hutool.core.util.RandomUtil; 工具包随机获取一个实例ServiceInstance serviceInstance = instances.get(RandomUtil.randomInt(instances.size()));
// 获取服务的 URI : http://localhost:8081URI uri = serviceInstance.getUri();// 2.1 . 利用 RestTemplate 发起 http 请求,得到 http 的响应ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(uri + "/items?ids={ids}",HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtil.join(itemIds, ",")));// 2.2 . 解析响应if(!response.getStatusCode().is2xxSuccessful()){
// 响应失败,直接结束return ;}List<ItemDTO> items = response.getBody();
}
通过测试可以发现,实现了负载均衡。
相关文章:
SpringClound 微服务分布式Nacos学习笔记
一、基本概述 在实际项目中,选择哪种架构需要根据具体的需求、团队能力和技术栈等因素综合考虑。 单体架构(Monolithic Architecture) 单体架构是一种传统的软件架构风格,将整个应用程序构建为一个单一的、不可分割的单元。在这…...
PageIndex:构建无需切块向量化的 Agentic RAG
引言 你是否对长篇专业文档的向量数据库检索准确性感到失望?传统的基于向量的RAG系统依赖于语义相似性而非真正的相关性。但在检索中,我们真正需要的是相关性——这需要推理能力。当处理需要领域专业知识和多步推理的专业文档时,相似度搜索常…...
使用Java调用TensorFlow与PyTorch模型:DJL框架的应用探索
在现代机器学习的应用场景中,Python早已成为广泛使用的语言,尤其是在深度学习框架TensorFlow和PyTorch的开发和应用中。尽管Java在许多企业级应用中占据一席之地,但因为缺乏直接使用深度学习框架的能力,往往使得Java开发者对机器学…...
nodejs的包管理工具介绍,npm的介绍和安装,npm的初始化包 ,搜索包,下载安装包
nodejs的包管理工具介绍,npm的介绍和安装,npm的初始化包 ,搜索包,下载安装包 🧰 一、Node.js 的包管理工具有哪些? 工具简介是否默认特点npmNode.js 官方的包管理工具(Node Package Manager&am…...
LeetCode 热题 100_分割等和子集(89_416_中等_C++)(动态规划)
LeetCode 热题 100_分割等和子集(89_416) 题目描述:输入输出样例:题解:解题思路:思路一(动态规划): 代码实现代码实现(思路一(动态规划࿰…...
EasyCVR视频智能分析平台助力智慧园区:全场景视频监控摄像头融合解决方案
一、方案背景 在智慧园区建设的浪潮下,设备融合、数据整合与智能联动已成为核心诉求。视频监控作为智慧园区的“视觉中枢”,其高效整合直接影响园区的管理效能与安全水平。然而,园区内繁杂的视频监控设备生态——不同品牌、型号、制式的摄像…...
《剥开卷积神经网络CNN的 “千层酥”:从基础架构到核心算法》
文章目录 前言卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理网格结构数据(如图像、视频、音频)的深度学习模型。它在计算机视觉任务(如图像分类、目标检测)中表现尤为出色…...
win10中打开python的交互模式
不是输入python3,输入python,不知道和安装python版本有没有关系。做个简单记录,不想记笔记了...
技术与情感交织的一生 (七)
目录 出师 大三 MVP 首战 TYMIS はじめまして 辣子鸡丁 报价 日本人 致命失误 大佬 包围 品质保障 扩军 唯快不破 闪电战 毕业 总攻 Hold On 出师 大三 大三的学习生活,能认认真真的上一天课的时候很少,甚至经常因为客户的 “传呼”…...
ElasticSearch深入解析(一):Elastic Stack全景
一、Elastic Stack的发展 过去和现在: Elastic数据平台在搜索、地理位置、内部日志、数据指标、安全监控和APM应用性能管理等场景中的应用颇具亮点。 APM(Application Performance Management,应用性能管理)是一种用于监控和管理…...
CAD在线查看免费,可以支持DWG/GLB/GLTF/doc/wps/pdf/psd/eml/zip, rar/MP3/MP4/svg/OBJ/FBX格式
CAD在线查看免费,可以支持DWG/GLB/GLTF/doc/wps/pdf/psd/eml/zip, rar/MP3/MP4/svg/OBJ/FBX格式 m.gszh.xyz m.gszh.xyz 免费支持以下格式文件在线查看类型 支持 doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx, xlam, xla, pages …...
【机器学习案列-21】基于 LightGBM 的智能手机用户行为分类
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
多路转接poll服务器
目录 函数原型 poll服务器 对比select的优点 关于select的详解,可查看多路转接select服务器-CSDN博客 函数原型 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); poll作为多路转接的实现方案,与select要解决的问…...
全本地化智能数字人
🌟EdgePersona- 全本地化智能数字人 完全离线 | 隐私无忧 | 轻量高效 |笔记本友好 测试效果:【纯本地部署的电子魅魔!笔记本也能离线,隐私性拉满】 https://www.bilibili.com/video/BV1jydeYTETD/?share_sourcecopy_web&v…...
第6次课 贪心算法 A
向日葵朝着太阳转动,时刻追求自身成长的最大可能。 贪心策略在一轮轮的简单选择中,逐步导向最佳答案。 课堂学习 引入 贪心算法(英语:greedy algorithm),是用计算机来模拟一个「贪心」的人做出决策的过程…...
Docker 部署 PostgreSQL 数据库
Docker 部署 PostgreSQL 数据库 基于 Docker 部署 PostgreSQL 数据库一、拉取 PostgreSQL 镜像二、运行 PostgreSQL 容器三、运行命令参数详解四、查看容器运行状态 基于 Docker 部署 PostgreSQL 数据库 一、拉取 PostgreSQL 镜像 首先,确保你的 Docker 环境已正确…...
Android如何通过aspectj打造一个无侵入式动态权限申请框架
目录 一,背景 二,通过Aspectj管理所有的注解 三,配置注解 四,通过空白Activity完成真正的权限申请 五,引入依赖配置 一,背景 在Activity或者fragment中,写在几个方法写一些注释,用来表示权限申请成功,申请失败,多次拒绝。…...
Flink介绍——实时计算核心论文之Dataflow论文详解
引入 在过去的几篇文章里,我们看到了大数据的流式处理系统是如何一步一步进化的。从最早出现的S4,到能够做到“至少一次”处理的Storm,最后是能够做到“正好一次”数据处理的MillWheel。我们会发现,这些流式处理框架,…...
浅克隆(--depth 1)后如何获取完整的历史记录
如果远程remote为origin,则origin可以不写,如不是,则必须要写 获取全部分支 git fetch origin refs/heads/*:refs/remotes/origin/* 单独获取master分支 git fetch origin refs/heads/master:refs/remotes/origin/master 获取全部历史…...
安宝特案例 | 某知名日系汽车制造厂,借助AR实现智慧化转型
案例介绍 在全球制造业加速数字化的背景下,工厂的生产管理与设备维护效率愈发重要。 某知名日系汽车制造厂当前面临着设备的实时监控、故障维护,以及跨地域的管理协作等挑战,由于场地分散和突发状况的不可预知性,传统方式已无法…...
Feign 深度解析:Java 声明式 HTTP 客户端的终极指南
Feign 深度解析:Java 声明式 HTTP 客户端的终极指南 Feign 是由 Netflix 开源的 声明式 HTTP 客户端,后成为 Spring Cloud 生态的核心组件(现由 OpenFeign 维护)。它通过注解和接口定义简化了服务间 RESTful 通信,并…...
WPS Office安卓版云文档同步速度与PDF转换体验测评
WPS Office安卓版是很多人常用的移动办公软件。它支持在线编辑、文档同步、格式转换等功能,适合手机和平板用户随时处理文档。我们用它配合谷歌浏览器打开网页文档时,也可以将内容快速保存到云端或转换成PDF格式使用。 先说云文档同步。在打开WPS Office…...
ARM汇编的LDM和STM指令
批量加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据.LDM 为加载多个寄存器,STM 为存储多个寄存器.允许一条指令传送 16 个寄存器的任何子集或所有寄存器.指令格式如下: LDM{cond}<模式> Rn{!},reglist{^} STM{cond}<模式> Rn{!}…...
Python-27:游戏英雄升级潜力评估
问题描述 小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制,每天可以选择两个英雄进行历练,如果两位英雄的等级相同,则他们的等级都不会改变。如果英雄等级不同,那么等级较高的英雄会增加1级,而等级较低的英…...
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之显示勾选的购物车数据和创建订单
🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🚀1.显示勾选的购物…...
AWS Lambda 架构深入探究
AWS Lambda 是现代云架构中最受欢迎的服务之一,因其能够在完全托管的无服务器环境中运行代码而广受认可。然而,尽管 Lambda 广受欢迎,许多开发者和架构师对它的底层运作机制却知之甚少,常常将其视为“编写能够在云端神奇运行的代码…...
信奥赛CSP-J复赛集训(DP专题)(19):P3399 丝绸之路
信奥赛CSP-J复赛集训(DP专题)(19):P3399 丝绸之路 题目背景 张骞于公元前 138 年曾历尽艰险出使过西域。加强了汉朝与西域各国的友好往来。从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他…...
网络NAT类型测试
免费收录PCDN、GPU算力网站_算力收录站需要专业的PCDN、GPU算力网站收录服务吗?算力收录站为您提供高效、可信赖的收录服务,提升您的网站能见度。https://www.cdngpu.com/ 什么是 NAT:NAT代表网络地址转换,允许多个内网设备共享一…...
Postman下载安装与使用汉化版教程
简介: Postman 是一款常用的 API 测试工具,可以方便地进行接口测试、调试和文档编写。本文将详细介绍如何下载安装 Postman 并汉化,包括每个步骤的详细说明。 Postman 是一款常用的 API 测试工具,可以方便地进行接口测试、调试和…...
使用Python+OpenCV对视频抽帧保存为JPG图像
使用PythonOpenCV对视频抽帧保存为JPG图像 import os import cv2 import time#视频文件夹路径,可修改 videoPath D:\\video\\ #保存的图片文件夹路径,可修改 savePath D:\\images\\ videolist os.listdir(videoPath) if not os.path.exists(savePath…...
Java的反射机制(曼波超易懂图文版)
(✪▽✪)曼波~~~~!好的呀~让曼波用最可爱的姿势为你讲解Java反射机制吧! 🌟反射机制核心概念 曼波觉得反射就像编程世界的"魔法镜"(◕ᴗ◕✿) 可以让我们在运行时动态获取类的信息并操作类对象! // 举个栗子&#…...
【DeepSeek 学习推理】Llumnix: Dynamic Scheduling for Large Language Model Serving实验部分
6.1 实验设置 测试平台。我们使用阿里云上的16-GPU集群(包含4个GPU虚拟机,类型为ecs.gn7i-c32g1.32xlarge)。每台虚拟机配备4个NVIDIA A10(24 GB)GPU(通过PCI-e 4.0连接)、128个vCPU、752 GB内…...
运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式
无法将“D:\neo4j-community-4.4.38-windows\bin\Neo4j-Management\Get-Args.ps1”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 前提配置好环境变量之后依然报上面的错…...
AI写代码之GO+Python写个爬虫系统
下面我们我们来利用AI,来用GOPython写个爬虫系统。 帮我写一个Python语言爬取数据写入Mysql的案例,信息如下: 1、Mysql数据库地址是:192.168.1.20 ,mysql用户名是:root, Mysql密码是࿱…...
【FAQ】如何配置PCoIP零客户端AWI能访问
应用场景 在安全性要求较高的环境中,禁用 AWI 并使用 PCoIP 管理控制台配置端点,建议隐藏 OSD 以提高安全性。 通过OSD和AWI: 阻止 PCoIP 管理工具管理 PCoIP 零客户端。禁用对 Tera2 PCoIP Zero Client 的 AWI 的管理访问。下次访问 AWI 或 OSD 时强…...
RAGFlow:构建高效检索增强生成流程的技术解析
引言 在当今信息爆炸的时代,如何从海量数据中快速准确地获取所需信息并生成高质量内容已成为人工智能领域的重要挑战。检索增强生成(Retrieval-Augmented Generation, RAG)技术应运而生,它将信息检索与大型语言模型(L…...
go语言中defer使用指南
目录 1.使用场景 2.执行顺序 3.for循环中的defer及defer中的闭包陷阱 4.defer与返回值的关系 5.总结 1.使用场景 在编程的时候,经常需要打开一些资源,比如数据库连接、文件、锁等,这些资源需要在用完之后释放掉,否则会造成内…...
成熟软件项目解决方案:360°全景影像显控软件系统
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/147425300 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、Open…...
域名解析体系中 IPv4/IPv6 地址切换的关键技术剖析
前言: 对接的一家学校业务,学校老师要求域名解析既能解析到ipv4地址又能解析到ipv6地址。听学校老师叙述(还是会考察v6开通率的),所以通过这个方法来实现的,域名解析到ipv6和ipv4都可以。 准备一台机器 机…...
PHP 爬虫如何获取 1688 商品详情(代码示例)
在电商领域,获取 1688 商品的详细信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。1688 作为国内领先的 B2B 电商平台,提供了丰富的商品数据。通过 PHP 爬虫技术,我们可以高效地获取 1688 商品的详细信息,包括…...
Mysql的redolog
保证事务持久性,用于崩溃恢复,崩溃恢复时,把redo上记载的页读到内存,对其修改,变为脏页,刷盘运用于WAL技术,将随机写改为顺序写 redo log有三种状态: 存在 redo log buffer 中&…...
C++ 哈希表
1. 哈希表的概念 在vector、list的顺序结构中,查找效率为 O ( N ) O(N) O(N),在set、map的树型结构中,查找效率为 O ( l o g 2 N ) O(log_2{N}) O(log2N),有没有更优的结构 —— 哈希表 如果让数据按照某种规则映射到某个值&a…...
【pytorch学习】土堆pytorch笔记1
学习参考 仓库 https://github.com/xiaotudui/pytorch-tutorialhttps://github.com/xiaotudui/pytorch-tutorial https://github.com/AccumulateMore/CV 参考博客 https://blog.csdn.net/weixin_44216612/article/details/124203730? https://www.morinha.cc/posts/cours…...
使用Python+OpenCV将多级嵌套文件夹下的视频文件抽帧
使用PythonOpenCV将多级嵌套文件夹下的视频文件抽帧 import os import cv2 import time# 存放视频文件的多层嵌套文件夹路径 videoPath D:\\videos\\ # 保存抽帧的图片的文件夹路径 savePath D:\\images\\if not os.path.exists(savePath):os.mkdir(savePath) video_num 0f…...
ASP.Net Web Api如何更改URL
1.找到appsettings.json 修改如下: 主要为urls的修改填本机私有地址即可 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": &q…...
毕业论文设计基本内容和要求:
毕业设计基本内容和要求: 研究内容 调查了解LAMP架构和PHP开发; 学习百度旅游调用的其他产品线服务并熟悉请求接口; 学习社区业务层规范; 设计并实现旅游主要模块; 技术指标 熟悉企业中流程运转的方式,…...
XML内容解析成实体类
XML解析成实体类 解析方法实体类测试 说明:直接上干货,不废话 解析方法 public static List<PlatJuMinBaoXian> parse(String xmlString) {List<PlatJuMinBaoXian> result new ArrayList<>();try {// 创建 DocumentBuilderDocumentB…...
推公式——耍杂技的牛
由图可知,只要存在一个逆序,把他们交换一下,最大风险值就会降低,答案更优,因此最优解是按照wisi从小到大升序排列,顺次计算每头牛的危险系数,最大值即是答案。 #include <iostream> #inc…...
Vue指令详解:从入门到精通
前言 Vue.js作为当下最流行的前端框架之一,其指令系统是Vue最核心的特性之一。指令是Vue模板中带有v-前缀的特殊属性,它们为HTML元素添加了特殊的响应式行为。本文将全面介绍Vue的各种指令及其用法。 一、Vue指令概述 Vue指令是带有v-前缀的特殊属性&…...
准确--CentOS 7 配置 Chrony 同步阿里云 NTP 时间服务器及手动同步指南
本文档介绍如何在 CentOS 7 系统上配置 chrony 服务,使其与阿里云 NTP 时间服务器保持时间同步,并说明如何在需要时手动触发一次立即同步。 前提条件: 拥有一台 CentOS 7 服务器。拥有 root 权限或可以使用 sudo 命令。服务器可以访问互联网 (使用公共…...