微服务架构设计实践系列之五:架构准备阶段

Kstry流程编排框架 Kstry是什么? 1、所见( 图示模型 )即所得( 代码执行 )的可视化流程编排框架 2、可轻易将流程从串行升级到并行,支持任务拆分、任务重试、任务降级、子任务遍历、指定超时时间的并发框架 3、共享能力平台侧的微服务业务整合框架 4、类似阿里TMF2.0,可以做到平台与业务分离,业务与业务隔离的服务化框架 阅读详情

微服务架构设计实践
 


目    次

4.2  架构准备阶段

        在架构准备阶段,主要是分析用户的需求,推荐采用“ADMEMS矩阵”矩阵方法进行需求结构化,即“需求层次-需求方面矩阵”。

        通过业务级需求、用户级需求、开发级需求三个层次,功能、质量、约束三个方面对用户需求进行二维需求观分析,抽取出决定架构的关键需求。

        ADMEMS矩阵如下图所示:

        

 

        以下是分行特色业务云平台的关键需求,主要包括关键约束、关键质量和关键功能。

        另外,根据这些关键需求,抽象出业务架构视图,从业务概念的角度,描述了整个系统要实现的功能。作为一种架构视图,本人把这部分内容放到《细化架构阶段-业务架构》部分,以便提供一个完整的架构视图。

4.2.1  关键约束

        1.采用Java语言;

        2.采用行方自主研发的Tesla平台作为基础开发平台;

        3.采用分布式服务设计风格;

        4.前期(一期、二期)应用运行在集群环境,后期迁移到基于Docker的云服务平台;

        5.前期(一期、二期)数据运行在关系数据库环境,暂时不用考虑分库分表,后期随着业务量的增加,必须考虑分库分表;

        6.项目周期:

        一期:2017年3月1日至2017年7月31日,主要完成基于Tesla平台的分行特色业务云平台的搭建工作,含部分通用公共组件;

        二期:2017年8月1日至2017年12月31日,主要完成分行特色业务云平台通用技术组件、业务组件、业务服务的开发、与不少于6个分行进行业务对接等;

        三期:2018年1月1日至2018年5月31日,分行特色业务云平台分库分表、云服务平台迁移、业务对接等;

4.2.2  关键质量

4.2.2.1  性能

        系统必须满足预期的性能目标,在并发用户数(Concurrent Users)、并发事务数(Transactions per Second,TPS)、响应时间、吞吐量(Throughout)等指标方面达到预估值,支撑使用人群的正常使用操作。

        分行特色业务云平台预期的性能指标如下:(非集群环境)

        1.并发用户数:200。

        2.并发事务数:300。

        3.平均响应时间:100ms。

4.2.2.2  可用性

        可用性是指系统在指定时间内提供服务有效访问的特性。

        分行特色业务云平台至少保证可用性是3个9,即软件具有较高可用性,也就是说软件年度不可用时间小于9小时。

        分行特色业务云平台要在以下几个方面支持系统的高可用性: 

        1.高可用的应用 

       支持集群化部署:使用F5进行负载均衡,使用基于suce linux的X86虚拟机进行集群部署;

        支持云化部署:允许分行特色业务云平台迁移到行方的私有云,该私有云基于Docker实现。

        2.高可用的服务

        服务降级熔断:当外部系统不可用或连续出现结果异常时,应可达到服务降级的效果,全熔断或部分熔断异常服务容量,保证正常服务的可用性,防止出现雪崩效应。

        服务流量控制:对某一特定服务提供并发量控制,通过修改参数配置可调整服务并发数量。

        服务对象权重控制:提供对不同服务对象(模块)的流量权重控制,通过修改参数配置可调整对不同服务对象提供服务的权重比例。

        服务开关:单个服务动态开关,系统整体状态动态开关。

        集群服务流量控制: 针对于一个特定服务提供集群并发量控制,通过修改参数配置可调整服务并发数量。该功能推出后,可替换单实例流控的方式。

        客户化并发控制:针对某一特定服务,解析接入报文数据后,对指定数据项匹配后做并发控制,如:针对某一商户进行单独并发控制。

        3.高可用的数据

        支持总行数据库DB2的高可用。

        对于分行数据库的高可用性,由分行自己实现。

        4.高可用的软件质量保证

        代码:对代码版本进行控制。

        测试:支持自动化测试。

        服务灰度发布:对外服务变更时,做到对分行特色应用的透明,在验证周期内,保证对非验证分行应用不受影响,使得服务变更对分行特色应用造成的影响最低。

        5.运行监控

        进程/服务监控:对本地服务、进程繁忙情况提供监控界面,供系统负责人进行监控。

        实时交易:对实时交易基本要素进行监控:交易金额、成功情况、耗时、渠道、客户信息等提供实时监控。

        对流程编排过程的监控。

        监控预警:设置告警级别,告警方式,告警规则,告警活动。

            告警级别:自定义,页面显示,默认告警方式不同;

            告警方式:邮件,短信,页面展示;

            告警规则:该条告警执行的操作(如取连续3笔后台响应超时的交易),针对一个告警规则,指定告警级别及告警方式;

4.2.2.3  伸缩性

        伸缩性指不需要改变软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或缩小软件的服务处理能力。

        分行特色业务云平台需要支持多台服务器构成集群,并且加入新的服务器后可以提供和原来的服务器无差别的服务。

4.2.2.4  扩展性

        扩展性指在对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。

        分行特色业务云平台需要具备良好的扩展性,能在系统基础设施稳定不需要经常改变的情况下,对需求变更可以敏捷响应。

4.2.2.5  安全性

        安全性指保护系统不受恶意访问和攻击,保护重要数据不被窃取。

        分行特色业务云平台需要保证总分之间、第三方与总行、分行之间通讯安全,保证敏感的数据不外泄。

        1.通讯安全

            标准加解密功能:使用总行标准安全加解密方法提供给分行使用。

            标准加验签功能:使用总行标准安全加验签方法提供给分行使用。

        2.数据安全

            日志脱敏功能:实现关键敏感字的日志脱敏功能。

            加密存储功能:FTP密码明文存储、数据库密码明文存储修改为加密存储。

4.2.3  关键功能

4.2.3.1  公共技术功能

        1.服务编排

        使用Tesla的服务编排组件,进行复杂流程服务(涉及两个及其以上服务调用、以及需异常处理的服务)的封装。

        2.基于Dubbo的服务调用

        基于Tesla3.0的服务调用方式,实现服务位置的透明发现,软负载调用,服务超时设置,并发控制等功能。

        服务权限管控等功能目前重点通过平台数据库控制机制实现,注册中心上的管控方式依赖于注册中心的可用性,仅作为辅助控制方法。

        3.公共联机处理框架

        实现公共的联机处理框架,提供通用的服务接入处理,包括入参预处理、初始化交易流水、更新交易流水、出参预处理等功能,对服务调用透明化,简化业务开发。

        4.统一渠道接入能力

        通过API网关,接入总行公共渠道,在网关上实现通讯协议解析,安全认证,流量控制,数据转换,协议转换等功能。

        5.统一消息通知

        服务通过配置化实现交易前、交易成功、交易失败、交易异常的消息通知机制,调用消息通知组件,与联机服务框架解耦。通知的方式可扩展,通知失败后的处理规则可选择。优先实现短信方式。

        6.统一异常处理

        服务通过配置化实现异常处理的自动处理,当异常处理到达最大重试上限后,将异常处理信息推送异常处理平台。同时,支持异常处理平台回调平台服务的实现。

        7.异步任务调度

        支持非持久化异步任务调度和持久化异步任务调度。

        8.本地缓存

        实现基于本地内存的缓存组件,缓存运行过程中极少变更的配置数据和业务数据。除此之外,本地缓存组件需要实现如下功能:

            实现缓存查询服务、缓存更新服务(远程服务、本地服务)等缓存管理功能;

           基于Zookeeper的Watch机制,实现了集群环境中,缓存更新事件的发布与订阅,以支持该组件在集群环境中的使用;

            为了保证集群各节点缓存都进行了更新,在控制台增加了相应缓存查看,缓存更新功能,便于应用实例与ZK之间出现通讯异常时,缓存仍然能正常更新;

            同时支持基于ZK的自动更新和基于控制台的手动更新,各应用根据实际情况配置;

            同时支持应用级本地数据缓存和模块级本地数据缓存,各自管理,互不冲突;

        9.自动任务调度

        实现自动任务调度组件,以支持平台任务的定时调度,具体功能如下:

            支持Tesla平台Function功能的跨模块调用;

            支持任务持久化;

            支持集群和分布式任务;

            分线程池管理;

            任务调度定义可配置化管理;

        10.总分报文通讯组件

        实现公共的报文通讯组件,供分行调用总行的服务,对分行屏蔽报文协议解析封装、压缩解压、签名验签功能。另外,提供灵活的扩展机制,供后续功能的扩展。

        11.公共文件处理组件

        实现文件配置化的组装、解析功能。

        12.总分文件交互组件

        分平台与总平台或后台公共模块文件交互的方案实现,使用公共组件,使分行对总分文件交互方式做到透明化。

        13.全局序列号发生器

        实现数据库存储全局序列号,应用启动时加载流水号段。

        14.分布式集群文件配置

        使用Tesla现有的配置管理中心能力实现,用于分布式应用的集群技术参数的配置。同时,配置的修改有历史记录可追踪,提供审计信息查看功能;

        15.公共返回码管理

        实现基于数据库的公共返回码管理,便于全平台的返回码资源共享,便于查看,维护。支持启动时加载数据库内容至本地缓存,支持动态刷新。

        16.分库分表

        应对大交易量交易对数据库单表造成的操作压力,支持进行分库分表操作,对表进行水平拆分和纵向拆分。

        17.数据归档组件

        应用系统对于长时间运行后,某些记录数过大(存量/增量指标)的表,且不需要提供实时查询的数据,应提供归档机制,直至满足监管和行内要求的最低保留时限,以避免数据无限增长对系统容量和运行效率造成负面影响。归档数据可考虑备份至本系统历史库,也可考虑归档至历史归档平台。

        18.文件归档组件:

        对于不需要长期保留的文件,如对账文件,产品信息文件等,需要提供定时清理机制,系统应可配置保留天数,超过天数(建议7天)的文件自动清理。

        对交易日志文件,实现自动定期备份、归档和清理,避免因文件数量过多导致应用处理效率低下。对接ELK或日志归档平台进行备份后,自动清理。

        19.标准通讯SDK

        供接入商户使用,集成加解密、数字签名等安全功能,通讯协议拆解包等通讯功能,统一接入标准,简化商户接入难度。

        20.公共批处理框架

        实现批处理框架,以支持大量作业的并发处理、并发控制、异常处理等,具体要求如下:

            互斥控制:

                1)互斥作业应有防止并发控制机制;

                2)单个批处理应控制并发重复执行;

                3)前后依赖关系的批处理应保证顺序执行;

            并发控制:对大数据量(量化)批处理应可实现并发处理,通过多线程/进程或数据库层实现并发,并发数可动态调整;

            断点执行:单个批处理处理过程中失败,修复问题后应支持断点处继续执行;

            紧急跳过:对于无法短时间修复的批处理,能提供紧急跳过该步骤,继续后续批处理功能;

            通知机制:批处理开始、结束、异常等情况,可通过邮件和短信通知相关人员;

            CPS调度:批作业应支持CPS系统调度发起交易和本地管理端发起交易。对处理失败的批处理,可通过本地管理端再次发起该作业;

            异常业务数据通知:对批处理过程中遇到不影响继续处理,但存在异常或可疑的数据,产生工作流任务或实时通知业务人员进行异步处理;

            定时任务自定义:系统提供自定义的定时自动任务,完成经常调整的定时任务,不建议通过系统的crontab定义自动任务。与其他系统有关联的作业,不建议使用此方式;

            与联机交易冲突:

                1) 批处理过程应尽量减少联机(计划内)的可用性;

                2) 考虑资源(数据库资源/网络资源/进程资源等)不影响联机交易的可用性;

             作业监控:对批作业状态及进度提供展示界面;

4.2.3.2  公共业务功能

        1.应用日终组件

        完成平台通用的修改平台状态、切日前任务处理,切日任务,切日后任务处理功能。同时,支持多个切日前任务的依赖关系、多个切日后任务的依赖关系分别可配置,根据依赖关系顺序执行。

        2.日终对账组件

        对分平台提供公共的日终对账能力,从支付平台按商户获取商户对账单文件,商户手续费文件。

        3.额度控制组件

        实现额度控制组件,支持通过配置化的数据项,控制指定交易的额度占用及释放。可按照数据级的颗粒度进行配置,如控制某个商户发起的指定交易额度控制规则。

        在后端有额度控制功能前提下,可不进行配置,避免性能损耗。

        4.频度控制组件

        实现频度控制组件,支持通过配置化的数据项,控制指定交易的频度占用及释放。可按照数据级的颗粒度进行配置。如控制某个商户发起的指定交易频度控制规则。

        在后端有频度控制功能前提下,可不进行配置,避免性能损耗。

        5.通用黑白名单控制组件

        通过配置的数据项,从指定的上下文中根据key=value的组合找出控制主键,并且对该主键进行黑名单准入或白名单准入功能。

4.2.3.3  基本服务封装

        1.PE-支付引擎

        封装总行支付引擎提供的通用支付相关的服务,预计17个,根据后期具体业务需求而定。

        2.UNPS-统一网络支付系统

        封装统一网络支付系统提供的在线支付相关的服务,预计27个,根据后期具体业务需求而定。

        3.NPS-网络支付系统

        封装网络支付系统提供的在线支付相关的服务,预计2个,根据后期具体业务需求而定。

        4.RLS-零售贷款系统

        封装零售贷款系统提供的贷款相关的服务,预计5个,根据后期具体业务需求而定。

        5.移动支付收单系统

        封装移动支付收单系统提供的移动支付相关的服务,预计5个,根据后期具体业务需求而定。

4.2.3.4  流程服务封装

        1.支付结算服务封装

        封装支付结算类的服务接口,包括通用的支付结算接口、招标通的服务接口、见证支付的服务接口、订单支付的服务接口等。

        2.信息查询服务

        封装支付/退款结果查询、交易结果查询、商户提现/余额查询等服务。

        3.辅助服务

        封装一些通用功能服务,如总分文件传输服务等。


  微信扫一扫,关注该公众号

  该系列文章已经在微信公众号发布,如果感兴趣,请关注。

   以后更多知识通过该微信公众号分享。



实战指南:基于ELK与Grafana构建天融信防火墙日志可视化看板 本文详细介绍了如何基于ELK与Grafana构建天融信防火墙日志可视化看板,包括环境准备、日志收集与解析配置、Elasticsearch存储优化、Grafana看板设计等关键步骤。通过实战案例和优化技巧,帮助用户高效处理天融信防火墙日志,实现安全态势的可视化监控与分析。 阅读详情

相关推荐

ESP32 开发实战:VS Code 头文件波浪线及编译错误的终极解决方案

本文针对ESP32开发者在VS Code中常见的头文件红色波浪线和fatal error编译错误,提供了终极解决方案。通过详细讲解如何配置c_cpp_properties.json文件来修复编辑器智能提示,以及如何修改CMakeLists.txt来修正编译器路径,帮助开发者彻底解决环境配置问题,提升开发效率。

prometheus9mon的博客 294

软件需求的三个层次——业务需求、用户需求和功能需求的区别

在软件开发过程中,最为重要的“用户需求”往往和数量巨大的”功能需求“混淆在一起,这会让太多没有直接提供业务价值的需求充斥在需求阶段,这会导致没有突出重点而忽视重要的业务特性,这对业务分析来说是非常有害的。我们的软件产品或者项目,其需求都有三个层次,业务需求、用户需求和功能需求,除此之外,每个系统还有各种非功能需求。而功能需求针对的是产品,描述是产品如何解决用户所遇到的问题,或如何满足用户的欲望,是方式、方法。用户需求是针对的是人,描述的是用户想做某件事情所遇到的问题,或想满足的欲望。

顺其自然~专栏 4485

独立游戏开发者必看:STEAM税务信息更新全流程(附中国区避坑指南)

本文为独立游戏开发者详细解析了Steam税务信息更新的全流程,重点针对中国区开发者提供了避坑指南。文章深入解释了W-8BEN表格的填写要点,并指导如何准备个人所得税纳税记录和身份证等核心证明文件,以确保顺利通过审核,避免收入被预扣税款。

tcp8optimizer的博客 1309

【PMP/软考】软件需求的三个主要层次:业务需求、用户需求和功能需求解释及实例解析

当进行需求分析时,通常着重考虑三个主要层次:业务需求、用户需求和功能需求。业务需求关注项目与组织战略目标的一致性,用户需求明确最终用户的期望,而功能需求定义具体的系统功能和特性。这三个层次为项目管理和软件工程提供了关键的指导,确保项目成功地满足用户和业务需求。需求分析的重点通常集中在这三个层次,以确保项目的成功交付。此外,还包括系统需求、性能需求、可用性需求、安全性需求、数据需求、界面需求以及法规和合规性需求等。这些层次共同构成全面的需求分析,有助于确保项目满足各种技术、业务和用户方面的需求,以达到项目成功

天河书阁 - VicRestart 9512

命名管道和匿名管道

我们知道进程间是可以通信的。可以达到数据传输、资源共享、事件通知、进程控制等目的。进程间通信主要包括管道、系统IPC,套接字等。 管道分为三种: 普通管道:一是单工,只能单向传输 ,二是仅能在父子进程或者兄弟进程中使用。 流管道:去除了第一种限制,为半双工,可以双向传递, 命名管道:去除了第二种限制 ,可以在很多并不相关的进程 中进行通信。 1、普通管道 int pipe(int f...

ffsiwei的博客 1万+

orangepi 5 plus ubuntu24.04上安装redroid

OrangePi 5 Plus运行reDroid云手机方案总结 在RK3588+Ubuntu 24.04上部署reDroid(Android容器化方案)的关键步骤: 内核要求:确保启用binderfs(无需ashmem,新版reDroid使用memfd替代); 安装流程: 安装Docker并配置代理加速镜像拉取; 拉取reDroid镜像(推荐Android 12/13 ARM64版本); 通过挂载binderfs启动容器,指定分辨率与DPI参数; 多实例管理: 脚本化创建多个容器(如8个实例),分配独立端口

babytiger的专栏 2294

一个轻量级服务编排框架的实现思路

服务编排(Orchestration)是在微服务架构中常用于聚合调用的低代码实现方案,通过对下游各个领域系统原子接口的排列组合,最终对客户端或前端提供可灵活适配业务的聚合接口,用以降低业务变化带来的技术成本。本文试图讨论一种有别于传统服务编排的技术方案,通过特别设计的运行规则来实现概念简单、配置灵活的服务编排框架,为后来者在设计上打开一定的思路。

coderlius的博客 4064

【图形学】Loop细分算法及半边结构实现(C++)

文章目录Loop 细分算法介绍增加新顶点更新旧顶点算法实现半边结构半边结构的表示方法半边结构的构造方法创建所有顶点创建所有面及半边半边结构的使用 Loop 细分 顾名思义,网格细分是将粗糙网格精细化的过程,如下动图。Loop细分是众多网格细分算法的一种,Loop细分仅仅对三角形网格模型有效。值得注意的是,虽然叫Loop细分,但是不能理解为“循环”细分,叫这个名字是因为作者的名字是这个而已。 下面是一个粗糙的兔子模型1000个面,进行3次细分 算法介绍 Loop细分算法主要分两步进行 增加新顶点:增加

wk_119的博客 8066

Netty学习五:Netty框架之服务编排

Netty学习系列

weixin_41402069的博客 1475

Docker(八):Docker Compose(容器编排) 管理多容器应用—实战案例演示

🟢 Docker(八):Docker Compose(容器编排) 管理多容器应用—实战案例演示

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6万+

Dify 第 14 篇 Dify 知识库改造案例,如何返回完整文档?

在使用Dify社区版v1.7.1的知识库功能时,遇到检索仅返回匹配的文本片段而非完整文档的问题。针对运维案例知识库的需求,尝试了三种解决方案: 调整Chunk大小:通过设置最大分段长度为4000字符,但无法满足超过该长度的文档需求。 增加返回Chunk数量:通过调整Top K参数,但最大仅支持10个片段,且可能包含无关内容。 调用知识库API:通过检索接口获取匹配文档ID,再查询该文档所有分段内容,从而获得完整信息。具体步骤包括生成API密钥、获取知识库ID,并通过HTTP请求实现。 最终推荐采用AP

甘蓝的专栏 1969

微服务架构设计实践系列之一:序言

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构1  序言        最近,在软件架构设计领域,微服务非常火。        一提到软件开发、架构设计,如果...

闲来无事 8973

汽车电子零部件(14):TMS热管理系统

TMS(thermal management system)热管理系统,这是新能源汽车诞生后随之而产生的一种新汽车零部件,一旦热管理失控会触发自燃,这种现象也是对EV来说是件头疼的事。汽车的热管理系统(TMS)是一个关键部件,有助于调节汽车电池组、车厢和其他车辆系统的温度。TMS的主要目的是在驾驶过程中保持最佳的电池性能和乘客舒适度。TMS使用各种加热和冷却系统来调节电池组和车厢的温度,并通过优化其使用,降低能耗,提高车辆的整体效率。

码农17年的博客 3164

微服务架构设计实践系列之十:技术架构

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.4  技术架构4.4.4.1  技术架构定义        技术架构定义了实现整个系统所需的各种技术,包...

闲来无事 3万+

深度学习工具包 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")

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

微服务架构设计实践系列之六:概念架构阶段

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.3  概念架构阶段        在概念架构阶段,针对已经分析出的重大需求、特色需求、高风险需求,必须有针对...

闲来无事 6068

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

微服务架构设计实践系列之十二:开发架构

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.6  开发架构4.4.6.1  开发架构定义        开发架构定义了软件开发环境中,软件模块的实际...

闲来无事 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

微服务架构设计实践系列之九:应用架构

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.3  应用架构4.4.3.1  应用架构定义        应用架构定义了系统由哪些应用组成,以及应用之...

闲来无事 1万+

微服务架构设计实践系列之十一:物理架构

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.5  物理架构4.4.5.1  物理架构定义        物理架构定义了“程序”如何映射(安装、部署或...

闲来无事 1万+

微服务架构设计实践系列之二:微服务

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构2  微服务2.1  微服务的定义        微服务是一个独立、可部署的服务,它只专注做一件事情并且做好,而...

闲来无事 6392

微服务架构设计实践系列之三:软件架构设计思想

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构3  软件架构设计思想3.1  软件架构定义        对于软件架构的定义,仁者见仁,智者见智。目前,业界比...

闲来无事 1万+

微服务架构设计实践系列之八:数据架构

微服务架构设计实践 目    次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.2  数据架构4.4.2.1  数据架构定义        数据架构定义了用来支持业务的各种数据,以及他...

闲来无事 1万+
上一篇: 微服务架构设计实践系列之四:项目概述
下一篇: 微服务架构设计实践系列之三:软件架构设计思想
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任性之闲来无事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值