Spring Cloud分布式架构解析

Spring Cloud分布式数据存储与缓存架构深度解析 在微服务架构中,‌数据存储层‌的性能与可靠性直接影响整个系统的SLA。本文基于Spring Cloud 2023与Spring Boot 3.x技术栈,深入探讨‌多级缓存策略‌、‌分库分表方案‌、‌分布式事务协调‌等核心机制,结合云原生时代‌Serverless数据库‌与‌向量化缓存‌等创新技术,通过性能压测数据给出生产级优化方案。场景‌ ‌推荐方案‌ ‌核心优势‌高频交易订单ShardingSphere + 多级缓存高并发写入,快速查询用户画像分析Redis JSON + 向量索引。 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

一、服务治理

在分布式系统中,服务治理是实现系统高可用、可伸缩和可维护的关键。Spring Cloud 为服务治理提供了丰富的功能,下面将详细介绍相关知识点,并深入探讨其技术实现细节。

  1. 服务发现与注册

服务发现与注册是分布式系统中实现服务间通信的基础。

  • Eureka服务端/客户端:Eureka 是 Netflix 开源的服务发现和注册中心,Spring Cloud 对其进行了深度集成。在 Eureka 中,服务端负责维护一个服务实例列表,包括实例的地址、端口、健康状况等信息。客户端在启动时向服务端注册自身信息,并在运行时定期发送心跳维持注册状态。服务端通过客户端上报的健康状态信息,对服务实例进行健康检查,确保注册中心中的信息准确可靠。

  • Consul集成:Consul 是 HashiCorp 开源的服务发现和配置工具,Spring Cloud 支持与 Consul 集成,实现服务注册与发现。Consul 采用一致性哈希算法对服务实例进行分区,保证服务实例的高可用性和负载均衡。Consul 支持服务健康检查、服务间路由、服务监控等功能,并提供 RESTful API 和命令行工具进行操作。

  • Nacos多模式支持:Nacos 是阿里巴巴开源的服务发现和配置中心,Spring Cloud 支持与 Nacos 集成,并提供多种服务发现模式,如单机模式、集群模式等。Nacos 支持服务注册、服务发现、配置管理、命名空间等功能,并通过 Raft 协议保证数据的一致性。

  1. 健康检查机制

健康检查是服务治理中的重要环节,用于判断服务实例是否正常。

  • 配置中心:Spring Cloud Config 是一个配置管理服务,可以将配置集中存储在中心位置,便于管理和修改。配置中心支持配置版本管理、权限控制、发布审核等功能,确保配置信息的安全性和一致性。

  • 配置动态刷新:Spring Cloud Config 支持配置动态刷新,当配置发生变更时,客户端可以实时获取最新的配置。动态刷新机制基于 Spring Cloud Bus,通过发布/订阅模式实现配置信息的实时传递。

  • 多环境隔离:Spring Cloud Config 支持多环境配置,如开发环境、测试环境、生产环境等,确保不同环境的配置互不影响。通过命名空间功能,可以为不同环境配置不同的配置信息。

  • 加密存储方案:为了保护配置信息的安全,Spring Cloud Config 支持对配置信息进行加密存储。加密方案采用对称加密算法,如 AES,保证配置信息在存储和传输过程中的安全性。

二、服务通信

服务通信是分布式系统中实现服务间交互的关键。

  1. 客户端负载均衡
  • Ribbon策略配置:Ribbon 是 Netflix 开源的一个客户端负载均衡器,Spring Cloud 对其进行了集成。Ribbon 支持多种负载均衡策略,如轮询、随机、最少请求等。开发者可以根据业务需求,通过自定义负载均衡策略实现更灵活的负载均衡机制。

  • 自定义规则实现:Ribbon 支持自定义负载均衡规则,根据业务需求实现更灵活的负载均衡策略。例如,可以基于服务实例的权重、响应时间等因素进行负载均衡。

  • 重试机制:Ribbon 支持重试机制,当服务调用失败时,可以自动重试,提高系统可用性。重试机制包括重试次数、重试间隔、重试条件等配置项,开发者可以根据实际情况进行调整。

  1. 声明式调用
  • Feign契约配置:Feign 是一个声明式 HTTP 客户端,Spring Cloud 对其进行了集成。通过配置 Feign,可以实现服务间的声明式调用。Feign 支持多种 HTTP 方法、请求参数、响应处理等功能,简化了服务间通信的开发过程。

  • 日志级别控制:Feign 支持配置日志级别,方便开发者调试和排查问题。日志级别包括 DEBUG、INFO、WARN、ERROR 等,开发者可以根据需要调整日志级别。

  • 文件传输处理:Feign 支持文件传输,可以通过配置实现文件的上传和下载。文件传输支持多种传输协议,如 HTTP、FTP 等。

三、容错保护

容错保护是确保系统在出现故障时能够快速恢复的关键。

  1. 断路器模式
  • Hystrix熔断策略:Hystrix 是 Netflix 开源的一个服务熔断和断路器库,Spring Cloud 对其进行了集成。Hystrix 支持多种熔断策略,如快速失败、慢调用、拒绝请求等。开发者可以根据业务需求,配置合适的熔断策略。

  • 降级回退逻辑:当服务调用失败时,Hystrix 可以根据配置的降级策略进行回退,确保系统稳定性。降级回退逻辑包括回退服务、回退数据、回退策略等配置项。

  • 实时监控数据流:Hystrix 提供了实时监控数据流功能,便于开发者了解系统运行状况。监控数据包括请求量、响应时间、错误率等指标。

  1. 限流防护
  • Sentinel规则配置:Sentinel 是阿里巴巴开源的一个流量控制组件,Spring Cloud 支持与 Sentinel 集成。Sentinel 支持多种限流策略,如 QPS 限流、匀速排队、热点参数限流等。开发者可以根据业务需求,配置合适的限流策略。

  • 系统自适应保护:Sentinel 支持系统自适应保护,根据系统负载自动调整限流策略,提高系统稳定性。系统自适应保护包括负载自适应、阈值自适应等配置项。

四、网关路由

网关路由是分布式系统中实现请求路由和权限控制的关键。

  1. 智能路由
  • Zuul过滤器链:Zuul 是 Netflix 开源的一个 API 网关,Spring Cloud 对其进行了集成。Zuul 支持丰富的过滤器功能,如路由、请求改写、权限控制等。开发者可以通过配置 Zuul 过滤器链,实现智能路由、请求改写、跨域处理等功能。

  • 动态路由表:Zuul 支持动态路由表,根据业务需求动态调整路由策略。动态路由表可以通过外部配置文件或 API 进行更新。

  • 灰度发布支持:Zuul 支持灰度发布,可以逐步将流量切换到新版本,降低系统风险。灰度发布可以通过配置不同的路由策略实现。

  1. API聚合
  • 请求改写规则:Zuul 支持请求改写规则,可以修改请求参数、请求头等信息。请求改写规则可以简化 API 调用的复杂度,提高系统可维护性。

  • 跨域处理方案:Zuul 支持跨域处理,可以配置跨域请求的相关参数。跨域处理可以简化前后端分离开发的难度。

五、消息驱动

消息驱动是分布式系统中实现异步通信的关键。

  1. 消息中间件
  • RabbitMQ绑定器:RabbitMQ 是一个开源的消息代理软件,Spring Cloud 支持与 RabbitMQ 集成,实现消息传递。RabbitMQ 支持多种消息传递模式,如发布/订阅、点对点等。开发者可以根据业务需求,选择合适的消息传递模式。

  • Kafka分区策略:Kafka 是一个分布式流处理平台,Spring Cloud 支持与 Kafka 集成,实现消息传递和分区策略。Kafka 支持高吞吐量、可扩展性强、数据持久化等特点,适用于处理大规模实时数据。

  1. 事务消息支持
  • 事件溯源:事件溯源是一种将业务逻辑转化为事件流的技术,Spring Cloud 支持与事件溯源集成,实现事件驱动架构。事件溯源可以将业务逻辑拆分为一系列事件,便于系统扩展和重构。

  • 消息轨迹追踪:消息轨迹追踪可以帮助开发者了解消息的传递过程,便于排查问题。消息轨迹追踪可以通过记录消息的发送、接收、处理等环节,实现消息的追踪和分析。

  • 死信队列处理:死信队列是用于处理消息传递失败的场景,Spring Cloud 支持与死信队列集成,实现消息传递的可靠性。死信队列可以保证消息的可靠传递,防止消息丢失。

六、分布式增强

分布式增强是提升分布式系统性能和稳定性的关键。

  1. 分布式锁实现
  • 分布式锁:分布式锁是一种在分布式系统中实现同步操作的机制,Spring Cloud 支持与分布式锁集成,实现分布式锁功能。分布式锁可以保证多个服务实例对共享资源的互斥访问,避免数据竞争和冲突。
  1. 链路追踪集成
  • 链路追踪:链路追踪是一种跟踪请求在分布式系统中的传递过程的技术,Spring Cloud 支持与链路追踪集成,实现系统性能监控。链路追踪可以记录请求的路径、耗时、错误等信息,便于开发者了解系统性能和排查问题。
  1. 分布式事务协调
  • 分布式事务协调:分布式事务协调是一种在分布式系统中实现事务一致性的机制,Spring Cloud 支持与分布式事务协调器集成,实现分布式事务。分布式事务协调可以保证多个服务实例对共享数据的原子性操作,避免数据不一致和冲突。

总结:

Spring Cloud 为分布式系统提供了丰富的功能,涵盖了服务治理、服务通信、容错保护、网关路由、消息驱动和分布式增强等方面。通过深入理解其技术实现细节,开发者可以构建一个高可用、可伸缩、可维护的分布式系统。在实际开发过程中,需要根据业务需求选择合适的技术和组件,以达到最佳的系统性能。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

Spring Cloud微服务架构深度解析:把分布式核心讲透,你真的了解吗? 本文深度解析Spring Cloud微服务架构的核心原理。首先对比单体架构与微服务架构的差异,指出微服务具有独立部署、扩展和技术栈的优势。随后展示了Spring Cloud组件全景图,包括服务治理(注册中心/配置中心)、网关层、服务调用和容错保护四大核心模块。重点剖析了Nacos服务注册原理,通过代码示例演示了如何通过@EnableDiscoveryClient注解和配置文件实现服务注册。全文从源码层面深入讲解Spring Cloud的实现机制,帮助开发者真正理解微服务架构背后的技术原理。 阅读详情

相关推荐

从零构建高可用Spring Cloud微服务架构:核心组件深度解析

Component@Override// 从请求中获取用户角色// 检查用户是否具有所需角色@Override@Dataspring:cloud:gateway:routes:@Component@Override// 记录请求信息log.info("请求方法: {}, 请求路径: {}, 请求头: {}",// 记录请求体.doOnNext(body -> log.info("请求体: {}", body))// 记录响应信息。

2401_88760782的博客 1326

领域驱动设计(DDD)与 Spring Boot 的融合实践

领域驱动设计(DDD)是一种软件开发方法论,强调围绕领域模型来设计软件,以应对复杂业务逻辑。通过以上步骤,就完成了领域驱动设计与 Spring Boot 的融合实践,构建出一个遵循 DDD 分层架构的 Spring Boot 应用。基础设施层负责实现领域仓库接口,与数据库等外部资源交互。应用层负责协调领域层的服务,处理业务用例。例如,以一个简单的订单系统为例,定义 Order 实体和 OrderItem 值对象。处理领域内的复杂业务逻辑。领域层是 DDD 的核心,包含领域模型、领域服务和领域仓库接口。

2036

Spring Cloud微服务架构深度解析

Bean// 权重响应时间策略。

KBkongbaiKB的博客 1131

分布式配置中心终极对决 Spring Cloud Config与Apollo架构深度解析

本文深入对比Spring Cloud Config与Apollo两大主流配置中心的技术特性与实战应用。通过电商系统案例,详细分析了两者在架构设计、实时推送机制和性能表现上的差异:Spring Cloud Config深度集成Git和Spring生态,而Apollo在实时性、管控能力方面更优。文章提供了完整的性能测试数据(Apollo配置变更感知速度快7倍)、企业级部署方案及选型指南,并特别强调应根据团队技术栈和业务需求选择方案,Spring生态团队适合Spring Cloud Config,需要企业级管控则

七夜zippoe的博客 3094

离心泵级间导叶的设计计算

离心泵级间导叶的设计计算高速离心泵级间流道的作用是将第一级复合叶轮流出的高速液流收集起来并送入第二级复合叶轮。级间流道的设计应考虑降低液体的流速,实现动能向压力能转化,减小液体的水力损失。级间流道主要有蜗壳形流道和导叶两种结构形...

cqzc55322的博客 2565

告别转换超时!手把手教你用Allegro2Altium.bat搞定AD21导入Allegro 17.2文件

本文详细介绍了如何使用Allegro2Altium.bat工具解决AD21导入Allegro 17.2文件时的转换超时问题。通过理解转换机制、准备离线环境、执行完整转换流程及高级技巧,帮助工程师高效完成PCB设计文件转换,提升工作效率。

weixin_30378623的博客 419

深入解析Spring Cloud:构建分布式微服务架构的最佳实践

它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌等)中快速构建一些常见模式的工具。Spring Cloud Netflix Netflix OSS组件是Spring Cloud的重要组成部分,包括Eureka、Hystrix、Zuul、Ribbon等。Spring Cloud Sleuth Spring Cloud Sleuth提供了服务跟踪的解决方案,用于跟踪微服务间的请求链路,支持与Zipkin、Jaeger等分布式追踪系统集成。

m0_72864708的博客 1250

Nacos启动报错No DataSource set?5分钟搞定standalone模式配置

本文针对Nacos启动时常见的“No DataSource set”报错,深入解析了其根源在于默认集群模式与外部数据库依赖。提供了两种快速解决方案:通过命令行参数“-m standalone”启动,或直接修改启动脚本配置文件,从而在5分钟内以单机模式成功启动Nacos,无需配置MySQL数据库。

weixin_29234509的博客 464

spring cloud eureka 服务之间调用_资深架构师解析springcloud分布式微服务的实现

分布式系统微服务就是原来臃肿的项目拆分为多个模块互不关联。如:按照子服务拆分、数据库、接口,依次往下就更加细粒度,当然运维也就越来越难受了。分布式则是偏向与机器将诺大的系统划分为多个模块部署在不同服务器上。微服务和分布式就是作用的“目标不一样”。微服务与Cloud微服务是一种概念,spring-cloud是微服务的实现。微服务也不一定必须使用cloud来实现,只是微服务中有许多问题,如:负载均衡、...

weixin_40001275的博客 201

数据湖是什么?有什么优势?与数仓区别?未来的发展?

数据湖是什么?有什么优势?与数仓区别?未来的发展?一、什么是数据湖二、数据湖的发展三、数据湖有哪些优势四、数据湖应该具备哪些能力五、数据湖的实现遇到了哪些问题六、数据湖与数据仓库的区别七、为什么要做数据湖?区别在于?八、数据湖挑战九、湖仓一体十、目前有哪些开源数据湖组件 来源:大数据DT 一、什么是数据湖 数据湖是一种不断演进中、可扩展的大数据存储、处理、分析的基础设施;以数据为导向,实现任意来源、任意速度、任意规模、任意类型数据的全量获取、全量存储、多模式处理与全生命周期管理;并通过与各类外部异构数据

一个写湿的程序猿 9148

把业务变化变成实时流动:SAP Event Mesh 的概念、能力与落地方法

SAP Event Mesh 是 SAP BTP 上的云消息与事件服务,通过异步事件通信实现系统解耦。核心功能包括:1)提供Topic(广播)和Queue(持久化)两种消息模式;2)支持AMQP、MQTT、REST等多种协议接入;3)作为SAP生态的事件枢纽,可与SAP Integration Suite、CAP框架等无缝集成。典型应用场景:S/4HANA业务事件驱动流程、微服务扩展、IoT设备数据上云等。相比同步调用,它能显著提升系统弹性,避免雪崩故障,特别适合需要实时性与松耦合的企业级集成。高级版本(A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 247

Spring Cloud微服务架构解析

开发者可以通过实现。

AIHacksCash的博客 912

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

基于深度学习的CT图像肺结节分割与检测系统[完整代码数据分享]

267

Spring Cloud 架构解析

不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。:当断路器打开时,Hystrix可以实现降级回退逻辑,将服务调用失败时的操作转换为备用操作,保证系统的可用性。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 844

MATLAB基础应用精讲-【强化学习】Actor - Critic 算法(附python代码实现)

这种架构结合了策略梯度方法(Policy - Gradient Methods)和价值函数估计方法(Value Function Estimation Methods)的优点。在强化学习中,智能体(Agent)需要通过与环境(Environment)的交互来学习最优的行为策略,以获得最大的累积奖励(Cumulative Reward)。

qq_36130719的博客 360

深度学习工具包 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'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('DeepLearnToolbox'));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('state',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'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',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 = 'sigm';%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, 'Too big error');```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('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';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)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';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, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% 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'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 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, 'Too big error');```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('state',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, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',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, 'Too big error');%% ex3 neural net with dropoutrand('state',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, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % 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, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % 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, 'Too big error');%% 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('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % 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, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring Cloud微服务的服务注册搭建与CAP分布式思想

目录 微服务概述 CAP理论 微服务框架 SpringCloud eureka Eureka的角色 服务注册者和服务注册中心的逻辑关系 eureka报警 自我保护机制 实战 EUREKA高可用 Ribbon组件+restTemplate=feign RestTemplate方法的解析 负载均衡策略 Hystrix 搭建一个ribbon+hystrix的工程 Fei...

m0_37657725的博客 2514

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java面试实战:电商场景下的Spring Cloud微服务架构与缓存技术剖析

JVM是Java程序运行的基础环境,负责解释或编译执行Java字节码。主要组成部分包括类加载器、方法区、堆、栈、本地方法栈和执行引擎。

sinat_26229211的博客 878

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

单机服务到分布式架构的演变,有了它,面试再也不慌了!

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来。

2401_84046677的博客 902
上一篇: 微服务架构核心技术解析
下一篇: 并发编程与MyBatis精讲
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值