首页 文章 精选 留言 我的

精选列表

搜索[思考模型],共10000篇文章
优秀的个人博客,低调大师

OpenAI 宕机思考丨Kubernetes 复杂度带来的服务发现系统的风险和应对措施

作者:王建伟(正己) 12 月 11 日,OpenAI 旗下 AI 聊天机器人平台 ChatGPT、视频生成工具 Sora 及其面向开发人员的 API 自太平洋时间下午 3 点左右起发生严重中断,耗费约三个小时才顺利恢复所有服务。 OpenAI 在事后报告中写道,"该问题源自新部署的遥测服务,此项服务无意间压垮了 Kubernetes 控制平面,导致关键系统发生连锁故障。引发事故的根本原因就是新的遥测服务配置意外在大规模集群中产生了大量 Kubernetes API 负载,导致控制平面不堪重负并破坏了基于 DNS 的服务发现能力。" 可见,即使如实力强大的 OpenAI,面对复杂 Kubernetes 架构,也不能很好处理 Kubernetes 服务发现和控制面解耦的问题。造成这个问题的关键原因在于容器调度和业务关键服务发现链路耦合在一起,互相干扰,Kubernetes 控制面故障影响了业务服务发现链路。那么,Kubernetes 体系下应如何选择服务发现系统,进一步提升业务稳定性呢? 笔者认为,大型业务的服务发现系统应该具备高可靠性,高可伸缩性,高性能及高可维护性等特点,采用独立服务发现系统是一种相对较好的方案。本文以社区主流服务发现系统 Nacos 为例,从可靠性、可伸缩性、高性能、可维护性等 4 个方面探讨如何提升 Kubernetes 中微服务应用的稳定性。 如何提升系统可靠性 产品、系统在规定的条件下,规定的时间内,完成规定功能的能力称为可靠性。 解耦控制面与运行时 众所周知,Kubernetes 主要工作资源调度,更偏向运维系统一些。从架构合理性上讲,运行时与控制面的系统不应耦合在一起,甚至即使运维系统挂了也不会影响运行时。服务发现是运行时需求,而 Kubernetes 服务发现与运维系统绑定,一旦 Kubernetes 故障,上层运行态应用会受到致命影响。 Kubernetes 服务发现依赖 API Server,而 API Server 被非常多的组件调用,任何组件异常调用都有可能把 API Server 打挂,进而影响服务发现。以 OpenAI 这次故障为例,本来是要增强系统的可观测性, 但因可观测组件的大量调用把 API Server 打挂了,导致系统 DNS 解析发生故障。如果服务发现体系相对独立,不依赖或弱依赖 Kubernetes 控制面,本次故障是可以避免的。 Nacos 作为独立注册配置中心,可以不依赖 Kubernetes 独立部署,面向运行时设计,且有遵循多项面向失败原则,帮助业务服务发现与底层运维系统结构隔离,做到运维态系统故障不影响运行态系统,大大提高系统可靠性。 提升系统容灾能力 首先,Nacos 可以帮助提升部署在 Kubernetes 上微服务体系的容灾能力。先讲一个实际案例,2023 年 11 月,国内某头部出行服务公司的 app 突然出现大面积报错,导致长达几十个小时的服务不可用,影响大量用户正常出行。据官方发布通过,此次故障原因是底层软件异常导致(据推测为 Kubernetes 升级出现异常)。 对于大规模微服务系统,Kubernetes 集群容灾是系统稳定性非常重要的一环。通常,为了实现 Kubernetes 集群级别容灾,我们通常会把应用部署在多个 Kubernetes 上。这样,即使一个 Kubernetes 集群出现问题,还有另一个集群可以提供服务。但因 Kubernetes 服务发现是面向本集群内的,多 Kubernetes 部署之后,应用间的服务发现,尤其是跨 Kubernetes 集群服务发现会变得比较困难。 Nacos 作为独立的注册配置中心,可以不依赖 Kubernetes 独立部署。因此,如果在多 Kubernetes 引入 Nacos 作为注册配置中心,跨 Kubernetes 的服务发现问题就迎刃而解了。下图给出了 Nacos 作为独立注册配置中心的一个架构示意图。 Nacos 独立于业务应用部署,可以部署在独立 Kubernetes 中也可以部署在其他平台上; 业务应用部署在两个 Kubernetes 集群上,服务提供者向 Nacos 注册服务; 服务订阅者从 Nacos 订阅服务,发起服务调用。 从上图可知,任何一个 Kubernetes 集群出现故障都不会影响整个系统的服务。因此,Nacos 能大幅提升 K8s 体系微服务系统的可靠性。 面向失败设计 针对微服务系统常见的问题,Nacos 做了多项面向失败的设计,帮助提升系统可靠性。本节重点介绍其中两个:客户端缓存和推空保护。 客户端缓存提高极端情况下系统可靠性 在 Kubernetes 系统中,CoreDNS 是服务发现的核心组件,所有 DNS 请求都经过CoreDNS。一旦 CoreDNS 故障,所有服务调用都会受到影响。跟 Kubernetes 服务发现不同,Nacos 客户端保存了缓存数据,在服务端故障无法更新服务 IP 列表的情况下,可以继续使用缓存提供服务,不会影响运行时服务调用。 推空保护防止服务实例被误下线 当 Nacos 服务端发现某个服务下的实例全部下线时,可以自动触发保护逻辑,不会给客户端推送空 IP 列表。推空保护策略能预防因网络抖动或运维失误等导致的服务实例全部异常下线问题,保障业务运行可靠性。 如何提升系统可伸缩性 信息系统不需要对本身进行大量修改,只需要通过增加软硬件资源使服务容量产生线性(理想情况下)增长的特性称为可伸缩性。 在微服务架构下,传统单体应用被切分为多个小应用提供某些独立功能。随着业务发展,服务数量可能会出现爆发式增长。以淘宝为例,仅仅 3 年时间微服务实例规模就从十万级别暴涨到了百万级别。微服务数量爆发式增长对注册配置中心的可伸缩性提出了很高的要求。 Kubernetes 服务发现的核心组件之一是 etcd,系统所有微服务相关数据均存储于其中。但 etcd 是基于 raft 一致性协议开发的系统,Raft 协议本身的特性决定所有写操作必须由 Leader 执行。因此,etcd 可伸缩性较差,无法通过水平扩容解决微服务大规模增长带来的压力。 那如何提升系统的可伸缩性呢?一种方案是业务拆分,即把业务按照一定的逻辑拆分到多个 Kubernetes 集群,每个 Kubernetes 内部业务封闭,但成本很高,可能会改变整个业务架构;另一种方案是引入可伸缩性好的注册配置中心。 与 etcd 不同,Nacos 服务发现能力基于自研的 Distro 协议构建,每个服务端均可提供写服务,其性能随着系统的水平扩展而提高。因此,Nacos 作为 Kubernetes 集群的注册配置中心,可以大幅提高整个系统的可伸缩能力。 如何提升系统性能 Kubernetes 系统内服务发现主要有两种方式:环境变量和 DNS。默认情况下,Kubernetes 会为每个服务自动生成一个环境变量,并注入到 Pod 中。如果业务规模很大,环境变量过多的问题就不可避免。环境变量过多会导致 Pod 启动过程很慢,笔者就多次遇到环境变量过多导致 Pod 无法启动的问题。 DNS 服务发现方式允许开发者像调用普通域名一样调用 Kubernetes 内的服务,为多语言技术栈开发带来了很大便利。但频繁的 DNS 解析一方面会导致请求响应时间变慢,另一方面也会有一定的资源消耗。笔者曾做过一个简单的实验,对比直接以 DNS 域名方式调用和以 IP 直连方式调用的响应时间。结果显示,平均每次调用DNS 方式的 RT 比直连慢 3%-5%。3%-5% 的延迟看起来微不足道,复杂业务可能都会有多次甚至几十次的调用,累积起来的延迟对终端用户的体验影响还是比较大的。 而 Nacos 服务发现方式,通常和微服务框架(SpringCloud/Dubbo 等)结合,推送 IP 列表给框架,然后框架用IP直连的方式发起调用,省去了 DNS 解析的消耗。 下图简要画出了 DNS 解析和 IP 直连方式的区别。 因此,对于技术栈统一的微服务架构,使用 Nacos 作为注册配置中心,可以进一步缩短响应时间提升系统吞吐量。 如何提升系统可维护性 系统发生故障后能够排除(或抑制)故障予以修复,并返回到原来正常运行状态的可能性称之为可维护性。 简化服务发现链路,降低维护成本 K8s 服务发现依赖组件众多,下图给出了其典型架构。可以看到整个链路很复杂,涉及到 api-server、etcd、kube-dns/coredns、kubelet、kube-proxy、iptables、ipvs 等组件。一个 Pod 从扩容到最终接收到请求大概需要 10 步。 创建 Pod 创建 Service kubelet 检测 Pod 健康状态,并上报给 api-server api-server 更新数据到 etcd kube-proxy从api-server 收到 service 变更 kube-proxy 调用 iptables/ipvs 设置转发规则 kube-dns/coredns 从 api-server 监听到服务变化,更新 dns 解析记录 调用方 pod 从 kube-dns/coredns 解析 service,得到 cluster ip 调用方 pod 用拿到的 cluster ip 发起调用 请求经过 iptables/ipvs 转发链到达服务提供方 pod 而 Nacos 的服务发现工作原理,如下图所示,涉及组件更少,只有 Nacos Sdk 和 Nacos Server;一个 Pod 从创建到最终接收到请求大概只需要 5 步: 创建 Pod 服务提供方 Pod 注册服务到 Nacos,并自动持续汇报心跳 服务调用方 Pod 从 Nacos 订阅服务,拿到服务 IP 列表 服务调用方使用 Pod IP 发起调用 请求打到服务提供方 Pod 可以看出,相比 Kubernetes,Nacos 注册中心服务发现链路更短,涉及组件少。对于大规模微服务系统,采用 Nacos 作为注册配置中心,可以大幅提升系统的可维护性。 Kubernetes 与非 Kubernetes 服务互相发现,提升架构兼容性 随着 Kubernetes 的普及,新增系统通常选择直接部署在 Kubernetes 中。但仍有很多存量应用部署在传统虚拟机或物理机上。这两类应用经常互相调用,因此它们能互相发现变得十分必要。然而 Kubernetes 服务发现与 K8s 运维系统绑定,Kubernetes 服务要发现外部服务或被外部服务发现比较困难。如前所述,Nacos 是独立系统,对接入应用的部署平台没有限制,支持 Kubernetes 应用与非 Kubernetes 应用互相发现,下图是使用 Nacos 后 Kubernetes 与非 Kubernetes 应用互相发现的示意图。 Nacos 服务发现与 Kubernetes 服务发现特性对比 最后,下面表格中给出了 Nacos 服务发现与 Kubernetes 服务发现特性对比,方便大家选出更适合自己业务的微服务注册配置中心。 总结 Kubernetes 体系基于 DNS 的服务发现为开发者提供了很大的便利,但其高度复杂的架构往往带来更高的稳定性风险。以 Nacos 为代表的独立服务发现系统架构简单,在 Kubernetes 中选择独立服务发现系统可以帮助增强业务可靠性、可伸缩性、性能及可维护性,对于规模大、增长快、稳定性要求高的业务来说是一个较理想的服务发现方案。希望大家都能找到适合自己业务的服务发现系统。

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

测试用例千万不能随便,记录由一个测试用例异常引起的思考

一 测试用例大家平时写不写? 我以前写测试用例只是针对业务接口,每个接口写一个,数据case也只是测一种。能跑通就可以了。要不同的场景case,那就改数据。重新跑一遍。简单省事。 但是自从我业余时间开始维护开源后,开始加深了对测试用例的理解。甚至我现在已经把测试用例的地位提升了与核心代码一样重要的地位,我曾戏称过光写核心代码不写测试用例代码的都是耍流氓行为。 开源项目面对的是的所有人,每个人每个公司的环境都不同,项目结构也不一样,jdk,spring体系的版本,第三方依赖包都不一样。所以开源框架必须要在所有的场景下都工作正常。这么多功能点,这么多场景,哪怕我是作者,光靠熟悉度是不可能记起来那么多细节点的,这时候测试用例就显得非常重要了,它是整个项目的最关键的质量保障。很多时候,我都是靠测试用例来发现一些边缘细小的bug的。目前我的开源项目拥有870个测试用例,覆盖了大概90%以上的场景。 这篇文章探讨一个由测试用例引发的测试用例运行机制的问题。 二 事情的起因是一个群里的小伙伴发现某一个单元测试用例在配置项错误的时候,spring上下文竟然执行了2次,而在正确配置的情况下,是正常只启动了一次。这让他很不解,以为是框架出了问题。 他之所以觉得spring启动了2次,是看到日志中出现了2次springboot的logo打印,2次一模一样的报错: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) com.yomahub.liteflow.exception.ELParseException: 程序错误,不满足语法规范,没有匹配到合适的语法,最大匹配致[0:7] at com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder.setEL(LiteFlowChainELBuilder.java:124) ~[liteflow-core-2.8.2.jar:na] at com.yomahub.liteflow.parser.helper.ParserHelper.parseOneChainEl(ParserHelper.java:391) ~[liteflow-core-2.8.2.jar:na] at com.yomahub.liteflow.parser.el.XmlFlowELParser.parseOneChain(XmlFlowELParser.java:20) ~[liteflow-core-2.8.2.jar:na] at java.util.ArrayList.forEach(ArrayList.java:1259) ~[na:1.8.0_292] at com.yomahub.liteflow.parser.helper.ParserHelper.parseDocument(ParserHelper.java:217) ~[liteflow-core-2.8.2.jar:na] at com.yomahub.liteflow.parser.base.BaseXmlFlowParser.parse(BaseXmlFlowParser.java:40) ~[liteflow-core-2.8.2.jar:na] . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) com.yomahub.liteflow.exception.ELParseException: 程序错误,不满足语法规范,没有匹配到合适的语法,最大匹配致[0:7] at com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder.setEL(LiteFlowChainELBuilder.java:124) ~[liteflow-core-2.8.2.jar:na] at com.yomahub.liteflow.parser.helper.ParserHelper.parseOneChainEl(ParserHelper.java:391) ~[liteflow-core-2.8.2.jar:na] at com.yomahub.liteflow.parser.el.XmlFlowELParser.parseOneChain(XmlFlowELParser.java:20) ~[liteflow-core-2.8.2.jar:na] at java.util.ArrayList.forEach(ArrayList.java:1259) ~[na:1.8.0_292] at com.yomahub.liteflow.parser.helper.ParserHelper.parseDocument(ParserHelper.java:217) ~[liteflow-core-2.8.2.jar:na] at com.yomahub.liteflow.parser.base.BaseXmlFlowParser.parse(BaseXmlFlowParser.java:40) ~[liteflow-core-2.8.2.jar:na] 测试用例代码为: @RunWith(SpringRunner.class) @TestPropertySource(value = "classpath:/whenTimeOut/application1.properties") @SpringBootTest(classes = WhenTimeOutELSpringbootTestCase.class) @EnableAutoConfiguration @ComponentScan({"com.yomahub.liteflow.test.whenTimeOut.cmp"}) public class WhenTimeOutELSpringbootTestCase { @Resource private FlowExecutor flowExecutor; //其中b和c在when情况下超时,所以抛出了WhenTimeoutException这个错 @Test public void testWhenTimeOut1() throws Exception{ LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); Assert.assertFalse(response.isSuccess()); Assert.assertEquals(WhenTimeoutException.class, response.getCause().getClass()); } } 开源框架在源代码层面,不可能主动去再次启动spring上下文(事实上想做我也不知道如何去做)。而且正确配置情况下,是正常的。而且spring的@Configuration的也启动了2次,从线程堆栈上来看,也是由Junit这里触发的: 值得一提的是,报出的错是在springboot启动环节。所以压根就没进入@Test修饰的测试用例代码里。所以和代码写什么没有关系。我测试了下,如果在测试代码里抛出异常,spring上下文是只启动一次的。 所以这个问题可能到这就结束了,因为并非框架本身的问题,Junit本身在启动spring失败的情况触发了2次初始化spring的动作,可能是一种Junit的重试的机制。这并非我能控制,反正真的有错,也会抛出来,也不用care具体初始化几次,也不影响我的测试用例的整体效果的,把具体测试用例改对就行了。 三 但是我之后在处理一个测试用例时突然想到了关于测试用例的Spring加载的机制,从而联想到之前的问题。突然恍然大悟。 我们用例的结构一般都是,一个测试用例代表了一个大的场景,里面的每一个方法代表了一种具体的case。假设1个类带上10个test具体用例,那么当你点击类上的Run Test的时候,spring会被初始化多少次呢。 答案是1次,springboot test为了加快运行测试用例的过程,不可能每一个方法都去初始化一遍spring的。在这一个类里的spring的上下文都会缓存起来,这10个方法都会共享同一个spring上下文。 具体的运行机制是:在点下类的Run Test的时候,会去先初始化spring,然后开始运行一个个测试方法,当测试方法运行的时候,如果发现没有初始化spring,还会初始化一遍spring。这就解释了,当我们单独运行方法的run test的时候,也会初始化一遍spring。 现在就可以解释前文的问题了,因为初始化失败了,在运行方法时发现还没初始化,所以又进行了初始化。 但是对于不同的Test类的话,还是会初始化多遍的。也就是说,每一个类都会初始化一遍spring。这在你运行多个测试用例时应该能发现。 四 再额外引申一个问题:有没有人碰到过运行所有测试用例时总会有几个一直报错,但是单个运行却又完全正常的问题呢? 如果你有碰到过的话,那一定是忽略了以下这个注意点: 如果你选择全部运行测试用例,虽然每个测试用例类初始化一遍spring,但是JVM从始至终却只启动了一次。而你那些定义在类里的static的变量,不会随着spring启动而发生变化。当你全部运行的时候,有可能你出错的测试用例某些引用的static变量还是上个测试用例遗留下来的数据。所以可能会报错。而单次运行的时候,则没有这种现象。 如果你碰到了这种情况,你得在测试用例里使用@AfterClass这个注解,在注解声明的方法里把这次测试用例中的static变量给清空。这样就可以一起去运行了。例如我的每一个测试用例都去去继承一个BaseTest方法,在里面写上这个方法用于清空static的缓存: public class BaseTest { @AfterClass public static void cleanScanCache(){ ComponentScanner.cleanCache(); FlowBus.cleanCache(); ExecutorHelper.loadInstance().clearExecutorServiceMap(); SpiFactoryCleaner.clean(); LiteflowConfigGetter.clean(); } } 五 关于测试用例该怎么写,有什么常用的写法。这里不作过多说明,自己百度一下,应该可以找到一大把教程,或者有兴趣,也可以去阅读我的开源项目LiteFlow中的测试用例。 测试用例除了可以确保你的项目质量,还可以清晰的看到你整个测试用例覆盖了你多少的代码行。我这里的测试用例是单独列工程去写的。用以区别核心工程包。 然后在IDEA里去单独配置执行testcase的任务: 然后去点run xxx with coverage按钮运行测试用例: 多个测试工程之间,运行好一个会弹出对话框问你是否想把这次的结果加入到总的结果里去,直接点add就可以了: 你所有的测试用例工程运行好,在右侧会得出一个如下的报告页面: 这里在最上面可以看到我整个测试用例的覆盖行数是79%。但这并不表示项目覆盖场景只有79%。行覆盖和功能场景覆盖是2个概念,这里只是表示所有的测试用例运行完,跑了所有代码行的比例。 最后希望大家千万不能忽视测试用例,虽然有时我写的想吐,但是最后你会体会到它的甜。

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

从混合云存储看阿里云对下一代企业计算架构的思考

摘要:在公共云视角下,把企业本地存储视为一整套存储与计算方案中的一个部分与环节,通过公共云对云上云下存储和计算统一管理,以满足脉冲计算、基因计算、AI与机器学习等新型计算与数据存储的需求,这就是阿里云的混合云思路。 阿里云在2019年最后一个月发布了针对混合云的两款产品:入门级混合云存储阵列SA2100以及混合云CPFS一体机,加上2019年发布的混合云存储阵列中高端产品SA2600、3600、5600以及基于容器的ACK混合云2.0等,阿里云已经为2020年混合云市场的全面激活做好了准备。 混合云存储阵列SA系列融合IP SAN、FC SAN、NAS和OSS对象存储协议于一体,而CPFS主要面向海量小文件存储场景,二者可满足企业存储的大部分需求,而SA系列与CPFS一体机都可部署在企业数据中心,与阿里云公共云无缝对接,企业无需改变现有的IT架构,就能从企业本地数据中心充分利用公共云存储易于扩展、快速灵活部署的优势。 阿里云智能存储资深总监Alex Chen表示,阿里云存储集合十年的技术积累下沉服务企业级客户,从混合云存储角度推动传统企业加速上云,让传统企业客户可以放心使用本地和云端混合部署的存储解决方案,真正打通上云的数据“高速路”。 (阿里云智能存储资深总监Alex Chen) 相对于传统企业存储厂商来说,阿里云的混合云方案原生带有大规模公共云服务和实践经验;而相对于公共云服务厂商来说,阿里云更有向混合云进行投入的决心。 Alex Chen强调,阿里云对于混合云的决心并不仅仅是丰富的硬件产品和加密、安全、迁移等软件解决方案,更是诸如购买混合云存储阵列即可赠送阿里公共云服务这样的商务方案,以及刚推出的针对企业级预算型采购的SCU按量付费、灵活置换存储类型的公共云售卖方案。阿里云要用混合云,打通公共云的最后一公里。 从大数据到新数据 早在2014年的时候,业界就提出了大数据的4个V:多样化、海量、高速度和高价值。到了2019年,随着5G大规模商用的起步,大数据的时代才真正到来。然而,今天的企业不仅面临着大数据的挑战,还面临着移动互联网和人工智能所带来的新数据挑战,以及越来越严格的政府和行业数据监管要求。 在大数据方面,随着数字经济和数字社会的快速发展,企业依然面临着每年数据量剧增的大趋势。这直接导致对数据中心投资的大幅增加,根据赛迪顾问的数据,2018年中国数据中心IT投资规模达到3257亿元,比2017年同期增长17.8%,其中硬件投资占46%;而预计未来3年中国数据中心市场规模将保持13.6%的增长速度。 但是企业自建数据中心的速度远远跟不上移动互联网场景下的新型数据场景,特别是脉冲式数据现象。近年来电商带来了脉冲式数据流,特别是以每年阿里的双十一为典型代表。2009年的时候,双11零点峰值交易笔数为400笔/每秒,而到了2019年则达到了54.4万笔/每秒,脉冲式数据峰值十年实现了1360倍的增长,直接导致对各种存储和日志服务需求的十倍和数十倍增长。在阿里双11的带动下,全社会也出现了双11、双12、各种秒杀等脉冲式数据现象。 在人工智能方面,智能图像视频识别和智能语音识别的需求正在爆发,不仅带来了各类图像、照片、视频和语音数据的大规模增长,例如直播应用一天产生的视频数据量就以TB甚至PB计,而连接千万用户的智能音箱、智能语音助手等产生的语音数据更是爆发性增长。更为重要的是一个深层神经元网络的参数就可能达亿计、芯片计算量可达百亿次/秒,AI并行并发计算的特性要求大量数据交换和移动,提出了计算存储一体化或统一化的挑战。 而基因计算、容器计算等海量小文件、低时延、高IOPS、无缝快速切换数据副本等新兴数据和计算场景,以及对企业关键关系型数据的统一管理等,都对企业级存储提出了新的需求。此外,越来越严格的政策和行业法规遵从,例如2017年10月实施的新版《民用运输机场安全保卫设施》标准(MH/T 7003-2017)要求机场安保数据的存储从原来的30天升级为90天,而2018年5月的欧洲GDPR也对数据存储有要求,不同的国内外合规遵从不断对全球化运营的企业提出存储新需求。 在新兴数据及数据存储需求下,企业级存储面临着更可靠、更高性能、更灵活、弹性扩缩容和简化运维的新挑战。 公共云视角下的混合云 企业新兴的数据需求以及对于企业级存储带来的挑战,已经不能从自有数据中心存储角度加以解决,公共云视角下的混合云正在成为企业级存储创新的方向。 市场咨询与研究公司Wikibon指出,当前正在进入云的第三个发展阶段:云的企业阶段。Wikibon的调研显示,2019年将是企业开始建立具体的长期云战略的一年。而在云的第二个阶段,大数据向云迁移且建立了AI和机器学习分析等创新模式,但企业的ERP等高价值核心应用并没有向云迁移。随着新的边缘数据和本地核心数据源的出现,企业数据趋于保留在本地和边缘,相反的是云服务将移向本地核心和边缘移动。 从公共云数据中心、本地数据中心和边缘数据中心等视角下来看,混合云更多指的是包括了所有IT形态的混合IT&多云环境下的IT资源管理,而非本地存储资源的虚拟化(也就是之前流行的企业级存储虚拟化)。而所谓的分布式存储软件,也将扩展到公共云、本地和边缘计算存储资源的统一管理,也就是云上、云下的一体化。这是公共云视角下的混合云存储,与企业数据中心的存储虚拟化以及基于开源软件的数据中心分布式存储的最大区别。 传统数据中心视角下的混合云存储,将公共云存储视为补充的扩展资源,作为备份及灾备的方案;而公共云视角下的混合云存储,是把企业本地存储视为一整套存储与计算方案中的一个部分与环节,通过公共云软件对云上云下存储和计算统一管理,以满足脉冲计算、基因计算、AI与机器学习等新型计算与数据存储的需求,而这就是阿里云的混合云思路。 Alex Chen强调,在存储硬件越来越标准化的今天,本地环境下的企业级存储以及分布式文件存储等场景的创新空间已经越来越小,更大的创新空间实际上来自公共云下沉到企业本地以及云上云下的计算与资源联动。例如阿里云在国内所有Region提供了同城冗余能力,也就是上传到阿里云的数据有3个备份,分别存放于3个不同的数据中心,如果一个数据中心出现问题,另外2个数据中心还可以继续提供服务。而同城冗余存储提供了数据12个9可靠性,也就是存储100万文件到阿里云,在100万年内不会有任何的数据丢失。 同城冗余存储是阿里云对象存储OSS最近发布的产品,阿里云对象存储OSS多年支撑双11业务高峰,历经高可用与高可靠的严苛考验,其多重冗余架构设计为数据持久存储提供可靠保障,基于高可用架构设计可消除单节故障、确保数据业务的持续性。 阿里云的文件存储CPFS (Cloud Parallel File Storage),是阿里云完全托管、可扩展的并行文件存储系统,提供对数据毫秒级的访问和高聚合IO、高IOPS的数据读写请求,可用于AI深度训练、自动驾驶、基因计算、EDA仿真、石油勘探、气象分析、机器学习、大数据分析以及影视渲染等业务场景中。 阿里云的NAS文件存储则可以挂载到弹性计算ECS、神龙裸金属、容器服务ACK、弹性容器ECI、批量计算BCS、高性能计算EHPC、AI训练PAI等计算业务上,提供高性能的共享存储。值得一提的是极速型NAS是针对海量小文件场景提供百微秒级低时延和高IOPS访问,解决了传统存储云化架构下海量小文件访问出现的过大时延导致web网站访问缓慢、容器集群批量启动时并发读取配置文件卡顿、DevOps持续集成效率低下、实时日志分析文件系统负载过高等问题。 而阿里云块存储服务推出的ESSD云盘,是阿里云推出全球首个跨入IOPS百万时代的云盘,单盘IOPS高达100万,比SSD云盘快40倍,这是阿里云迄今为止性能最强的企业级块存储服务。除ESSD外,阿里云块存储类型丰富,包括SSD云盘、高效云盘、普通云盘、NVMe SSD本地盘、SATA HDD本地盘、SSD共享块存储、高效共享块存储等多种磁盘类型,满足不同业务场景需求。2019年的技术更新包括单云盘最多可保存1000个自动快照,ESSD在线最大扩容32TB(即无需停机)等。 Alex Chen介绍,阿里云存储的软件特色还包括:安全方面支持服务端加密、客户端加密、防盗链、IP黑白名单、细粒度权限管控、日志审计、WORM特性,获得多项合规认证,包括SEC、FINRA等,满足企业数据安全与合规要求;提供标准、低频、归档多种类型,通过生命周期自动化实现数据类型转换与过期管理,覆盖从热到冷多种存储场景;提供RESTFul API、控制台、多种开发语言的SDK、命令行工具、图形化工具等多种使用方式,可以随时随地通过网络管理数据等。 实际上,在过去十年里阿里云在存储方面有着大量的创新场景和创新技术,更多是与计算类型相结合的存储技术和系统创新。从2008年开始,阿里云存储在规模化,可靠性、性能和稳定性,便捷性以及软硬一体化等四个方向发展,在这个过程中积累了大量的创新甚至是自研芯片、自研协议和自研硬件以实现更加极致的存储体验。 把云存储推向企业 2019年11月,总部位于澳大利亚的动画和视觉效果工作室Animal Logic宣布正与阿里云开展合作,将本地制作内容备份到阿里云中,以满足不断增长的媒体制作需求。Animal Logic的作品包括《X战警:逆转未来》、《乐高大电影》以及《复仇者联盟2》,而Animal Logic对澳大利亚本地的公共云服务商进行了严格的评选,最终阿里云胜出。 Alex Chen认为,阿里云能在澳大利亚市场中胜出,证明了阿里云的能力以及建立了企业市场的信心。在国内市场,国内知名智能汽车制造商小鹏汽车即将采用阿里云文件存储CPFS来对训练过程中的模拟数据进行计算。CPFS不仅能解决小鹏汽车日均几十TB数据挑战,还能帮助AI系统迅速处理数据,加速汽车在复杂路况和驾驶技巧的训练速度。小鹏汽车物联网与商业技术高级总监谭蔚华表示,阿里云在数据采集、数据传输和计算处理全链条上提供了全方面的改善,帮助小鹏汽车提升了车联网技术的协同研发效率40% 以上。 在看到了企业市场的需求后,阿里云也加快了把云存储服务向企业本地数据中心推进的进程。本次发布的企业入门级混合云存储阵列SA2100,是专门为中小企业及大型企业分支机构设计的本地部署混合云存储阵列产品,企业无需更改原有的IT架构就可以像使用传统企业存储设备一样使用阿里云混合云存储阵列。而SA2100的本地存储空间和云端存储空间可以实现多副本跨区域保护,提供12个9的数据高可靠性。 混合云存储阵列SA2100提供了丰富的企业特性:在硬件设计方面,采用全冗余架构,支持数据加密、ACL及快照、卷克隆、卷镜像、远程复制等企业存储特性,与阿里云公共云存储无缝结合;在产品配置方面可扩展FC、万兆、千兆主机接口,支持最多300块SSD、SAS、NL-SAS等类型硬盘组合,精细匹配业务不同需求。 而本次发布的CPFS混合云一体机也与阿里云公共云的存储资源无缝打通,帮助企业无缝上云,实现“云下资源可控,云上弹性伸缩”的多级存储池架构。 此外,阿里云创新地引入了存储容量单位包(Storage Capacity Unit,以下简称SCU),可以用来抵扣多种不同类型云盘的按量付费账单。作为一种创新型的售卖形态,SCU让预付费企业可在不同类型存储产品之间转换,而无需繁琐、冗长的财务流程。Alex Chen强调,公共云是由互联网公司发起的,其售卖方式并不适合企业级预算型用户,而SCU正是阿里云存储对企业级客户的创新。目前SCU并不包括本地部署的阿里混合云产品,未来时机成熟时将扩展到企业本地。 从目前阿里云的混合云存储产品和服务的布局来看,下一代企业级计算架构将向着分布式和云化架构相融合的方向发展,这种所谓分布式云架构即把公共云服务拓展向各个物理位置而主要由公共云厂商进行管理、运维和治理等工作,各类集群分布在客户数据中心、边缘和云数据中心并通过统一管理而实现场景创新,当然企业对于本地部署的IT资源可以选择更大自主权以满足合规等要求。 总体来说,阿里云所推动的混合云创新还在演进中,还在根据企业级客户需求、市场发展趋势以及阿里云技术进展而不断寻找公共云服务与本地管控IT资源之间的平衡点。不过可以肯定的是,公共云服务下沉到企业本地数据中心的混合云,将是下一代企业计算架构的大方向。(文/宁川)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

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

用户登录
用户注册