Hyperledger Fabric访问控制列表(ACL)
参考资料:
- 官方文档——访问控制列表(ACL)
文章目录
- 访问控制列表(ACL)是 What
- 资源
- 策略
- `Signature` 策略
- `ImplicitMeta` 策略
- 在哪里定义访问控制权限
- 如何在 `configtx.yaml`中格式化ACL
- 更新 `configtx.yaml`中的默认 ACL
- 从源码来看ACL
访问控制列表(ACL)是 What
之前写了很多文章一直没有介绍访问控制列表(以下统称为 ACL )这个东西,在 peer node start
命令源码很前面的地方就有 ACL 相关的代码。这是 Fabric 1.2 新增的一个特性,这篇文章就来分析分析 ACL 到底是什么。
Access Control Lists,访问控制列表,Fabirc 使用 ACL 通过关联一个策略来管理资源。这里介绍一下这两个关键概念
资源
Fabirc 的用户交互通过用户链码,系统链码,或者事件流来实现。因此,这些被视为应该在其上执行访问控制的资源。下面看下源码中设定的默认资源,文件在 core/aclmgmt/resources/resources.go
:
//fabric resources used for ACL checks. Note that some of the checks
//such as Lscc_INSTALL are "peer wide" (current access checks in peer are
//based on local MSP). These are not currently covered by resource or default
//ACLProviders
const (//Lscc resourcesLscc_Install = "lscc/Install"Lscc_Deploy = "lscc/Deploy"Lscc_Upgrade = "lscc/Upgrade"Lscc_ChaincodeExists = "lscc/ChaincodeExists"Lscc_GetDeploymentSpec = "lscc/GetDeploymentSpec"Lscc_GetChaincodeData = "lscc/GetChaincodeData"Lscc_GetInstantiatedChaincodes = "lscc/GetInstantiatedChaincodes"Lscc_GetInstalledChaincodes = "lscc/GetInstalledChaincodes"Lscc_GetCollectionsConfig = "lscc/GetCollectionsConfig"//Qscc resourcesQscc_GetChainInfo = "qscc/GetChainInfo"Qscc_GetBlockByNumber = "qscc/GetBlockByNumber"Qscc_GetBlockByHash = "qscc/GetBlockByHash"Qscc_GetTransactionByID = "qscc/GetTransactionByID"Qscc_GetBlockByTxID = "qscc/GetBlockByTxID"//Cscc resourcesCscc_JoinChain = "cscc/JoinChain"Cscc_GetConfigBlock = "cscc/GetConfigBlock"Cscc_GetChannels = "cscc/GetChannels"Cscc_GetConfigTree = "cscc/GetConfigTree"Cscc_SimulateConfigTreeUpdate = "cscc/SimulateConfigTreeUpdate"//Peer resourcesPeer_Propose = "peer/Propose"Peer_ChaincodeToChaincode = "peer/ChaincodeToChaincode"//EventsEvent_Block = "event/Block"Event_FilteredBlock = "event/FilteredBlock"//Token resourcesToken_Issue = "token/Issue"Token_Transfer = "token/Transfer"Token_List = "token/List"
)
这里资源的命名规范是 <component>/<resource>
,例如cscc/GetConfigBlock
是 CSCC
组件中调用的 GetConfigBlock
的资源
策略
策略是 Fabric 运行的基础,因为它们允许根据与完成请求所需资源相关联的策略来检查与请求关联的身份(或身份集)。背书策略用来决定一个交易是否被合适地背书。通道配置中定义的策略被引用为修改策略以及访问控制,并且在通道配置本身中定义。
策略可以采用以下两种方式之一进行构造
Signature
策略ImplicitMeta
策略
Signature
策略
这些策略标示了要满足策略而必须签名的用户。例如:
Policies:MyPolicy:Type: SignatureRule: "Org1.Peer OR Org2.Peer"
上述策略可以被这么解释:一个名为 MyPolicy
的策略,其类型为 Signature
,它的签名规则是只有被 Org1 的 peer 节点或者是 Org2 的 peer 节点签名才可以通过
签名策略支持 AND
, OR
和 NOutOf
的任意组合,能够构造强大的规则。
ImplicitMeta
策略
ImplicitMeta
策略聚合配置层次结构中更深层次的策略结果,这些策略最终由签名策略定义。他们支持默认规则,比如“组织中大多数管理员”。这些策略使用的语法和 Signature
策略不同但是依旧很简单: <ALL|ANY|MAJORITY> <sub_policy>
。
比如: ANY
Readers
或者 MAJORITY
Admins
。
这是一个 ImplicitMeta
策略结构的例子:
Policies:AnotherPolicy:Type: ImplicitMetaRule: "MAJORITY Admins"
上述策略可以被这么解释:一个名为 AnotherPolicy
的策略,其类型为 ImplicitMeta
,它的规则是可以通过大多数管理员同意的方式来满足。
这种配置中默认有以下三种角色:
- Admins ,具有管理权限,可以访问资源的策略往往是针对网络的敏感操作方面(例如在通道上实例化链码)
- Writers,可以提交账本更新,比如一个交易,但是不能拥有管理权限
- Readers,可以访问信息,但是不可以提交账本更新,也没有管理权限
在哪里定义访问控制权限
在 configtx.yaml
文件中定义 ACL,这个文件用来编译通道配置。
ACL 可以通过两种方式来更新:
- 编辑
configtx.yaml
文件自身,这样之后使用这个文件生成通道配置的通道都会更新更改过的 ACL - 通过特定通道的通道配置来更新访问控制
如何在 configtx.yaml
中格式化ACL
ACL 被格式化为一个键值对:resource:policy
# ACL policy for invoking chaincodes on peer
peer/Propose: /Channel/Application/Writers# ACL policy for sending block events
event/Block: /Channel/Application/Readers
其中策略被定义成为一个路径的形式,例如上面例子中的策略,可以在 configtx.yaml
中根据路径去找到:
Application: &ApplicationDefaults# Policies defines the set of policies at this level of the config tree# For Application policies, their canonical path is# /Channel/Application/<PolicyName>Policies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"
更新 configtx.yaml
中的默认 ACL
假如想修改 peer/Propose
的策略,可以直接修改它后面策略内容,我们也可以自定义一个策略 MyPolicy
Application: &ApplicationDefaultsPolicies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"MyPolicy:Type: SignatureRule: "OR('SampleOrg.admin')"
然后修改
# ACL policy for invoking chaincodes on peer
peer/Propose: /Channel/Application/MyPolicy
从源码来看ACL
看下 peer node start
命令启动时候的内容,peer/node/start.go
:
func serve(args []string) error {//....//startup aclmgmt with default ACL providers (resource based and default 1.0 policies based).//Users can pass in their own ACLProvider to RegisterACLProvider (currently unit tests do this)aclProvider := aclmgmt.NewACLProvider(aclmgmt.ResourceGetter(peer.GetStableChannelConfig),)//....
}
可以看到 aclmgmt.NewACLProvider 函数创建了 ACL 的 Provider,它的参数 peer.GetStableChannelConfig 最后被转成了一个 aclmgmt.ResourceGetter ,看下这个是什么东西
//resource getter gets channelconfig.Resources given channel ID
type ResourceGetter func(channelID string) channelconfig.Resources// GetStableChannelConfig returns the stable channel configuration of the chain with channel ID.
// Note that this call returns nil if chain cid has not been created.
func GetStableChannelConfig(cid string) channelconfig.Resources {chains.RLock()defer chains.RUnlock()if c, ok := chains.list[cid]; ok {return c.cs.bundleSource.StableBundle()}return nil
}
ResourceGetter 顾名思义,资源获取者,从注释可以看出该函数就是从给定的通道ID中获取通道配置中的资源的。
//ACLProvider consists of two providers, supplied one and a default one (1.0 ACL management
//using ChannelReaders and ChannelWriters). If supplied provider is nil, a resource based
//ACL provider is created.
func NewACLProvider(rg ResourceGetter) ACLProvider {return &aclMgmtImpl{rescfgProvider: newResourceProvider(rg, NewDefaultACLProvider()),}
}//create a new resourceProvider
func newResourceProvider(rg ResourceGetter, defprov ACLProvider) *resourceProvider {return &resourceProvider{rg, defprov}
}//resource provider that uses the resource configuration information to provide ACL support
type resourceProvider struct {//resource getterresGetter ResourceGetter//default provider to be used for undefined resourcesdefaultProvider ACLProvider
}
NewACLProvider 有一个成员 rescfgProvider,它是一个 resourceProvider 类型,可以通过传递的参数看到,一个是从配置中获取的资源,另一个是默认的ACLProvider,默认的ACLProvider 是用来给未定义的资源设置策略的,我们来看下 NewDefaultACLProvider 函数中做了什么
const (CHANNELREADERS = policies.ChannelApplicationReadersCHANNELWRITERS = policies.ChannelApplicationWriters
)type defaultACLProvider struct {policyChecker policy.PolicyChecker//peer wide policy (currently not used)pResourcePolicyMap map[string]string//channel specific policycResourcePolicyMap map[string]string
}func NewDefaultACLProvider() ACLProvider {d := &defaultACLProvider{}d.initialize()return d
}func (d *defaultACLProvider) initialize() {d.policyChecker = policy.NewPolicyChecker(peer.NewChannelPolicyManagerGetter(),mgmt.GetLocalMSP(),mgmt.NewLocalMSPPrincipalGetter(),)d.pResourcePolicyMap = make(map[string]string)d.cResourcePolicyMap = make(map[string]string)//-------------- LSCC --------------//p resources (implemented by the chaincode currently)d.pResourcePolicyMap[resources.Lscc_Install] = ""d.pResourcePolicyMap[resources.Lscc_GetInstalledChaincodes] = ""//c resourcesd.cResourcePolicyMap[resources.Lscc_Deploy] = "" //ACL check covered by PROPOSALd.cResourcePolicyMap[resources.Lscc_Upgrade] = "" //ACL check covered by PROPOSALd.cResourcePolicyMap[resources.Lscc_ChaincodeExists] = CHANNELREADERSd.cResourcePolicyMap[resources.Lscc_GetDeploymentSpec] = CHANNELREADERSd.cResourcePolicyMap[resources.Lscc_GetChaincodeData] = CHANNELREADERSd.cResourcePolicyMap[resources.Lscc_GetInstantiatedChaincodes] = CHANNELREADERSd.cResourcePolicyMap[resources.Lscc_GetCollectionsConfig] = CHANNELREADERS//-------------- QSCC --------------//p resources (none)//c resourcesd.cResourcePolicyMap[resources.Qscc_GetChainInfo] = CHANNELREADERSd.cResourcePolicyMap[resources.Qscc_GetBlockByNumber] = CHANNELREADERSd.cResourcePolicyMap[resources.Qscc_GetBlockByHash] = CHANNELREADERSd.cResourcePolicyMap[resources.Qscc_GetTransactionByID] = CHANNELREADERSd.cResourcePolicyMap[resources.Qscc_GetBlockByTxID] = CHANNELREADERS//--------------- CSCC resources -----------//p resources (implemented by the chaincode currently)d.pResourcePolicyMap[resources.Cscc_JoinChain] = ""d.pResourcePolicyMap[resources.Cscc_GetChannels] = ""//c resourcesd.cResourcePolicyMap[resources.Cscc_GetConfigBlock] = CHANNELREADERSd.cResourcePolicyMap[resources.Cscc_GetConfigTree] = CHANNELREADERSd.cResourcePolicyMap[resources.Cscc_SimulateConfigTreeUpdate] = CHANNELWRITERS//---------------- non-scc resources ------------//Peer resourcesd.cResourcePolicyMap[resources.Peer_Propose] = CHANNELWRITERSd.cResourcePolicyMap[resources.Peer_ChaincodeToChaincode] = CHANNELWRITERSd.cResourcePolicyMap[resources.Token_Issue] = CHANNELWRITERSd.cResourcePolicyMap[resources.Token_Transfer] = CHANNELWRITERSd.cResourcePolicyMap[resources.Token_List] = CHANNELREADERS//Event resourcesd.cResourcePolicyMap[resources.Event_Block] = CHANNELREADERSd.cResourcePolicyMap[resources.Event_FilteredBlock] = CHANNELREADERS
}
它内部有两个 map 变量,可以理解为 ACL 的 resource:policy
这样的形式,根据注释当前这个 pResourcePolicyMap 是还没有用到的(1.4版本),可以看到 initialize 函数中 pResourcePolicyMap 设置的资源的 value 都是空字符串,而 cResourcePolicyMap 即通道资源的策略,它设置了一堆默认的 ACL。资源部分我在文章开始就放出来看过了,而策略部分主要就是两种策略(CHANNELREADERS 是 ChannelApplicationReaders 的一个别名):
- ChannelApplicationReaders,即配置文件中格式化的
/Channel/Application/Readers
- ChannelApplicationWriters,即配置文件中格式化的
/Channel/Application/Writers
ACLProvider 提供了一个 CheckACL 函数,CheckACL 使用 idinfo 在ACL中检查通道资源。 idinfo 是诸如SignedProposal之类的对象,可以从中提取 id进行策略测试
//CheckACL checks the ACL for the resource for the channel using the
//idinfo. idinfo is an object such as SignedProposal from which an
//id can be extracted for testing against a policy
func (am *aclMgmtImpl) CheckACL(resName string, channelID string, idinfo interface{}) error {//use the resource based config provider (which will in turn default to 1.0 provider)return am.rescfgProvider.CheckACL(resName, channelID, idinfo)
}//CheckACL implements the ACL
func (rp *resourceProvider) CheckACL(resName string, channelID string, idinfo interface{}) error {resCfg := rp.resGetter(channelID)if resCfg != nil {// 先在通道配置中定义的 ACL 中找pp := &aclmgmtPolicyProviderImpl{&policyEvaluatorImpl{resCfg}}policyName := pp.GetPolicyName(resName)if policyName != "" {aclLogger.Debugf("acl policy %s found in config for resource %s", policyName, resName)return pp.CheckACL(policyName, idinfo)}aclLogger.Debugf("acl policy not found in config for resource %s", resName)}// 再在默认的 ACL 中找return rp.defaultProvider.CheckACL(resName, channelID, idinfo)
}
很简单,分两步,第一步先在通道配置中定义的 ACL 中找是否符合,如果CheckOK,则直接返回,如果CheckErr,则再在默认的 ACL 中去找。
因此根据这种规则,假设一个资源对应的策略在通道配置中和默认的 ACL 中都配置了,那么就会去 Check 通道配置中的 ACL(因为通道配置中的先 Check)
看下默认 ACL 的 CheckACL 是怎么做的
//CheckACL provides default (v 1.0) behavior by mapping resources to their ACL for a channel
func (d *defaultACLProvider) CheckACL(resName string, channelID string, idinfo interface{}) error {policy := d.defaultPolicy(resName, true)if policy == "" {aclLogger.Errorf("Unmapped policy for %s", resName)return fmt.Errorf("Unmapped policy for %s", resName)}switch typedData := idinfo.(type) {case *pb.SignedProposal:return d.policyChecker.CheckPolicy(channelID, policy, typedData)case *common.Envelope:sd, err := typedData.AsSignedData()if err != nil {return err}return d.policyChecker.CheckPolicyBySignedData(channelID, policy, sd)case []*common.SignedData:return d.policyChecker.CheckPolicyBySignedData(channelID, policy, typedData)default:aclLogger.Errorf("Unmapped id on checkACL %s", resName)return fmt.Errorf("Unknown id on checkACL %s", resName)}
}
它主要对 idInfo 做了一下几种类型判断
- pb.SignedProposal,签名提案
- common.Envelope,交易类型
- common.SignedData,签名数据
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 如何同时使用外网码云和内网Gitlab
刚到新公司要用gitlab,我个人代码一直放在码云上。我在外包银行主场开发,银行内网用的gitlab,我平时用码云。今天在开发自己的小程序时,推送代码一直报错,百度之后,是使用了gitlab的原因,导致本地不能和码云建立连接。现在要为不同的平台匹配不同的公钥。第一、删除git上的…...
2024/4/20 2:50:15 - Spring容器刷新 refresh
流程容器刷新前准备创建BeanFactory初始化BeanFactory执行BeanFactoryPostProcessor的postProcessBeanFactory方法注册BeanPostProcessor初始化MessageSource国际化消息初始化事件传播器其它初始化注册监听器实例化非延迟单例bean完成刷新发布刷新事件结束代码@Overridepublic …...
2024/4/15 4:34:03 - 过去一年,这2.4万程序员是如何使用Python的?
Python编程语言近年来势头很猛,是TOBIE编程语言榜单前三的常客,并不断冲击Java和C的领先位置。 近日,Python软件基金会(PSF)与Jetbrains联合发布了《2019年Python开发人员调查》,这份覆盖150多个国家,2.4万开发者和程序员的调查,有助于我们了解Python未来的现状和未来发…...
2024/5/2 10:04:08 - 加密视频翻录
.ev 如果你手上买了一份有知识版权的exe、ev4.ev5加密视频,这份/套视频,可能几十或者几百或者几千块,且这份视频对你的价值非常大。可是,这加密的视频,只能在指定的电脑上播放,或者在指定的电脑上指定的有效期内播放。可是,你想把它在你的其他电脑、笔记本、或者手机上播…...
2024/4/17 20:30:32 - 【以太坊成功】以太坊的成功措施到位还是摇摇欲坠?
以太坊的女王是两个主要的加密货币,但是就以太坊而言,成功还不是很清楚。从技术角度来看,很明显,以太坊的汇率走势最近很平淡,并且购买者正努力收集一些持久的上升趋势,因为加密货币密切跟踪比特币的汇率走势。 根据信息指标,在当前加密货币低迷的整个过程中,金融家都在…...
2024/4/15 4:34:01 - 嵌入式实时Java VM支持Java 6 Standard Edition
JamaicaVM 6是唯一用于支持Java 6语言和标准API的实时应用程序的Java VM。 JamaicaVM的实时垃圾收集器将为嵌入式开发系统带来安全性,确定性和硬实时性能。 JamaicaVM 6改进了图形性能,并扩展了受支持的平台数量,现在无论有无X-Server,都支持QNX和Linux平台上的图形。总共支…...
2024/4/18 1:03:11 - 32个Python爬虫项目让你一次吃到撑
今天为大家整理了32个Python爬虫项目。 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心。所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)OWechatSogou [1]- 微信公众号爬虫。基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果…...
2024/4/15 4:33:59 - 1周上线系统,效率提升100%,宜搭助力阿里巴巴法务数字化升级
简介: 新系统借助“宜搭”平台,打破了原先的数据孤岛,把业务人员从大量简单、繁琐的法务工作中释放了出来,实现了集团知识产权的全生命周期管理。据统计,系统上线7天即实现上万数据入库,累计承载数十万权利数据的管理和运营。程序员小王正坐在电脑前写代码,屏幕跳出一条…...
2024/4/24 12:28:41 - 数据科学何以成为第二个MBA?
全文共2686字,预计学习时长9分钟图源:unsplash风口轮流转,如今,正当红的就是数据科学领域,很多人都希望能进入这一领域。一些新闻媒体把数据科学描述得十分有吸引力,各种学术机构都承诺在短短几个月内即可培训出数据科学家,这下你已有了通向灾难的秘诀。作为数据科学家,…...
2024/4/27 10:17:09 - Latex排版工具入门
目录--- 1. 安装- 1.1 基础概念- 1.1.1 Tex- 1.1.2 Texlive- 1.1.3 编辑器- 1.2 安装- 2 语法入门- 2.1 Hello World与基础概念- 2.2 基本排版- 2.3 宏包的使用- 2.3.1 公式- 2.3.2 图片- 3. 语法- 3.1 公式- 3.3 浮动块,自动编号,引用- 3.4 页面设置概要这是一份Latex快速入…...
2024/4/24 12:28:39 - 工业软件将爆发,新基建黑科技公司是哪家?
*本文转载自中国工业网前不久,工信部在谈到数字基础设施建设时表示,工信部将实施国家重大软件工程,特别是着力推动工业技术的软件化。国务院同期发布《关于推动工业互联网加快发展》的通知,并指出:提升工业互联网平台核心能力,引导平台增强5G、人工智能、区块链、增强现实…...
2024/4/24 12:28:42 - 什么是代理IP? 代理IP有哪些作用?
随着互联网的普及与高速发展,互联网工作者对于网络的需求也越来越大,例如网络推广营销、数据采集爬取、游戏测试、数据分析等等,都需要使用IP代理。但是相对应的网络安全问题也随之而来。网络诈骗、信息泄露、病毒传播等事件屡见不鲜。网民们如何在网络中保护自己?最简单有…...
2024/4/24 12:28:40 - C#中抽象类的使用和示例
C#中 抽象类 的使用和示例 今天学校在上Java课程时讲到使用abstract(抽象的)修饰符来修饰类使之成为抽象类,于是想到最近在学习c#,虽然说没讲到这块,但是既然Java老师给我提了一个醒,我不在C#这块拓展一下就感觉好像很对不起我们的老师,所以就在网上查阅了相关的资料文献…...
2024/4/24 12:28:36 - Swoft之服务注册发现Consul服务器配置
Consul服务器配置 微服务带来最大的好处就是把整个大项目分割成不同的服务,运行在不同服务器上,实现解耦和分布式处理。微服务虽然有很多好处,但是也会有不好的一方面。任何事物都会有两面性,在微服务里面运维会是一个很大的难题,如果有一天我们的服务数量非常的多,然后我…...
2024/4/24 12:28:35 - 互联网公司无线准入哪里有
互联网公司无线准入哪里有时讯无线。方案应对的互联网公司无线宽带接入,满足了此方案的实用性、安全性、经济性、可扩展性、可管理性。拥有极高的稳定性,适合724不间断应用和大量客户端接入应用。无线网络无需布线,安装简单,接入方便。内部人员和顾客可以随时随地使用网络。…...
2024/4/24 12:28:37 - 阿里三面java岗!这套JVM面试题及答案整理,很值得一看
前言 最近的加班好严重啊,阿博感觉身体都快被掏空了… 加上腰痛到不行,弯腰也痛,睡觉都只能趴着睡! 上周末去看了医生,医生说:年纪轻轻的怎么腰就这么差了,平时“操劳过度”了吧,年轻人多注意休息啊,少“操劳”一些,吃的要清淡,多搞点补气补肾的东西,养个把月就…...
2024/4/24 12:28:36 - 深圳入职两周的感想——防止入坑
开始 孤独的王二来到深圳这个城市已经快一个月了,入职了一家主要做OA系统(EKP)的公司。在此分享一些我的感想和一些面试一定会遇到的坑吧! (我是2020届专科毕业生,所以遇到的问题也比较多) 面试时 当我默默投了几百份简历后,收到了几家公司的面试邀请时,我开怀大笑,凭…...
2024/4/24 12:28:32 - UDP - 不分包,若长度超过1500怎么办
# UDP协议不分包 。但IP层的最大payload长度为1472Bytes。若UDP信息超过这个数值,该如何处理呢?UDP层 不拆分包,但IP层拆分包。若UDP报文长度,超过1472字节,则发送方的IP层,会将报文拆分成多个IP报文;接收方的IP层,会将报文进行重组。在链路层,由以太网的物理特性决定…...
2024/4/24 12:28:34 - Webpack处理类型资源——开发版(四)(最详细无图片版)
npm install --save-dev webpack npm install --save-dev webpack-cli 本地安装webpack 、webpack-cli``` --save-dev === -D package.json配置: "start": "npx webpack-dev-server" "build": "webpack --config webpack.config.js"安…...
2024/4/24 12:28:30 - java中级学习路线(二)
线程和进程区别: 进程:每一个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,一个进程包括1–n个线程。 线程:同一类线程共享代码和数据空间,每一个线程有独立的执行栈和成熟计数器,线程切换开销小。 线程和进程一样分为五个阶段:创建、就绪、执行、堵塞、终…...
2024/4/24 12:28:29
最新文章
- Linux生产者,消费者模型
Linux生产者消费者模型 Linux生产者消费者模型是一个用于解决生产者和消费者之间强耦合问题的设计模式。这个模型通过引入一个容器(通常是一个阻塞队列)来作为生产者和消费者之间的通信桥梁。 在这个模型中,生产者和消费者彼此之间不直接通…...
2024/5/2 17:06:21 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 深入浅出 -- 系统架构之微服务中Nacos的部署
前面我们提到过,在微服务架构中,Nacos注册中心属于核心组件,通常我们会采用高性能独立服务器进行部署,下面我们一起来看看Nacos部署过程: 1、环境准备 因为Nacos是支持windows和Linux系统的,且服务器操作…...
2024/5/1 13:05:05 - AI小程序的创业方向:深度思考与逻辑引领
随着人工智能技术的快速发展,AI小程序逐渐成为创业的新热点。在这个充满机遇与挑战的时代,我们有必要深入探讨AI小程序的创业方向,以把握未来的发展趋势。 一、目标市场定位 首先,我们要明确目标市场。针对不同的用户需求&#x…...
2024/4/30 2:38:07 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/2 9:28:15 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57