Sermant标签路由能力在同城双活场景的应用

同城双活和两地三中心架构设计 异地灾备中心是指在异地的城市建立一个备份的灾备中心,用于双中心的数据备份,数据和服务平时都是冷的,当双中心所在城市或者地区出现异常而都无法对外提供服务的时候,异地灾备中心可以用备份数据进行业务的恢复。(2)架构方案较为简单,核心是解决底层数据双活,由于双机房距离近,通信质量好,底层储存例如数据库可以采用同步复制,有效保证双机房数据一致性。(2)架构方案较为简单,核心是解决底层数据双活,由于双机房距离近,通信质量好,底层储存例如数据库可以采用同步复制,有效保证双机房数据一致性。所谓两地三中心是指同城双中心。 阅读详情

作者:聂子雄 华为云高级软件工程师

摘要:目前应用上云已成为趋势,用户也对应用在云上的高可靠方案有更高追求,目前同城双活场景作为应用高可靠方案中的一种常见实践方案,对微服务流量提出了数据中心亲和性的要求,目前通过Sermant的标签路由能力可以实现此要求并能快速助力同城双活方案的落地。

1.  背景

1.1 应用高可靠方案的演进

目前,应用上云已经成为了一种趋势,在这个过程中,用户对于云能够提供的高可靠能力要求也越来越高,目前云上的应用高可靠方案的演进可以分为以下几个阶段:

  1. 同城灾备:同城灾备是指生产中心和灾备中心位于同一个城市。当生产中心发生灾难时,可以将业务迅速切换到灾备中心。数据同步是同城灾备方案的核心,备用数据中心必须同步主数据中心的数据,以确保在主数据中心发生灾害或故障时,备用数据中心可以快速接管业务。

   2. 同城双活:同城双活是指同城内两个数据中心都部署了相同业务,访问流量会按照一定比例分发往两个数据中心,当其中任意一个数据中心出现故障,另外一个数据中心仍然能够正常对外提供服务。

3. 两地三中心:两地三中心的容灾方案其实是同时结合了前两者方案的优点,也即同城双活+异地灾备。同城两个数据中心业务保持双活部署,异地一般以冷备的方式部署并同步主数据中心的数据。

4. 异地多活:异地多活实际上采用的是单元化容灾方案,单元化容灾方案是一种将系统分为多个单元,每个单元都可以独立运行和故障恢复的容灾方案。它可以提高系统的可用性和可靠性,减少系统故障对整个系统的影响。

可以观察到整个应用高可用方案演进的过程中,方案提供的可靠性是逐步提升的,但是相应的成本也会相对升高,因此不同的方案有其适用的场景,其中同城双活和两地三中心方案在可靠性以及成本两方面做到了相对均衡的程度,也是目前国内尤其是金融行业采用较多的方案。同时,两地三中心的容灾方案实际上更多是同城双活以及异地灾备方案的组合形态,因此本文将重点探讨同城双活的场景以及Sermant在这个场景中扮演的角色。

1.2 同城双活对微服务流量的要求

在同城双活场景下,业务应用会按照相同的方式部署在同城的两个数据中心,从接入层进来的访问流量会以一定比例的方式分别流水到两个数据中心的业务应用集群,具体比例的大小是根据两个数据中心规划的集群资源来评估的。此外,同城两个数据中心之间的访问时延一般会明显高于数据中心内部的访问时延。

正常情况下,虽然两个数据中心都部署了相同的微服务应用,但为了降低访问时延以及方便流量管理的需要,方案会要求每个数据中心的微服务应用之间的访问流量全都要在本数据中心闭环,不能随意进行跨数据中心的调用。

故障场景下,例如某个数据中心的部分微服务实例出现了故障,这时候微服务的流量允许进行跨数据中心自动容灾切换,流量可以自动流入可以正常对外提供的微服务应用实例上,以保持应用对外服务的连续性。

因此微服务流量在同城双活的场景下需要具有数据中心亲和性,保障流量优先在数据中心闭环同时在面对故障时也能自动切换。

2. 基于标签路由实现微服务流量的数据中心亲和方案

2.1 整体方案介绍

针对同城双活容灾场景对微服务流量的要求,基于Sermant的标签路由插件以及华为云CSE注册配置中心,我们给出了如下的解决方案:

DC1与DC2两个数据中心分别部署一套应用集群以及CSE注册配置中心,每个数据中心的微服务应用实例在启动时提前挂载好Sermant agent,由Sermant agent代替应用实例向所在数据中心的CSE注册配置中心注册微服务实例信息。此外,两边的注册配置中心会进行数据的双向同步,保证DC1和DC2中的微服务应用能够相互发现。

正常情况下,如下图所示,流量以一定的比例分别经过网关留到了对应数据中心的业务集群,在业务集群内部,请求都是由每个微服务实例上面挂载的Sermant Agent进行接收与转发,Sermant Agent控制着所在业务集群的流量都在内部流动,跨数据中心的微服务访问会被发起者实例上面的Sermant Agent所禁止。

故障情况下,若某个数据中心的部分微服务实例存在异常的情况,Sermant agent会自动完成流量切换到另一个数据中心的正常实例上。如下图所示,例如DC1中的ServiceB实例出现故障,此时DC1中ServiceA的流量会经过Sermant agent自动切换到DC2的ServiceB'实例上,随后流量又会经过Sermant agent转发到DC1的正常的ServiceC实例上。

当然,还有另外一种故障场景,就是存在一整个数据中心都不可用,这时候其只需要把这种场景当成是单个数据中心对外服务的情况即可,正常数据中心的流量仍然在所在数据中心闭环,异常数据中心的流量可以通过自动或者手动的方式将流量全部切到正常的数据中心上。

2.2 Sermant的标签路由插件在方案中的具体机制

在整个方案中,可以看到Sermant在其中扮演着非常重要的角色,微服务实例的流量接收以及转发全都由Sermant agent来控制,在Sermant agent上,有着一个非常重要的插件——标签路由插件,通过在插件上定义相应的路由策略,Sermant agent即可让微服务实例的流量具备数据中心亲和的能力。

使用者可以在每个微服务实例启动的时候手动或者通过流水线自动给微服务实例打上和数据中心有关的标签,因此每个微服务实例在运行的时候会自动带有数据中心的属性。这时候标签路由插件可以通过服务提供者配置路由规则,将带有DC1属性的微服务提供者实例划分为一组,将带有DC2属性的微服务提供者实例划分为另外一组,约束流量只能在指定分组中流转,下图是标签路由插件工作的示意图:

路由插件会根据配置中心下发的动态路由规则去匹配入口流量,若标签符合规则要求,则顺利通过进行后续处理,否则由fallback路由规则进行流量的处理。

2.3 如何接入部署Sermant

Sermant 是基于Java字节码增强技术的云原生无代理服务网格,通过 JavaAgent 对宿主应用进行非侵入式增强,因此在使用的时候无需额外启动进程来运行Sermant agent,只需要在启动应用实例时加入agent的挂载命令即可。标签路由插件需要在Sermant agent中配置服务元数据(版本号、其它元数据),可参考Sermant-agent使用手册。微服务实例的标签信息在服务注册时会携带,路由筛选过程需利用已经配置好的标签。在同城高可用的情况下,标签里面需要携带数据中心的信息。

可以看到Semant agent存在以下特点:

  1. 非侵入性,无需修改业务代码即可使用。
  2. 适配主流的应用开发框架。
  3. 路由规则可以动态调整,只需要通过配置中心统一下发规则即可。

3. 总结

目前,随着应用上云的趋势,业务人员对于故障的认知发生了变化,从被动响应到主动引入故障,到认为故障就是常态,系统架构需要适应故障,因此对云上的业务高可用方案要求也随之提升,同城双活方案是目前用户采用比较多的容灾方案。在这个方案中,也对微服务应用之间的访问流量提出了相应要求,为了保证业务的就近访问能力,微服务之间的流量需要能做到优先本中心访问,对于故障情况也要求能做到流量自动切换到正常实例上。为了解决这个问题,考虑到Sermant非侵入,易部署以及多场景兼容等特点,华为云基于Sermant的标签路由能力实现了微服务流量的数据中心亲和性,助力同城双活方案的实际落地。


Sermant作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。

插件化知识详细分解及原理 之代理,hook,反射 上一篇我们说了Binder机制,通过aidl的demo和系统源码的对比进行了运行过程的分析,这一篇我们说代理模式及反射,之前说过了,只是为了梳理插件化需要了解的知识点,所以不会特别深的去讲解。代理模式:也叫做委托模式,分为静态代理和动态代理。代理模式也是平时比较常用的设计模式之一,代理模式有代码简洁,高扩展性的特性.主要目的就是为访问者提供一个代理,以达到限制某个对象的访问,也就是说想访问一个对象, 阅读详情

相关推荐

GBase 8a 高可用集群同城双活灾备方案

GBase 8a数据库集群支持主备模式的同城双活灾备方案,其原理为主集群承担应用,对数据进行批量操作(包括数据加载和数据加工),在主集群加工完数据之后,每天特定时间点将数据增量同步到同城双活的备集群当中。数据的同步过程基于自主研发的Rsync数据同步工具实现。同城双活的主备两个数据库集群间以表为单元进行增量同步。...

wangzhejijie的博客 2526

分布式系统架构设计:同城灾备、同城双活、两地三中心、异地多活等概念

具体的内容可以直接参考原文:搞懂异地多活,看这篇就够了 | Kaito's Blog 下面是一些核心的点梳理: 一、系统可用性 一个好的软件架构应该遵循以下 3 个原则:高性能、高可用、易扩展。 1、「高性能」意味着系统拥有更大流量的处理能力,更低的响应延迟。例如 1 秒可处理 10W 并发请求,接口响应时间 5 ms 等等。 2、「易扩展」表示系统在迭代新功能时,能以最小的代价去扩展,系统遇到流量压力时,可以在不改动代码的前提下,去扩容系统。 3、「高可用」这个概念,看起来很抽象,怎么理

rs勿忘初心的博客 1万+

【云原生技术】同城灾备、异地灾备、热备、冷备、双活、同城双活分别是什么?

【总结】同城灾备和异地灾备的根本区别在于地理位置:同城灾备适合低延迟、高同步要求的场景,但在遇到大范围灾害时风险较高;异地灾备则在防范区域性灾害上更有优势,但同步性和恢复速度可能稍差。热备和冷备的区别在于备用系统的实时性:热备始终在线、实时待命,恢复速度快但成本高;冷备则成本低、资源占用少,但故障恢复时人工或自动启动需求带来较长的RTO和可能的数据丢失。双活和同城双活都是主动提供冗余服务的方案:双活通常跨地域、跨数据中心部署,能够实现最优的负载均衡和灾难切换;

weixin_46453070的博客 1308

城市级别分布式系统架构设计演进(同城灾备、同城双活、两地三中心、异地双活、异地多活)

城市级别分布式系统架构设计演进(同城灾备、同城双活、两地三中心、异地双活、异地多活)

青衫烟雨客的专栏 3287

尝试使用CubeMX做stm32开发之九:SYS配置

参考《STM32中文参考手册_V10》,研究CubeMX中有关SYS的配置

Forster-C的博客 9420

openEuler Embedded新增软件包及在线安装软件方法

openEuler Embedded是基于Yocto构建的嵌入式操作系统,默认不包含dnf/apt软件包管理器,主要使用rpm格式。新增软件需通过manifest文件检查是否集成,未集成则需适配新配方。对于在线安装需求,可采用轻量级容器方案:通过isulad运行openEuler服务器版容器镜像,在容器内使用dnf命令安装软件(如Nginx),实现服务器生态兼容。部署前提包括设备支持、存储空间(≥10GB)和网络连接,需先安装并启动isulad服务。这种方法结合了嵌入式系统的轻量化特性和服务器系统的软件管理

专注嵌入式开发与 Linux 系统应用实战,分享芯片驱动、设备调试、系统工具开发干货。 1225

同城双活与异地多活架构分析

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/OjfFcjnGWV5kutxXndtpMg 作者:官网商城开发团队 采用高可用系统架构支持重要系统,为关键业务提供7x24的不间断服务,已经成为众多企业保障业务稳定、持续运转的主要选择。服务多活是高可用架构重要实施手段,本文介绍了一些业界常用的多活手段例如同城双活、两地三中心、异地多活架构设计方案并详述了各种方案的优缺点。 一、为什么要做多活 随着移动互联网的深入发展,用户增长达到一定规模后,.

vivo互联网技术 8659

【verilog语法详解:从入门到精通】

Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数(

m0_58476824的博客 4682

做容灾,双活、多活、同城、异地、多云,到底应该怎么选?

结论,可以直接拖到最后,如果看不明白,可以从头看起。冷备或者主备并不是一个理想的方案,而且绝大多数情况下,只能是一个心理安慰,真正发生故障的情况下,这样的容灾模式根本起不...

纯洁的微笑 1万+

NSGA(非支配排序遗传算法)

在多目标优化问题中,往往存在多个相互冲突的目标需要同时优化。传统的单目标优化算法无法直接应用于这类问题,因此需要专门的多目标优化算法。非支配排序遗传算法(Non-dominated Sorting Genetic Algorithm,NSGA)是一种经典的多目标优化算法,由印度科学家 Kalyanmoy Deb 等人于 1995 年提出。NSGA 通过非支配排序和拥挤度距离来引导种群向 Pareto 最优前沿进化,从而得到一组具有良好分布性和收敛性的 Pareto 最优解。

2970

gitlab远程子仓库配置SSH - 保姆级教程

在网上搜索了一些方法,但是不够详细,走了好多弯路,所以记录下配置SSH的详细过程吧。

是菠萝的博客 1万+

金融级容灾方案:同城双活 + 异地三中心部署详解

在高可用性成为金融核心业务系统“标配”的当下,同城双活与异地三中心容灾架构已逐步成为监管推荐与企业自建体系的关键路线。本篇文章以当前2025年金融行业主流架构实践为基础,系统拆解“双活+三中心”的核心组件、数据同步方式、容灾切换机制与技术选型逻辑。通过典型金融机构的真实落地案例,深入剖析跨区域部署、数据一致性控制、应用层无感切换、演练体系建设等难点,帮助构建具备业务连续性、监管合规性和工程可落地性的金融级容灾系统。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3431

1976国际标准大气_Matlab

输入高度,计算空气密度、气压、温度、声速 function [airDens,airPress,temp,soundSpeed]=Atmos(geomAlt) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 1976 U.S Standard Atmosphere Interpolation % % Note: Function does not extr.

JISANSAN的博客 1万+

服务运行时动态挂载JavaAgent和插件——Sermant热插拔能力解析

从1.2.0版本开始,Sermant实现了在服务不停机状态下进行安装和卸载的能力,为服务治理能力带来全新接入体验。本文将会对这种动态接入的机制,从技术基础到Sermant设计进行一次深入分析。

hwcloud_OS的博客 1055

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字 (Java/Py/C/C++/Js/Go)

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2127

【知识分享】IBIS 建模指南 04

文章详细阐述了将缓冲器数据转换为IBIS模型格式的核心步骤与规范要求。主要内容包括:1)IBIS文件三大结构(文件头信息、组件引脚映射、缓冲器行为描述)及其关键词定义;2)四种关键I-V表(上下拉、电源/地钳位)的数据处理规则,强调需避免重复计算效应;3)切换特性描述方法,指出V-T波形表优于Ramp数据的三大优势;4)差分缓冲器通过[DiffPin]关键词实现建模的特殊流程。文中特别强调数据外推校验、参考电压基准转换、工艺角数据排序等易错环节的处理技巧,为创建符合IBIS 4.0规范的精确模型提供指导。

一只豌豆象的博客 2051

同城异地灾备

序言     同城异地灾备,主要是用来进行备份容灾的,从而当一个数据中心挂了,另外一个数据中心经过切换之后,能让服务迅速的恢复。    同城双活,则是基于多机房的情况下,...

运维Linux和python 6148

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

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

Proxyless的多活流量和微服务治理

1. 引言1.1 项目的背景及意义在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如:服务间通信的复杂性:不同服务之间需要进行可靠的通信,处理失败重试、负载均衡等问题。故障的容错处理:系统的复杂性给与运维及故障处理带...

cnzzs的博客 415

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Beyond Istio OSS——Istio服务网格的现状与未来

作者:宋净超(Jimmy Song),原文地址:https://jimmysong.io/blog/beyond-istio-oss/本文根据笔者在 GIAC 深圳 2022 年大会上的的演讲《Beyond Istio OSS —— Istio 的现状及未来》[1]整理而成,演讲幻灯片见腾讯文档[2]。本文回顾了 Istio 开源近五年来的发展,并展望了 Isti...

ServiceMesher 902

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

探索无限可能:Proxyless-Spotify-Follow-Bot 技术解析与应用指南

探索无限可能:Proxyless-Spotify-Follow-Bot 技术解析与应用指南 项目简介 是一个开源的自动化工具,专门用于无代理地追踪和关注Spotify的艺术家、播放列表和播客。无需设置复杂的代理网络,你可以利用这个项目轻松扩大你的Spotify社交圈子,并跟踪喜爱的内容。 技术分析 该项目的核心是基于Python编程语言构建的,利用了spotipy库来与Spotify API进行交...

gitblog_00081的博客 399

MyBatis 插件原理与自定义插件-用代理模式我们就要解决几个问题

1) 有哪些对象允许被代理?有哪些方法可以被拦截? 我们应该了解MyBatis 允许哪些对象的哪些方法允许被拦截,并不是每一个运行的节点都是可以被修改的。只有清楚了这些对象的方法的作用,当我们自己编写插件的时候才知道从哪里去拦截。 在MyBatis 官网有答案,我们来看一下: http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins Executor 会拦截到CachingExcecutor 或者BaseExecutor。 因为创

Leon_Jinhai_Sun的博客 171

高可用解决方案:同城双活?异地双活?异地多活?怎么实现?

点击上方IT牧场,选择置顶或者星标技术干货每日送达后台服务可以划分为两类,有状态和无状态。高可用对于无状态的应用来说是比较简单的,无状态的应用,只需要通过F5或者任何代理的方式就可...

ITMuch的专栏 1768

什么是同城双活、异地双活、异地多活

有状态服务 后台服务可以划分为两类,有状态和无状态。高可用对于无状态的应用来说是比较简单的,无状态的应用,只需要通过F5或者任何代理的方式就可以很好的解决。后文描述的主要是针对有状态的服务进行分析。服务端进行状态维护主要是通过磁盘或内存进行保存,比如MySQL数据库,redis等内存数据库。除了这两种类型的维护方式,还有jvm的内存的状态维持,但jvm的状态生命周期通常很短。 高可用的一些解决方案 高可用,从发展来看,大致经过了这几个过程: 冷备 双机热备 同城双活 异地双活 异地多活 在聊异地多活的时

weixin_42029738的博客 5531

同城容灾、异地容灾、 双活 数据中心、 两地三中心的区别

常见的 容灾 模式可分为同城容灾、异地容灾、 双活 数据中心、 两地 三中心几种。 1、 同城 容灾 同城 容灾 是在同城或相近区域内 ( ≤ 200K M )建立两个数据中心 : 一个为数据中心,负责日常生产运行 ;&...

IDCzhan的博客 1万+

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 228

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 68
上一篇: openGemini v1.2.0版本正式发布,IoT 场景性能大幅提升!
下一篇: 华为云开源邀您共赴华为开发者大会2024,精彩议题抢先看
华为云开源
博客等级 码龄4年 281粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值