首页 文章 精选 留言 我的

精选列表

搜索[构建目录],共10000篇文章
优秀的个人博客,低调大师

构建多云战略的注意事项

企业实施多云战略与决定是否采用多云战略一样困难,因此在决定采用多云时必须仔细考虑,然后需要仔细规划和完美执行才能实现其目标。 人们不要将多云策略与使用多云混淆。前者的目的是将应用程序和服务部署在多个云平台中。多云战略的共同点是需要一个网络在两个位置之间路由。 另一方面,对于多个云平台的使用,企业仍然需要做出谨慎的决定,但它们与部署到多个云平台环境的关系不大,与云服务提供商选择有关。使用多个云平台在基础组件的布局方式上存在显著差异。 以下了解企业选择多云战略的原因: (1)利用云服务提供商的优势 每个云服务提供商的服务都有自己的不同优势。例如AWS公司擅长IaaS,谷歌云擅长数据处理,Azure擅长交付企业应用程序和服务。仔细比较云服务提供商之间的异同可以构成一个矩阵,并根据应用需求驱动选择。 (2)成本 成本并不是企业选择多云策略的最主要原因,因为节省成本通常会在极高的容量下发挥作用。如果成本是企业选择多云战略的主要驱动因素,那么考虑通过稳固和开放的关系来管理其云平台。随着每个云服务提供商降低价格以吸引最具成本意识的云计算消费者,云计算市场的价格战仍在持续。 (3)业务连续性 一些应用程序和服务非常重要,以至于设计包括在两个独立的云计算提供商之间分发功能,以消除采用单一云计算提供商的服务可能面临的锁定问题。在这些情况下,在实施多云战略之前必须解决重要的应用程序和服务设计注意事项。 (4)停机中断 虽然非常罕见,但云服务中断事件可能发生并且将再次发生。采用多云战略以免受中断的影响是大多数关键任务应用程序的要求。 (5)注意事项 一旦企业决定采用多云,需要了解一些注意事项帮助其解决此类工作的潜在陷阱。 (6)网络连接 当使用多个云平台进行应用和服务分发时,无论使用多个云平台背后的意图如何,云平台之间必须连接。某些云服务和数据存储可以通过互联网安全访问,而许多内部应用程序和服务需要组件之间和云服务提供商之间的可路由连接。 在设计多云网络连接时,需要考虑哪些应用程序和服务需要组件之间的可路由连接。由于全球网络设计的复杂性,需要引入IPAM解决方案。 (7)安全集成 与企业安全系统和策略的集成从来都不是一个简单的考虑。安全集成有两种形式:云计算访问授权和保护部署应用程序和服务的环境。通过诸如Okta之类的SSO解决方案进行的IAM集成是解决云计算用户访问的常见设计模式。此外,保护云服务提供商环境包括扫描工具、日志聚合和威胁防护代理。这些考虑必须在设计过程的早期解决。 (8)跨越多平台 在业务需求和技术设计的驱动下,确定必须跨多个云平台部署的应用程序和服务,并通过脚本和模板(例如Terraform、配置管理等)实现自动配置和管理。 (9)技能 企业采用多云必须解决技能组合问题,以确保云计算用户在多云环境中成功采用云服务。几乎所有云服务提供商都提供在线或现场的培训,可以用于加快员工的技能培训。 下一步将如何发展? 完成每个大型任务都必须从某个地方开始,而 “某个地方”就是下一步发展。研究发现,当使用以下起点(无特定顺序)时,企业的客户可以实现可靠的策略来执行。 (1)确定需求 确保企业确切地知道每个云服务提供商提供的服务。记录技术和业务需求,并为每个云服务提供商评分。需要记住,原始分数并没有确定企业将采用哪些云服务提供商的云服务以及用于什么目的。多云解决方案的设计必须考虑到业务需求,以便推导出使用模式。开发决策树,以便将来更轻松地选择云服务提供商。企业还需要确定哪些云服务提供商满足解决哪些需求。 (2)云计算支出管理 投资于云计算支出的可见性是确保有效使用云计算基础设施和服务的最关键组成部分之一。投资云服务费用管理(CSEM)解决方案,以便可以收集云计算支出用于实时和历史目的。 (3)设计基础 制定全球网络战略。如果企业的环境100%基于云计算,则使用虚拟网络解决方案的云平台之间的简单连接就足够了。更复杂的解决方案可能会推动企业数据中心和每个云计算提供商之间建立专用连接的需求。 制定监控和日志聚合策略。鉴于大型消费者和企业应用程序和服务提供商的最高优先级之一,监控就是整个环境的眼睛和耳朵,必须广泛覆盖每个云服务提供商以及通过环境部署的每个应用程序或服务。 (4)治理 尽管并不显著,但治理能够在原本杂乱无章的环境中实现一致性和秩序。在不施加繁琐流程的情况下,企业的审查委员会将最大的利益相关者汇集在一起,对每个应用程序和服务设计假设和考虑因素进行综合审查。该审查委员会必须由来自各个专业领域(例如工程、制造、安全、运营等)的代表组成。 (5)培训 并非每个管理员都会了解每种云平台。传统上,操作员和管理员专注于单个云平台。准备好提供培训和教育,以便云计算管理员可以提高他们的技能并管理多云环境。 (6)自动化 对于任何云计算部署,这一点需要重点强调:自动化可以做到的一切。随着基础设施即代码(IAC)运动的全面展开,越来越多的工具可用于自动化每个部署。为缺失的组件编写脚本是完善自动化应用的好方法。 (7)计划 每一个良好的实施都有一个良好的计划。急于实施多云战略将导致效率低下、返工,并且在某些情况下会完全替换已执行的工作。企业设定切合实际的目标和时间表,发布业务的进度以供同事和项目之间进行协调。 结论 实施多云战略并非易事。这包括从走上多云之旅的决定,从定义需求,到奠定基础,再到识别应用程序和服务,并将其部署到多云环境中。 需要记住的是,详细的需求收集将为企业走上多云之旅提供指导。

优秀的个人博客,低调大师

递推的思维构建与技巧实现

递推是一种用若干步可重复运算来解决复杂问题的方法。 1.一维递推 1.1 问题描述 有一个n层的楼梯,每次只可以向上爬1层或者2层,问爬完n层共有多少种不同的方式呢? 1.2 分析 设f(n)表示n层楼总共不同的方式。 假设此时位于第i层,因为每次只能爬1层或2层,所以到第i层只有2种方式。 从第i-1层爬上来。 从第i-2层爬上来。 所以得到递推公式为f(n)=f(n-1)+f(n-2)。前2项之和等于第3项,其实就是斐波那契数列,1,1,2,3,5,8,13,21... 1.3 代码实现 f[0]=1;f[1]=1; for(inti=2;i<n;i++){ f[i]=f[i-1]+f[i-2] } cout<<f[n-1]<<endl; 1.4 空间优化 每一步的递推只与前2步有关,所以只需要记录前2步的方案数,用滚动数组,而不需要开O(n)的空间。手动赋值 intf[3]; f[0]=1; f[1]=1; for(inti=2;i<10;++i){ f[2]=f[1]+f[0]; f[0]=f[1]; f[1]=f[2]; cout<<f[2]<<endl; } 取模滚动 intf[3]; f[0]=1; f[1]=1; for(inti=2;i<10;++i){ f[i%3]=f[(i-1)%3]+f[(i-2)%3]; cout<<f[i%3]<<endl; } 如果只与前一个状态有关,比如f[n]=f[n-1]+1,可以用0,1滚动,这个在动态规划中会比较常用。 intf[2],t=0; f[0]=1; for(inti=2;i<10;++i){ t=1-t; f[t]=f[1-t]+1; cout<<f[t]<<endl; } 递推和动态规划最大的区别:递推的每一步是所有方案数的加和,而动态规划在每一步递推中,需要用来选取一个最优策略。本质其实都是通过重复的小规模子问题推导出大规模的结果。 1.5 时间优化 斐波那契数列递推公式很简单,但数据很大时,效率就比较低,因为递推是O(n)复杂度。 通过矩阵公式变换可将加法变为乘法 如下将递推公式放入矩阵: 假设:则: 可以通过矩阵幂乘快速求出,时间复杂度为,再带入上式即可获得数列值。 具体可以看另一篇递推优化-矩阵幂乘 2.多维递推 2.1 问题描述 从原点出发,每次只能向东,向北,向西走,且不能走已经走过的地方,问走n步共有多少种不同的方式呢? 2.2 分析 假设已经走到第i步,因为不能走已经走过的地方,那这一步能走的方式只会与上一步有关。因为每次走一步,要保证不走回头路,就保证不走上一步走过的地方就行了。 每次有3个选择,即向东,向北,向西。 第i-1步向东走,那么第步只能向北、向东。 第i-1步向西走,那么第步只能向北、向西。 第i-1步向北走,那么第步可以向北、向东,向西。 一维的f[n]只能记录一个总数,而不能记录状态,所以要再多一维记录上一步走的状态。 设f[n][0], f[n][1], f[n][2]分别表示:第步向东、向西、向北走总共不同的方式。 则有如下递推关系: f[n][0] = f[n - 1][0] + f[n - 1][2]; f[n][1] = f[n - 1][1] + f[n - 1][2]; f[n][2] = f[n - 1][0] + f[n - 1][1] + f[n - 1][2]; 2.3 代码实现 intf[100][3]={0}; f[0][0]=1; f[0][1]=1; f[0][2]=1; for(inti=1;i<n;++i){ f[i][0]=f[i-1][0]+f[i-1][2]; f[i][1]=f[i-1][1]+f[i-1][2]; f[i][2]=f[i-1][0]+f[i-1][1]+f[i-1][2]; } cout<<f[n-1][0]+f[n-1][1]+f[n-1][2]<<endl; 2.4 进一步优化 设第n步的总方案数为s[n], s[n]=f[n][0]+f[n][1]+f[n][2]。 s[n]=2f[n-1][0]+2f[n-1][1]+3f[n-1][2]。 s[n]=2s[n-1]+f[n-1][2]。 而f[n-1][2]=f[n-2][0]+f[n-2][1]+f[n-2][2]=s[n-2]。 得s[n]=2s[n-1]+s[n-2]。 所以对公式变形,也可以通过一维的方式完成递推,但这个关系无法直接通过建模构造出来。 3.图递推 3.1 问题描述 在一个的二维地图中,一个人从左上角走到右下角,每次只能向右或者向下走,问到终点共有多少种不同的方式呢? 3.2 分析 假设已经位于某个位置,因为只能向右或者向下走,那上一步只能从上或者从左走过来。 设f[i][j]表示走到坐标总共的方案数。 则f[i][j]=f[i-1][j]+f[i][j-]。 3.3 代码实现 intf[10][10]={0}; f[0][0]=1; for(inti=0;i<n;++i){ for(intj=0;j<m;++j){ if(i-1>=0){ f[i][j]+=f[i-1][j]; } if(j-1>=0){ f[i][j]+=f[i][j-1]; } } } 3.4 进一步思考 要到达终点,一定要向下走n-1步,向右走m-1步。 把每一步组合在一起来看,其实问题就等价于在n+m-2步中选择n-1步向下走,或者选择m-1步向右走,通过排列组合公式就可以直接得到结果。 4.状态压缩递推 4.1 问题描述 在一个的棋盘中放置棋子,有一些地方不能放置。要求放置棋子时任意2个棋子不能在同1行或同1列,问放置k个棋子有多少种不同的方式呢? 4.2 分析 对于每1个位置,只会有2种情况,就是放或不放。在数据规模不大的情况下可以用DFS(深度优先搜索)枚举所有的情况就可以了。 那有没有更好的方法呢? 这个最终是要求方案总数,而不需要考虑每一步是否需要择优,所以是符合递推模型,接下来就是怎么找出递推关系。 先分析一些隐含的规律,把问题理得更清晰: 每1行或者每1列都只能放置1个棋子,所以按每一行来枚举放置方法。 在尝试第i行时,每一个位置(i,j)能不能放置,不只是跟上一行有关,而是跟之前的所有行都有关。这就说明需要记录之前放置的方法,也就是状态。 那怎么记录之前放置的方案状态呢,这就要用到状态压缩。状态压缩:本质就是用二进制记录对应位置的2种状态,0表示不放,1表示放。 对于n个位置,就可以用个十进制数来表示所有放置的方案。 继续回到上面的问题,在尝试第i行时,能否放置跟之前的i-1行都有关,意味着需要记录之前所有行放置的状态。 但看下面2种情况,图1和图2对于在尝试放置第3行时,其实是等价的,前2列都是不能放置。也就是说这2种方案数是可以直接合并的,因为每1列也只能放一个,所以放置的方案状态也可以直接合并成一行。 用f[i][j]表示前i行,放置方案为j总共的方案数。 第0行的过程如下: 第1行的过程如下: 如此递推求出n行,种放置方案的总数,。因为只能放置k个棋子,所以在种放置方案中找出刚好是k个棋子的方案,也就是对应的状态j转化为二进制时,有k个1。 4.3 二进制包含1的个数 目标数n,通过n&(n-1)运算,包含多少个1就刚好进行多少次该运算,可以快速求出1的个数。 4.4 代码实现 计算数n中包含1的个数 intcountOne(intn){ inttotal=0; while(n>0){ total++; n&=n-1; } returntotal; } 变量定义及初始化 inti,n,k,line[8],f[2][256],num[256]; for(i=0;i<256;++i)num[i]=countOne(i); memset(f,0,2*256*4); f[0][0]=1; intj,c,now=0; //棋盘读入 for(i=0;i<n;++i){ intt=0; for(intj=0;j<n;++j){ t<<=1; cin>>ch; if(ch=='.')t+=1; } line[i]=t; } 核心递推 for(i=0;i<n;++i){ now=1-now; for(j=0;j<256;++j) if(num[j]<=k){ //第i行不放棋子 f[now][j]+=f[1-now][j]; //第i行放棋子 for(c=0;c<n;++c){ if((j&1<<c)==0&&(line[i]&1<<c)==0){ f[now][j|1<<c]+=f[1-now][j]; } } } } //枚举所有包含k个棋子的方案数 intans=0; for(i=0;i<256;++i){ if(num[i]==k){ ans+=f[now][i]; } } cout<<ans<<endl; 5.总结 递推最重要的思想,就是通过每一小步,找出与下一步之间的关系。关键在于思考问题的本质,对问题进行建模。常用f[i][j][k]等类似数组来记录,多一维就可以多记录一维状态信息,要思考上一步真正有多少个因素会影响当前步,那一般这些就是一定要记录的信息。 关注我,涨知识,微信公众号:几何思维 往期精彩回顾 蚂蚁走迷宫 老鼠与毒药 通过6人介绍可以认识世界上任何一个人?

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册