ZStack—可拓展性秘密武器2:无状态的服务

TI CC2652P无线MCU深度解析:多协议、低功耗与高集成设计实战 无线微控制器(MCU)是物联网设备的核心,其选型直接影响产品的功耗、成本和开发周期。其工作原理在于集成处理器、射频和专用协处理器,通过异构计算和动态电源管理实现性能与功耗的平衡。这种设计的技术价值在于能够以单芯片方案替代传统的多芯片组合,大幅简化硬件设计,降低系统复杂性和物料成本。在智能家居、工业传感和资产追踪等应用场景中,此类高集成度无线MCU支持蓝牙、Zigbee等多协议并发,并凭借超低待机功耗满足长续航需求。本文以TI CC2652P为例,深入探讨其动态多协议管理(DMM)和传感器控制器等核心特性,为 阅读详情

每一个ZStack服务都是无状态的,简单的开启一个富余的服务实例然后使之负载均衡,就能实现服务的高可用和可横向拓展;此外,ZStack把所有服务封装进一个称为管理节点的进程中,使得部署和管理服务变得尤其简单。

动机

在“ZStack的可拓展性秘密武器1:全异步架构”中,我们论述了异步的架构使得单一的ZStack管理节点足以承担大多数云的负载量;然而当用户想要去创建一个高可用的生产环境或处理非常大的并发工作负载,一个管理节点是不够的。解决方案是建立一个负载均衡的分布式系统,这种通过添加新节点来拓展整个系统的能力的方法被称为横向拓展。

问题

设计一个分布式系统不是一件简单的事情。一个分布式系统,特别是一个有状态的系统,必须处理一致性(consistency)、可用性(availability)和分区容忍性(partition tolerance)(CAP理论)的问题,每一个问题都是非常复杂的。与之相反,一个无状态的分布式系统一定程度上降低了复杂度。第一,因为节点不用分享状态,整个系统的一致性是可以保证的。第二,因为节点都是相似的,对于分区问题系统通常是可以容忍的。因此,通常把一个分布式系统设计为无状态的而不是有状态的。但是设计一个无状态的分布式系统通常比设计一个有状态的分布式系统难得多。利用消息代理和数据库的优点,ZStack建立了一个包含各种无状态服务的无状态分布式系统。

使整个系统无状态的基础是无状态的服务,在讨论什么是无状态的服务之前,我们首先理解什么是“状态”。在ZStack中,主机、虚拟机、镜像和用户等资源是被一个个服务管理的。当整个系统的服务实例不止一个的时候,资源会被分发到不同的服务实例中。假设有10000台虚拟机和两个虚拟机服务实例,理想状态下每个实例会管理5000台虚拟机。

在这里插入图片描述

因为有两个服务实例,在向一个虚拟机发出请求前,请求者必须知道哪个实例管理哪个虚拟机,否则,他将不知道向哪个实例发出请求。类似“哪个服务实例管理哪个资源”的信息就是我们所说的状态。如果一个服务是有状态的,每个服务维护自己的状态。请求者必须可以获取到当前的状态信息。当服务实例的数量改变的时候,服务需要去改变状态。

在这里插入图片描述

状态的改变是危险且易错的,这通常限制了整个系统的可拓展性。为了使整个系统的可靠性和横向拓展性增强,把状态和服务分离开,使得服务无状态是比较理想的解决办法(参考Service Statelessness Principle)。无状态的服务使请求者不需要询问向哪里发送请求,当新添一个新的服务实例或者删除一个旧的服务实例的时候,服务之间也不用交换状态。

备注:在以下文档中,为了简便,“服务”和“服务实例”是可以互换的。

服务和管理节点

通过中心消息代理-- RabbitMQ彼此通信的服务,在ZStack中是一等公民。

在这里插入图片描述

与典型的microservice架构不同,典型的microservice架构中每个服务通常运行在不同的进程或者不同的机器上,ZStack则把所有服务封装在一个被称为管理节点的进程中。文章“进程内的microservice架构”解释了我们这么做的原因。

每个管理节点都是一个功能齐全的ZStack软件。因为包含的服务是无状态的,管理节点不共享任何状态,但仍然需要维护和其他节点的心跳记录,和一个一致性哈希环,我们接下来将详细介绍哈希环。心跳用来监视管理节点是否正常运行,一旦一个管理节点停止更新自己的心跳一段时间后,其他的管理节点将会驱逐它然后接管他所管理的资源。

无状态的服务

针对ZStack的业务逻辑,实现无状态服务的核心技术,是一致性哈希算法。当系统启动的时候,每一个管理节点将被分配一个version 4 UUID(管理节点UUID),这个UUID将和服务名称拼在一起在消息代理上注册一个服务队列。例如,一个管理节点可能有类似下面的服务队列:

zstack.message.ansible.3694776ab31a45709259254a018913ca

zstack.message.api.portal

zstack.message.applianceVm.3694776ab31a45709259254a018913ca

zstack.message.cloudbus.3694776ab31a45709259254a018913ca

zstack.message.cluster.3694776ab31a45709259254a018913ca

zstack.message.configuration.3694776ab31a45709259254a018913ca

zstack.message.console.3694776ab31a45709259254a018913ca

zstack.message.eip.3694776ab31a45709259254a018913ca

zstack.message.globalConfig.3694776ab31a45709259254a018913ca

zstack.message.host.3694776ab31a45709259254a018913ca

zstack.message.host.allocator.3694776ab31a45709259254a018913ca

zstack.message.identity.3694776ab31a45709259254a018913ca

zstack.message.image.3694776ab31a45709259254a018913ca

zstack.message.managementNode.3694776ab31a45709259254a018913ca

zstack.message.network.l2.3694776ab31a45709259254a018913ca

zstack.message.network.l2.vlan.3694776ab31a45709259254a018913ca

zstack.message.network.l3.3694776ab31a45709259254a018913ca

zstack.message.network.service.3694776ab31a45709259254a018913ca

zstack.message.portForwarding.3694776ab31a45709259254a018913ca

zstack.message.query.3694776ab31a45709259254a018913ca

zstack.message.securityGroup.3694776ab31a45709259254a018913ca

zstack.message.snapshot.volume.3694776ab31a45709259254a018913ca

zstack.message.storage.backup.3694776ab31a45709259254a018913ca

备注:你应该已经注意到所有的队列都是以一个相同的管理节点的UUID结尾的。

主机,磁盘,虚拟机等资源也有特定的UUID。和资源相关的消息通常在服务之间传递,在发送一个消息之前,发送者必须基于资源的UUID选择一个接收服务,一致性哈希算法这时候就发挥作用了。

一致性哈希是一种较特别的哈希,当一个哈希表的大小发生变化时,只有一部分键需要被重新映射。深入了解一致性哈希,请阅读http://www.tom-e-white.com/2007/11/consistent-hashing.html,在ZStack中,管理节点组成了一个一致性哈希如下:

在这里插入图片描述

每一个管理节点维护了一份包含系统中所有管理节点的UUID的环拷贝,当一个管理节点添加或删除的时候,一个生命周期事件将通过消息代理广播到其他的管理节点,这将导致这些节点拓展或者收缩环去描述当前系统的状态。当发送一条消息时,发送者将使用资源的UUID哈希得出目标管理节点的UUID。例如,当VM的UUID是932763162d054c04adaab6ab498c9139时发送一个StartVmInstanceMsg,伪代码如下所示:

msg = new StartVmInstanceMsg();destinationManagementNodeUUID = consistent_hashing_algorithm(“932763162d054c04adaab6ab498c9139”);msg.setServiceId(“vmInstance.” + destinationManagementNodeUUID);cloudBus.send(msg)

有了哈希环,资源UUID相同的消息将被映射到特定管理节点的相同服务中,这点是ZStack的无锁架构的基础(参考ZStack的可拓展性秘密武器3:无锁架构)。

在这里插入图片描述

当环收缩或者拓展的时候,因为哈希环的固有特性,仅有小部分节点将被影响。

因为使用一致性哈希环,发送者不需要知道哪个服务实例将处理这条消息,因为服务实例将被哈希计算出来。服务也不用维护、交换他们管理的资源信息,并且因为选择正确的服务实例可以由哈希环完成,服务只需要单纯的处理消息。因此,服务变得极其简单且无状态。

除了包含资源UUID的消息(例如StartVmInstanceMsg, DownloadImageMsg)以外,有一种不包含资源UUID的消息,这种消息通常是创造性的消息(例如CreateVolumeMsg)和不进行资源操作的消息(例如AllocateHostMsg),因为这些消息可以被发送到任意管理节点的服务中,他们就被发送到本地的管理节点,因为发送者和接收者在同一个节点上,接收者在发送者发送消息时一定是可用的。

对于API消息(如APIStartVmInstanceMsg),有一个特别的处理方法是他们经常和一个重要的服务ID api.portal绑在一起发送。在消息代理中,一个称为zstack.message.api.portal的全局的队列被所有管理节点的API服务共享,带有api.portal的消息将通过一致性哈希环把消息映射到正确的服务中,从而实现负载均衡。通过上面这种方式,ZStack隐藏了API客户端消息选路的实现,减少了ZStack API客户端代码。

msg = new APICreateVmInstanceMsg()msg.setServiceId(“api.portal”)cloudBus.send(msg)

在这里插入图片描述

总结

本文演示了ZStack是如何通过构建一个无状态的分布式系统来进行横向拓展的。因为管理节点共享的信息非常少,建立一个庞大的拥有几十或上百个管理节点的集群是非常容易的。然而,在现实中,对于私有云,两个管理节点足够满足高可用性和可拓展性的需求。对于公有云,管理者可以依据负载量大量创建管理节点。因为异步架构和无状态架构,ZStack能够处理现有的IaaS软件处理不了的非常大的并发任务。

zstack(二)zstack二次开发 zstack的二次开发,关于二次开发的修改生效以及debug 阅读详情

相关推荐

为什么我们创造ZStack而不是选择OpenStack

我们站在巨人的肩膀上,所以能够看得更远 三年前,当我还在为另外一家IaaS软件公司工作的时候,一个朋友半开玩笑的对我说:“你们做的产品会让IT管理员下岗”, 虽然是句玩笑话,但我却非常认同这个观点。大家普遍的共识是IaaS以及各种软件定义数据中心的软件会解放各大公司的IT部门,对系统管理员的需求会大大减小。三年过去了,IaaS产业已经变得异常红火,可是没有一个IT管理员因此而失业。更戏剧的

zstack_org的博客 6807

码云最最新的10款开源项目,你必须知道!

不知道大家有没有留意到一个云端软件开发协作平台——Gitee?Gitee能帮助开发者/团队/企业更好地管理代码、项目和研发团队。而且它拥有全面的开源项目分类和推荐,可以帮助你迅速找到有价值的开源项目并参与其中。目前Gitee平台拥有众多的GVP项目,其中不乏有能提高工作效率的优秀开源项目。今天,就给大家盘点了其中的10个优秀开源项目,都是非常实用的工具,用好这些将会让你的生产效率大大提升!现在就跟...

趣谈前端 2168

实战部署最新版OpenStack和ZStack对比

OpenStack作为目前发展的最为红火的开源云平台项目,已经成功形成了自己的生态圈,得到了各大厂商的关注和支持,笔者从两年前关注OpenStack并尝试手动搭建OpenStack,期间经历了各种部署问题,并最终找到了RDO这样的快速部署工具,得以窥见OpenStack的全貌。从笔者来看,OpenStack虽然正在博得整个云计算技术圈的关注,但从公有云生态圈来说,OpenStack落地过程也不尽如...

karamos的专栏 3310

ZStack-开源的云计算IaaS(基础架构即服务)软件

官网:http://www.zstack.io/ ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。 [1]  它主要面向的是未来的智能数据中心,通过提供的API来管理包括计算、存储和网络在内的数据中心的各种资源。跟OpenStack相比,ZStack具有易用、稳定、灵活、超高性能等特点。 ZStack成立于2015年9月,总部位于上海,分支机构包括硅谷、北京、成都、广州等地,初...

kozazyh的专栏 3231

IaaS开源新项目-ZStack技术架构总览

ZStack 是一个全新的开源 IaaS 软件,吸取OpenStack等前辈的经验,针对各种云的问题重头设计了整套架构,旨在解决IaaS复杂度、稳定性、可伸缩性和灵活性等问题。ZStack 0.6 已经提供了大部分 IaaS 的基本功能,包括:虚拟机管理,存储卷管理,存储卷快照,各种网络服务(DHCP、DNS、SNAT、EIP、PortForward 以及 Security Group)。

stm32h743 FM25CL64铁电存储器踩坑记录

调试FRAM经验总结: 1、跑完FRAM读写代码之后,逻分仪发现总线上只有简单、短暂的电平变化,明显不是SPI的通信数据。 (经提醒发现连片选拉高拉低都没有执行到位) 后来发现是因为片选引脚没有初始化,所以直接拉高拉低是无效的。 2、引脚成功初始化后发现CLK、MISO、MOSI数据仍不正常。通过加打印的方式发现跑到HAL_SPI_Transmit中之后还没有执行到写SPI数据寄存器的那一步就return了。 后来经提醒发现: 上图中的指针使用方式错误 后来又发现: 打印出来发现

kuniqiw的博客 3847

ZStack 5分钟 | 浅谈核心架构设计特点

ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。它主要面向未来的智能数据中心,通过提供灵活完善的APIs来管理包括计算、存储和网络在内的数据中心资源。用户可以利用ZStack快速构建自己的智能云数据中心,也可以在稳定的ZStack之上搭建灵活的云应用场景,例如VDI(虚...

chengtuandao1076的博客 742

数学之美 | 图论和网络爬虫

文章目录概述图论网络爬虫分析BFSDFSBFS + DFS参考资料 概述 这篇文章主要给大家介绍一下计算机算法中非常重要的一部分——图论,以及它在生活中的应用——网络爬虫。   图论 离散数学是当代数学的一个重要的分支,也是计算机科学的数学基础。它又包括四个分支,而图论便是其中一支,另外三个分别是:数理逻辑、集合论、近代数学。 图论中的图由一些节点和边构成,比如下面这张图 。 在图论中一个很基础...

小小酥梨的博客 3231

Upscayl AI图像放大终极指南:快速解决Vulkan GPU加速初始化失败问题

Upscayl是一款免费开源的AI图像放大工具,它利用先进的AI算法和Vulkan图形API,能够将低分辨率图片放大4倍甚至更高倍率,同时保持图像质量。这款跨平台工具支持Linux、macOS和Windows系统,让普通用户也能体验到专业级的图像增强技术。 然而,许多用户在初次使用Upscayl时会遇到Vulkan初始化失败的问题,导致GPU加速功能无法正常工作。本文将为你提供完整的解决方案,让

gitblog_00035的博客 585

一生一芯——用RTL实现最简单的处理器NPC(南大数逻计组RV32ICPU) 代码及思考参考

本文介绍自己前期用Verilog编写的基于RV32I指令集的CPU,个人认为是最简单最易懂的版本(即没做什么优化,即代码很水,没有考虑一些奇怪的情况,只适用简单指令序列,即题目所示最简单的处理器),适合新手练手Verilog以及了解简单CPU的运行过程。本文基于一生一芯,利用Verilator进行仿真,并用gtkwave查看波形,不了解verilator和gtkwave的可以看前几篇文章。

long0_o的博客 3310

Foxglove Studio实战:5步搞定自动驾驶数据可视化(附避坑指南)

本文详细介绍了如何使用Foxglove Studio高效搭建自动驾驶数据可视化工作流。通过五个核心步骤:环境准备、数据导入、面板搭建、交互分析与自动化集成,帮助开发者快速掌握这一专为机器人系统设计的开源平台。文章重点解析了其与ROS/ROS 2、MCAP等数据源的无缝对接,以及3D点云、多传感器融合、团队标注等核心功能,并附有实用的性能优化与避坑指南,旨在提升算法调试与团队协作效率。

d3e4f的博客 339

zstack vs openstack 你怎么看?

ZStack和OpenStack都是云计算领域的重要软件,它们在私有云和混合云的构建中扮演着关键角色。下面是对两者的比较:设计哲学:OpenStack:它是一个开源的云计算管理平台,旨在提供全面、灵活且可扩展的云计算服务。OpenStack支持多种类型的云服务,包括IaaS、PaaS和SaaS,并且具有一个庞大的社区支持。...

650

微信小程序中蓝牙打印机中文编码处理:使用iconv-lite库

本文介绍了微信小程序集成蓝牙打印机时中文乱码问题的解决方案。由于打印机通常仅支持GBK/GB2312编码,而小程序使用UTF-8,导致中文显示异常。通过引入轻量级iconv-lite库进行编码转换,可高效解决该问题。文章详细说明了从库安装、编码转换到蓝牙发送的实现步骤,并提供了完整代码示例。关键注意事项包括编码验证、分段发送和兼容性测试。该方法经实际验证,能有效保障中文打印的准确性,适用于零售、物流等场景。

canglingyue的专栏 1310

ZStack 5分钟 | 核心架构设计特点2:无状态的服务

ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。它主要面向未来的智能数据中心,通过提供灵活完善的APIs来管理包括计算、存储和网络在内的数据中心资源。用户可以利用ZStack快速构建自己的智能云数据中心,也可以在稳定的ZStack之上搭建灵活的云应用场景,例如VDI(虚拟桌面基础架构)、PaaS(平台即服务)、SaaS(软件即服务)等。 上期5分钟和大家分享了ZStack的核心架...

zstack_org的博客 629

零基础学simulink仿真建模--使用Simulink来构建一个混合动力无人机中燃料电池与锂电池协同控制的仿真模型

延长飞行时间:燃料电池的能量密度高于锂电池,适合长时间稳定供电。提高功率密度:锂电池能够快速响应瞬时高功率需求,比如起飞和加速阶段。优化能源管理:通过有效的能量管理系统,可以根据实际需求动态调整燃料电池和锂电池的工作状态,从而提高整体效率。通过上述步骤,我们简要介绍了如何基于Simulink实现混合动力无人机中燃料电池与锂电池协同控制的仿真模型。

amy_mhd的博客 191

基于树莓派4B设计的厨房环境监测系统_368

本项目设计并实现了一种基于树莓派4B的厨房环境监测系统,提升厨房使用过程中的安全性与智能化水平。系统采用树莓派4B作为主控核心,集成DHT11温湿度传感器、MQ2烟雾传感器、火焰传感器、光敏传感器、水滴检测传感器等多种传感器,实现对厨房环境温湿度、烟雾、火焰、光照与溢水等参数的实时监测,并通过蜂鸣器进行本地报警。系统通过WIFI连接互联网,利用MQTT协议将环境数据上传至华为云物联网平台,实现远程可视化监控。

418

ZStack--可拓展性秘密武器3:无锁架构

很多IaaS软件中的任务需要按照顺序执行,例如,当一个启动虚拟机的任务正在运行时,关闭同一台虚拟机的任务必须等候前面开启虚拟机的任务完成。另一方面,一些任务应该支持并行完成;例如,20个在同一台主机上创建虚拟机的任务可以同时运行。在一个分布式系统中同时实现串行化和细粒度的并行化并不容易,这通常需要借助分布式调度软件。面对挑战,ZStack提出基于队列的无锁架构,使得任务本身可以简单的控制他们的并行...

zstack_org的博客 554

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ZStack--可拓展性的秘密武器1:异步架构

ZStack的架构使得其中99%的任务能被异步执行。基于这点,ZStack中单一的管理节点可以管理几千台物理服务器,上万台虚拟机,处理成千上万个并发任务。 动机 对于管理大量硬件和虚拟机的公有云而言,可拓展性是一个IaaS软件必须解决的关键问题之一。对于一个大概拥有5万台物理服务器的中型数据中心,预计可能有150万台虚拟机,1万名用户。虽然用户开关虚拟机的频率不会像刷朋友圈一样频繁,但是在某一时刻...

zstack_org的博客 724

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

2.ZStack的伸缩性秘密武器:无状态服务

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34072159的博客 180

OV9734 DATASHEET,完整规格书

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

ZStack源码剖析:如何在百万行代码中快速迭代

本文首发于泊浮目的专栏:https://segmentfault.com/blog... 前言 ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。它主要面向的是未来的智能数据中心,通过提供的API来管理包括计算、存储和网络在内的数据中心的各种资源。跟OpenStack相比,ZStack具有易用、稳定、灵活、超高性能等特点。...

weixin_33895657的博客 290

ZStack的伸缩性秘密武器(三):无锁架构

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34302561的博客 150

ZStack技术介绍

近年来随着互联网业务的迅速发展以及新兴业务激增,业务数据呈现几何倍数增加,传统服务器+存储的竖井式架构已无法很好满足业务发展需求,分布式、云化技术应运而生。越来越多企业采用虚拟化与云计算技术来构建IT系统,提升IT系统的资源利用率以及缩短业务上线周期。但在应用过程中,企业面临如下挑战:1)系统庞大,管理复杂,运维费用持续走高。2)安装部署复杂,硬件来自多厂商,规划、部署、调优需要丰富的经验支撑。3)多厂商设备,售后支持界面多,解决问题慢。

顺其自然~专栏 3720

ZStack云平台完全指南:从入门到精通的开源IaaS解决方案

ZStack是一款功能强大的开源IaaS(基础设施即服务)软件,它允许用户快速构建和管理私有云环境。作为开源云平台的佼佼者,ZStack以其简单易用、高可靠性和灵活扩展的特性,成为企业和开发者构建私有云基础设施的理想选择。无论是小型创业公司还是大型企业,都能通过ZStack轻松实现虚拟化资源的管理与分配。 ## 一、ZStack核心架构解析:简单而强大的设计 ZStack采用了创新的架构设计,

gitblog_00846的博客 883

关于无状态服务(stateless service) 有状态服务(stateful service),指一篇文章就搞明白

无状态服务(stateless service) 一、定义 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息 有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的 二、优劣 有状态服务常...

华 英雄 4281

高可用架构设计之无状态服务

高可用架构设计之无状态服务 笑谈架构设计 事故的发生是量的积累的结果,任何事情都没有表面看起来那么简单,在软件运行的过程中,随着用户量的增加,不考虑高可用,迟早有一天会发生故障,不得事先考虑高可用设计,而高可用是一门庞大的学问 你想知道我在设计一个高可用系统会考虑哪些内容吗?在架构设计的过程中 考虑方案选型会带来哪些坑,最差的情况下需要考虑故障发生的紧急解决方案 需要监控系统,在故障发生时、发生时有所感知 需要自动化恢复方案,自动化提前处理预警方案 在代码层面需要考虑处理速度、代码性能、报错处理 还要考

机智的程序员小熊 437
上一篇: ZStack--可拓展性的秘密武器1:异步架构
下一篇: ZStack--可拓展性秘密武器3:无锁架构
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值