把 RustFS 当应用文件存储:Spring Boot 用 S3 V2 SDK 直连

RustFS 1.0.0:Rust重写的轻量级S3兼容对象存储,Minio替代方案 对象存储是现代应用的基础依赖,S3协议已成为事实标准,Minio凭借生态成熟被广泛使用,但其Go实现带来的内存占用高、配置复杂等问题,在中小团队和边缘场景中往往显得过重。RustFS 1.0.0以Rust重写核心,保持S3 API兼容,无GC、内存可控、镜像精简,让对象存储回归轻量本质。从上传下载、断点续传到预签名URL,RustFS覆盖常用链路,并能通过Docker快速部署,与Spring Boot、小程序、RAGFlow等场景无缝集成。本文从对象存储选型痛点切入,拆解RustFS的架构取舍、部署实践、生 阅读详情

封面

RustFS 首页:面向 AI 数据中心的高性能 S3 兼容对象存储

一个后端服务要存用户上传的图片、附件、导出的报表,最省事的办法不是自己管磁盘目录,也不是接一家特定云厂商的私有 SDK,而是走 S3 兼容接口。RustFS 100% 兼容 Amazon S3 API,意味着你现有的 AWS S3 V2 SDK、各种封装框架几乎零改就能把它当文件存储后端。去年我帮一个 Spring Boot 项目换存储底座,原来的代码一行没动,只是把 endpoint 从 AWS 指到了内网的 RustFS,文件读写就全切过去了。这篇文章用 dromara 的 x-file-storage 配 AWS S3 V2 SDK 走一遍。

1. 问题背景:应用文件存储不该绑死某朵云

业务代码里写死 s3.amazonaws.com 的 endpoint,听起来省事,真要换存储时就得全局搜替换、重新测试。更麻烦的是测试环境——你不可能为每个开发机都开一个 AWS 账号。对象存储的价值之一正好是「接口标准化」:只要后端说 S3 兼容,应用侧就能用同一套 SDK 接本地、接内网、接公有云。

RustFS 走的就是这条路线。它兼容 Amazon S3 V2,所以 AWS SDK for Java 2.x 的 software.amazon.awssdk:s3 直接能用,上层的文件存储抽象(比如 x-file-storage)也只是改几行配置。

2. 先把 RustFS 起起来

本地验证用 Docker 一条命令即可(仅演示,生产请换掉默认凭证):

docker run -p 9000:9000 --name rustfs \
  -e RUSTFS_ACCESS_KEY=rustfsadmin \
  -e RUSTFS_SECRET_KEY=rustfsadmin \
  -v /mydata/rustfs/data:/data \
  -v /etc/localtime:/etc/localtime \
  -d rustfs/rustfs

起来后在控制台(http://<你的IP>:9000)建一个叫 simple 的桶。S3 API 默认在 9000 端口,这就是应用要连的 endpoint。一个中性提醒:示例里的 rustfsadmin/rustfsadmin 是默认凭证,只适合本地 demo,上生产务必换成强随机密钥(前面安全清单那篇讲过 openssl rand -base64 24)。

3. 接 Spring Boot:依赖与配置

在 pom.xml 里加两个依赖——x-file-storage 做文件存储抽象,AWS S3 V2 SDK 做真正的 S3 客户端:

<dependency>
    <groupId>org.dromara.x-file-storage</groupId>
    <artifactId>x-file-storage-spring</artifactId>
    <version>${x-file-storage.version}</version>
</dependency>
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>s3</artifactId>
    <version>${aws-s3-sdk.version}</version>
</dependency>

application.yml 里把平台指向 RustFS 的端点和桶:

dromara:
  x-file-storage:
    default-platform: amazon-s3-v2-1
    amazon-s3-v2:
      - platform: amazon-s3-v2-1
        enable-storage: true
        access-key: rustfsadmin
        secret-key: rustfsadmin
        region: ap-east-1
        end-point: http://192.168.3.101:9000
        bucket-name: simple
        domain: http://192.168.3.101:9000

最后在启动类上加 @EnableFileStorage 启用文件存储。之后业务代码里用 x-file-storage 的 FileStorage 接口上传、下载,底层就走 RustFS 了。

Spring Boot 接入 RustFS 的配置项

4. 几个必须注意的点

  • endpoint 必须指向 RustFS 的 9000,不是 AWS。这是最容易抄错的一行——把 end-point 填成 AWS 域名,文件就写到云上去了。
  • region 在 S3 V2 SDK 里是必填项,但 RustFS 不强制它真实存在,填 ap-east-1、us-east-1 这类都行,它主要用于 SDK 签名。选一个你团队好记的值保持一致即可。
  • 密钥走配置中心或环境变量,别硬编码进仓库;生产把 access-key / secret-key 换成非默认凭证。
  • 多存储平台可切换:x-file-storage 支持配多个 platform,default-platform 决定默认落哪个桶。需要一部分文件走 RustFS、一部分走别的存储时,这个能力很实用。

应用写文件到 RustFS 的调用链路

5. 为什么这事值得做

把 RustFS 当应用文件存储后端,收益不在「又多了一个存储」,而在接口标准化带来的自由度:开发机用 Docker 起一份 RustFS 本地联调,测试环境用同一份镜像,生产再决定跑在内网还是某朵云,业务代码全程不动。对还在用 MinIO 或犹豫要不要上云存储的团队,这是一个低摩擦的切入方式——S3 兼容意味着迁移几乎零成本。

一个真实边界:RustFS 是 S3 兼容,但不是 AWS 的全部服务。如果你用到了 S3 之外的专属特性(特定事件通知格式、特定存储类语义),接之前先在小流量验证一遍行为差异,别假设 100% 一致。

6. 总结与下一步

接 Spring Boot 到 RustFS,本质是「配对 SDK + 改 endpoint + 启用注解」三步。x-file-storage 这类抽象层让业务代码彻底不感知底层是哪家存储,后面要换要扩都灵活。

下一步可以在本地 Docker 起 RustFS、跑通上面这份配置,写一个上传接口用 Postman 验证落桶;确认无误后,把凭证和 endpoint 抽进配置中心,再推到测试环境复用同一套代码。


以下是深入学习 RustFS 的推荐资源:RustFS

官方文档: RustFS 官方文档- 提供架构、安装指南和 API 参考。

GitHub 仓库: GitHub 仓库 - 获取源代码、提交问题或贡献代码。

社区支持: GitHub Discussions- 与开发者交流经验和解决方案。

SpringBoot与RustFS深度整合实战:构建高可用文件服务的进阶指南 本文详细介绍了如何将SpringBoot与高性能对象存储服务RustFS进行深度整合,以构建高可用、高并发的企业级文件服务。内容涵盖从快速部署、基础集成到进阶实战,包括大文件分片上传、权限安全、生产环境部署、性能调优及常见避坑指南,为开发者提供了一套完整的解决方案。 阅读详情

相关推荐

RustFS上手实践:轻量S3兼容对象存储,Apache 2.0可商用的MinIO替代

对象存储已成为云原生应用的数据底座,S3协议更是事实上的标准接口。在众多实现中,RustFS凭借Rust语言的内存安全与高性能优势,提供了一款轻量、可商用的S3兼容服务。其采用Apache 2.0许可证,允许自由修改与商业化使用,有效规避了AGPL传染性风险。面对MinIO在低配环境下的资源占用和部署复杂度,RustFS以单二进制文件、Docker一键启动的方式,实现了五分钟快速部署,且兼容标准S3客户端和SDK。无论是本地开发环境、小团队生产存储,还是边缘计算节点,RustFS都能以极低门槛提供稳定的对象

weixin_31714129的博客 327

RustFS 接入 Spring Boot:Docker 部署 + S3 SDK 双路径实操

RustFS 是一个基于 Rust 构建的高性能分布式对象存储系统,采用 Apache 2.0 许可,提供广泛的 S3 API 兼容性,并支持与 MinIO、Ceph 等平台共存与迁移。对 Java 开发者来说,RustFS 最大的吸引力在于:**你不需要引入任何专属 SDK,现成的 S3 客户端就能直接对接**。Spring Boot 项目里最常见的做法无非两条——用官方 AWS SDK 手写上

gitblog_00613的博客 14

SpringBoot + RustFS实战:如何用8MB分片将文件上传速度提升8倍?

本文详细介绍了如何通过SpringBoot集成高性能RustFS存储,并采用8MB分片上传策略,将大文件上传速度提升8倍的实战方案。文章深入剖析了架构选型、核心参数调优、代码级实现及性能监控,为面临海量文件上传性能瓶颈的后端开发者提供了经过生产环境验证的优化路径。

keras9composer的博客 168

SpringBoot+RustFS实战:5分钟搞定高性能文件存储服务(附完整代码)

本文详细介绍了如何利用SpringBoot和RustFS快速搭建高性能文件存储服务,5分钟即可完成部署。RustFS作为分布式文件服务解决方案,相比传统FastDFS具有更优的性能和易用性,支持S3协议兼容、高并发处理和大文件传输。文章包含完整代码示例,帮助开发者快速实现文件上传下载功能。

nept的博客 694

MinIO私有化部署实战:从Windows开发到Linux高可用集群

对象存储是现代应用架构的核心基础设施,其本质是通过S3兼容API提供可扩展、高可靠的数据持久化能力。MinIO作为轻量级、100% S3兼容的开源实现,凭借单二进制部署、原生纠删码和低运维门槛,成为私有云与边缘场景的首选方案。它不仅支持Windows本地快速验证,更可无缝演进为Linux下多节点分布式集群,满足医疗、金融等强合规场景对数据主权、加密控制与审计溯源的技术要求。本文聚焦真实生产落地路径,覆盖Windows服务化配置、四节点纠删码集群搭建、Nginx反向代理优化及Java后端永久链接实践,解决手搓

weixin_33676492的博客 456

招标文件智能解析系统开发文档

本系统是一个基于OCR与大语言模型的招标文件智能解析平台,专门用于处理和分析招标文件,自动提取关键信息并进行结构化展示。

警世龙的技术博客 1924

Spring Boot + RustFS + KKFileView:三步搭建企业级文件预览系统

本文详细介绍了基于SpringBoot、RustFS和KKFileView构建企业级文件预览系统的完整方案。文章从架构设计入手,分析三大组件的技术选型理由(RustFS高性能存储、KKFileView多格式预览支持、SpringBoot业务集成),提供了从环境部署到代码实现的逐步指南,包括文件上传服务、预览服务集成、前后端交互实现等核心功能。同时分享了高级安全控制、性能优化策略和监控运维方案,并通过两个实际案例验证了该方案的高性能(平均响应<2秒)、高安全性(动态水印)和成本优势(节省70%+成本)。

分布式存储与RustFS的博客 2032

具身智能落地实战:制造业、物流与电力的工业级方案设计

具身智能是一种融合感知、推理与物理执行的智能范式,其核心在于构建具备因果建模能力、多模态闭环反馈和实时动作规划的行动主体。区别于通用AI或传统自动化,它依托多模态大模型、高精度力觉/触觉传感及Sim2Real仿真技术,实现对真实物理环境的深度理解与自适应交互。技术价值体现在可解释性决策、毫秒级跨模态协同与零停机容错能力,已规模化应用于制造业质检、物流破损鉴定、电力绝缘子巡检等强约束工业场景。本文聚焦‘行业应用方案解决方案’这一高频搜索需求,系统拆解从工位筛选、分层架构设计到72小时现场交付的全链路工程方法论

weixin_30952479的博客 300

MinIO换证AGPL引发迁移潮:RustFS替代方案与S3兼容实践

对象存储是现代分布式系统的核心基础设施,而S3 API已成为事实上的数据访问标准。开源许可证决定了存储项目的合规边界,从Apache 2.0到AGPL的切换,意味着代码修改和网络服务分发都将触发严格的开源义务。RustFS以Rust语言实现,具备内存安全和日志合并树等底层优势,并宣称永久开源,成为MinIO的热门替代选项。在工程实践中,无论是Spring Boot接入S3存储、处理大文件分片上传,还是配置bucket公开权限,都依赖对S3协议细节的准确把握。理解许可证原理、评估开源承诺的可信度,并掌握迁移与

weixin_33428613的博客 229

手把手教你设计STM32的JTAG电路:从原理图到PCB布局(含JLINK连接详解)

本文详细介绍了STM32的JTAG电路设计全流程,从核心原理、接口规范到PCB布局布线技巧,特别包含JLINK调试器的连接与配置方法。通过信号滤波、上拉配置和防反接保护等关键设计要点,帮助开发者构建稳定可靠的JTAG调试环境,提升嵌入式开发效率。

weixin_29159441的博客 388

使用VScode编译AMI代码

我现在了解到的和拿到的code,都是基于AMI的code,一般的编译AMI都需要搭配使用AMI的编译环境Veb,而Veb用到现在,一直都觉得有点卡顿,浏览代码的体验也比VScode差很多。在这之前还要,考虑设置TOOLS_DIR和EWKE_DIR的环境变量,因为在Veb中是可以通过设置自动设置的,但是VScode里面没用设置环境变量的选项。这里可以看出,Veb工具栏中的Build和Rebuild All的命令对应这里的make和make rebuild,也就是说Veb是调用此命令进行编译的。

Dodijd的博客 1878

换掉MinIO!全新一代分布式文件系统来了,功能很强大!

在开发项目的时候,我们经常会遇到需要文件存储的场景,比较流行的解决方案有OSS、MinIO、FastDFS这些。最近有小伙伴反馈MinIO的控制台屏蔽了很多之前已有的功能,就剩下查看的功能。今天给大家分享一款最近刚开源的分布式文件系统RustFS,自带管理控制台,功能很强大!

macrozheng的专栏 1877

别再为授权费头疼了!手把手教你免授权搞定西门子、马扎克等12种主流数控机床的数据采集

本文提供了一套免授权采集西门子、马扎克等12种主流数控机床数据的实战指南,帮助中小型机加工车间节省80%以上的采集成本。通过TCP/UDP协议逆向工程和跨平台数据整合,实现经济、灵活且可持续的数据采集方案,涵盖设备兼容性处理、数据频率优化等关键问题。

weixin_26873711的博客 707

RustFS 1.0 GA发布:S3兼容分布式对象存储性能对比与MinIO迁移实战

对象存储是海量数据存储的基础设施,而S3协议已成为事实上的标准接口。分布式存储系统通过一致性协议保证数据可靠,Raft算法以清晰的状态复制机制实现强一致,同时也在性能与容错间寻求平衡。Rust语言以其内存安全和零拷贝特性,为存储引擎带来了更低延迟和更高吞吐的可能,特别适合小文件密集与资源敏感的私有化部署场景。本文从对象存储的核心挑战出发,剖析RustFS 1.0.0 GA的架构选型与技术价值,将其与MinIO在S3 API兼容度、性能实测、生态成熟度上进行对比,并给出基于rclone和mc的存储迁移实操方案

weixin_34293141的博客 398

AgentScope Java 2.0 最佳实践:9 个完整示例手把手带你开发 Java‑Agent

本文基于9 个完整示例,深入剖析从基础对话(BasicChatExample)、工具调用(@Tool 注解)、结构化输出(POJO Schema)、ToolGroup 自主管理、MCP 外部工具集成、Hook 生命周期监控、Spring Boot SSE 流式 Web、JsonSession 会话持久化到中断恢复的全链路实战教程。

program哲学 1619

YOLO11涨点优化:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1866

RustFS 1.0.0 vs MinIO:小文件场景下的对象存储架构对比与迁移指南

对象存储作为海量数据的基础设施,在图片、日志、IoT等场景中扮演关键角色。然而,传统基于文件系统语义的实现,在处理千万级小对象时,常因元数据瓶颈导致性能骤降。本文从分布式存储的底层原理出发,对比了RustFS 1.0.0与MinIO在数据布局、元数据管理、冗余策略上的差异。RustFS采用全内存索引与裸盘顺序写入,在小文件场景下表现出色;而MinIO凭借成熟生态与纠删码,更适合大容量高吞吐场景。文章还基于实测数据,分析了S3兼容性、ListObjects性能、运维复杂度等关键维度,并提供了从MinIO平滑迁

weixin_34007020的博客 442

unity从3D升级到urp管线,打包ab包后,材质全部变紫色

确保材质中的被转换为 URP 兼容的着色器。在打包 AssetBundle 时,确保所需的着色器被正确打包。确保运行 AB 包的目标项目中正确配置了 URP 渲染管线。如果加载后材质丢失,检查 AB 包的加载逻辑,确保材质正确应用了着色器。通过这些步骤,你应该能够解决从标准渲染管线切换到 URP 渲染管线后,材质在 AB 包中变紫色的问题。如果问题仍然存在,请根据具体错误日志进一步排查。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1962

如何搭建 drawio-desktop:draw.io 桌面版离线免费画流程图与架构图的完整教程

在浏览器标签页里画图,尴尬多半来自网络:标签页一关,编辑状态悬空;网一断,页面直接白屏。drawio-desktop 就是官方给出的解法——draw.io 桌面版,把整套编辑器装进本机,离线流程图、本地架构图全靠它渲染,不联网也能画,个人和商用场景都是免费绘图工具。这篇教程带你走完"拿到源码 → 依赖就位 → 窗口弹出"的全过程,并顺带讲清数据落在哪、网络边界画在哪。 ## draw.io 桌面

gitblog_00366的博客 393

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

云原生项目二

本项目基于MySQL8.0与开源大模型API,构建电商订单库智能查询与性能调优系统,实现自然语言转SQL、自动执行、执行计划分析及索引优化,无需专业SQL能力。在openEuler环境下完成网络配置、YUM源设置、时间同步、防火墙关闭及Python3.11编译安装,部署MySQL8.0.45并接入阿里云大模型API,最终通过Streamlit实现可视化交互,完成从环境搭建到AI智能运维的全流程落地。

zfm242397396的博客 181

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从单体到云原生,自动化测试平台在微服务架构演进中踩过的坑

在当今软件开发中,自动化测试平台的构建已经不再局限于简单的功能实现,而是需要考虑到系统可扩展性、可维护性和稳定性。然而,在将一个自动化测试平台从单体架构演进为微服务,并最终迈向云原生的过程中,我们遇到了一系列问题与挑战。本文将结合自动化测试平台的实际场景,讲述在架构演进过程中遇到的典型问题与解决方案,希望能为准备跳槽或面试的技术人员提供一些真实经验参考。

后台模板 181

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析

本文系统复盘企业网站上云部署与云运维实践:基于华为云构建LAMP架构,实现业务与数据分离;通过ELB+AS实现高可用与弹性伸缩;结合IAM、SMN、CTS、CES、LTS等运维服务,建立可观测、可审计、可告警的全链路管控体系,全面支撑云原生环境下的稳定运行与快速排障。

2604_96593683的博客 465

云原生运维学习笔记:容器技术的演进、底层原理与 Docker 全生命周期管理

本文系统梳理容器技术演进脉络,从 chroot、Namespace 与 Cgroups 等 Linux 内核机制出发,揭示容器与虚拟机的本质差异。深入解析 Docker 的 C/S 架构、镜像分层原理及 OCI 标准,并通过实战完成 CentOS 环境下 Docker Engine 的定制部署,涵盖 YUM 源配置、镜像加速与远程访问设置,全面掌握容器全生命周期管理核心能力。

2604_96593683的博客 432

云原生运维实战笔记:华为云存储类服务全景解析——EVS、OBS、SFS与CBR深度实践

本文深度解析华为云EVS、OBS、SFS与CBR四大存储服务,涵盖块存储挂载、文件系统初始化、快照回滚及对象存储实操。通过Windows/Linux系统实战,掌握磁盘分区、格式化、自动挂载及数据保护机制;结合快照实现秒级数据恢复,验证EVS三副本高可靠架构;剖析OBS多层级存储策略与生命周期管理,全面呈现云原生环境下数据持久化与高效管理的完整解决方案。

2604_96593683的博客 445

云原生运维实战笔记:华为云计算与网络类服务全景解析

本文系统梳理了公有云中计算类与网络类服务的实操全流程。计算部分覆盖 ECS 的创建、登录与规格变更,IMS 私有镜像制作与批量部署验证,以及 AS 弹性伸缩的配置与策略验证;网络部分覆盖 VPC 内互通与跨 VPC 隔离、安全组有状态包过滤、EIP 的 1:1 NAT 机制、ELB 负载均衡,以及跨 VPC 对等连接与 VPN 互通等场景。文中不仅记录了每一步的配置命令与执行结果,还结合虚拟化、NAT、包过滤等底层原理进行拓展剖析。

2604_96593683的博客 274

云原生基础之Containerd容器运行时

本文介绍了云原生基础中的Containerd核心组件及其管理命令,涵盖镜像、容器、任务与命名空间的管理操作。通过ctr命令可实现镜像拉取、挂载、推送,容器创建与删除,任务启动、暂停及进程查看等。同时说明了Docker与Containerd的关系,指出Docker使用Containerd的moby命名空间,揭示了二者在容器技术栈中的协作机制。

我的梦想有多远,我就能走多远! 286
上一篇: 当 GPU 等着数据:AI 时代的对象存储该长什么样
下一篇: 跨实现迁移 MinIO→RustFS:mc diff 静默返回才是最容易翻车的一步
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值