‘壹’ 现在大家都在说的云原生到底是什么
云原生是一个组合词,可以拆分为“云”和“原生”两个词,“云”我们都知道,即在线网络,传统的应用原本都跑在本地服务器上,很有可能需要停机更新,且无法动态扩展,“云”表示应用程序运行在分布式的云环境中,可以频繁变更,持续交付。
“原生”表示应用程序在设计前期就考虑到了云平台的弹性和分布式特性,也就是为云设计的。
可以简单理解为:云原生=微服务+DevOps+持续交付+容器化
| 微服务 |
即软件架构,使用微服务架构可以将一个大型的应用程序按照功能模块拆分成多个独立自治的微服务,每个微服务仅仅实现一种功能,具有很明确的边界。
带来的好处有哪些?
1)服务的独立部署
每个服务都是独立的项目,可以独立部署,不依赖于其他服务,耦合性低。
2)服务的快速启动
拆分之后服务启动的速度要比拆分之前快很多,因为依赖的库少了,代码量也少了。
3)更加适合敏捷开发。
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。
4)职责专一,由专门的团队负责专门的服务。
业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。
5)服务可以动态按需扩容
当某个服务的访问量较大时,我们只需要将这个服务扩容即可。
6)代码的复用
每个服务都提供REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。
| 容器化 |
是云原生的核心技术,它是一种相对于虚拟机来说更加轻量的虚拟化技术。能为我们提供一种可移植、可重用的方式来打包、分发和运行程序。
容器的基本思想就是将需要执行的所有软件打包到一个可执行程序包。例如,将一个Java虚拟机、Tomcat服务器以及应用程序本身打包进一个容器镜像。用户可以在基础设施环境中使用这个容器镜像启动容器并运行应用程序。
而Docker是目前应用最为广泛的容器引擎,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡,Docker和K8s都采用Go编写,(K8s全称Kubernetes,由首字母K,结尾字母s以及中间的8个字母组成,所以简称为K8s)。
| DevOps |
是软件开发人员和IT运维人员之间的合作过程,是一种工作环境、文化和实践的集合,目标是高效地自动执行软件交付和基础架构更改流程。开发和运维人员通过持续不断的沟通和协作,可以以一种标准化和自动化的方式快速、频繁且可靠地交付应用。
| 持续交付 |
就是不误时开发,不停机更新,是一种软件开发方法,它利用自动化来加快新代码的发布。在持续交付流程中,开发人员对应用所做的更改可通过自动化被推送至代码存储库或容器镜像仓库。
‘贰’ 云原生有哪些优势
第一,极致弹性能力,以容器化方式运行的应用程序,其启动和停止非常快,一般处在秒级或毫秒级。
第二,故障自愈、服务自治能力,采用容器编排框架,可以管理成千上万的应用容器,当某个应用出现故障时,编排系统能够及时发现并自动摘除问题应用,同时智能调度到有效资源上,保证了应用系统的稳定运行。
第三,大规模跨环境扩展能力,基于容器编排系统的PaaS平台,可以跨越部署到不同的环境中,包括不同的网络环境,不同的机房,不同的数据中心或不同的公有云,利用联邦集群的模式,可以让应用在跨云的环境中流转,可以让不同的云环境作为资源补充,或者创建相同的应用到不同的数据中心,以此作为容灾备份。
基于云原生以上的几个特点,在容器云PaaS、DevOps、微服务治理、服务网格、API网关等等方面,时速云做的还不错,他们是一家全栈云原生技术服务提供商,你可以了解一下。
‘叁’ 什么是云原生为啥这么火
一、云原生是什么?
云原生是基于分布部署和统一运管的分布式云 ,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。
云是相对于本地而言的,传统的应用都是运行在本地机房的服务器上,而云的应用则是运行在云端(如IAAS、PAAS、SAAS)。原生就是亲生的、土生土长的意思,即应用一诞生就是基于云的,可以直接在云平台上运行或非常轻松的迁移到云平台。我们可以这么来定义云原生:是一种新型技术体系,是云计算未来的发展方向。
云原生应用要运行在云平台, 那么就必须要有云的特点,比如弹性伸缩、分布式、快速部署、快速迭代、高效、持续。 这可不止是简单的把原先在物理服务器上的应用迁移到虚拟机里,不止是基础设施和运行平台在云上,应用架构、应用开发方式、应用部署方式、应用维护方式全都要做出改变。
二、云原生的核心
云原生的四大核心要素便是微服务技术、DevOps、持续交付、容器化。微服务技术使得应用原子化,所有的应用都可以独立的部署、迭代。DevOps使得应用可以快速编译、自动化测试、部署、发布、回滚,让开发和运维一体化。持续交付让应用可以频繁发布、快速交付、快速反馈、降低发布风险。容器使得应用整体开发以容器为基础,形成代码组件复用、资源隔离。
微服务
微服务是一个独立发布的应用服务,可以作为独立组件升级、灰度或复用等,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发,甚至整个团队的组织架构更精简,沟通成本低、效率高。
devOps
持续交付
敏捷开发要求持续交付,因为敏捷开发要求随时有一个版本可以上到大群环境,所以要持续交付。持续交付目的的快速应对客户的需求变化,要求发布非常频繁,所以会存在多个版本同时提供服务的情况,因此需要支持灰度发布/金丝雀发布等。
容器化
Docker是软件行业最受欢迎的软件容器项目,Docker起到应用隔离作用,为微服务及其所需的所有配置、依赖关系和环境变量移动到全新、无差别的运行环境,移植性强。
三、云原生的优势
快速上线,云开发可以在最短时间内上线。
专注业务逻辑
提高开发效率
云开发模式提供API接口,通过API实现数据的存储,文件的上传等操作,大大提升开发效率。不需要学习新的语言,只需要掌握javascript就可以。
弹性伸缩
当性能要求不断增加的时候,云开发可以弹性扩展性能
‘肆’ 大数据的分布式数据库的发展趋势如何(分布式数据库的优点)
现在大数据是一个十分火热的技术,这也使得很多人都开始关注大数据的任何动态,因为大数据在某种程度上来说能够影响我们的生活。在这篇文章中我们就给大家介绍一下大数据的分布式数据库的发展趋势,希望这篇文章能够帮助大家更好理解大数据的分布式数据库的发展趋势。
其实不论是Hadoop还是分布式数据库,技术体系上两者都已经向着计算存储层分离的方式演进。对于Hadoop来说这一趋势非常明显,HDFS存储与YARN调度计算的分离,使得计算与存储均可以按需横向扩展。而分布式数据库近年来也在遵循类似的趋势,很多数据库已经将底层存储与上层的SQL引擎进粗芹行剥离。传统的XML数据库、OO数据库、与pre-RDBMS正在消亡;新兴领域文档类数据库、图数据库、Table-Style数据库与Multi-Model数据库正在扩大自身影响;传统关系型数据库、列存储数据库、内存分析型数据库正在考虑转型。可以看到,从技术完整性与成熟度来看,Hadoop确实还处于相对早期的形态。直到今天,很多技术在很多企业应用中需要大量的手工调优才能够勉强运行。同时,Hadoop的主要应用场景一直以来面向批处理分析型业务,传统数据库在线联机处理部分不是其主要的发展方向。同时Hadoop技术由于开源生态体系过于庞大,同时参与改造的厂商太多,使得用户很难完全熟悉整个体系,这一方面大大增加了开发的复杂度,提升了用户使用的难度,另一方面则是各个厂商之间维护不同版本,使得产品的发展方向可能与开源版本差别逐渐加大。
而分布式数据库领域经历了几十年的磨练,传统RDBMS的MPP技术早已经炉火纯青,在分类众多的分布式数据库中,其主要发展方向基本可以分为“分布式联机数据库”与“分布式分析型数据库”两种。对比Hadoop与分布式数据库可以看出,Hadoop的产品发展方向定位,与分布式数据库中列存储数据戚枣库相当重叠而在高并发联机交易场景,在Hadoop中除了HBase能够勉强沾边以外,分布式数据库则占据绝对的优势。目前,从Hadoop行业的发展来看,很多厂商而是将其定位改变为数据科学与机器学习服务商。因此,从商业模式上看以Hadoop分销的商业模式基本已经宣告结束,用户已经体验到维护整个Hadoop平台的困难而不愿被强迫购买整个平台。大量用户更愿意把原来Hadoop的部件拆开灵活使用,为使用场景岩仔毕和结果买单,而非平台本身买单。另外一个细分市场——非结构化小文件存储,一直以来都是对象存储、块存储,与分布式文件系统的主战场。如今,一些新一代数据库也开始进入该领域,可以预见在未来的几年中,小型非结构化文件存储也可能成为具备多模数据处理能力的分布式数据库的战场之一。
我们在这篇文章中给大家介绍了很多有关大数据分布数据库的发展前景,通过这篇文章我们不难发现数据库的发展是一个极其重要的内容,只有搭建分布式数据库,大数据才能够更好地为我们服务。
‘伍’ 亚马逊云科技的云存储,最应该知道的有这三点
传统存储在以各种方式对接公有云生态,公有云的云上服务类型也在不断完善,作为企业信息化负责人要做的是更多地了解公有云,然后,考虑如何充分利用公有云的优势。
本文通过介绍亚马逊云 科技 存储服务的三个关键点,带您认识云存储的现状。
正文:
乘着互联网产业的春风,云存储在过去近二十年走过了可遇不可求的发展历程。也让从90年代开始,就一直坐着冷板凳,负责数据归档的对象存储,一跃成为整个互联网数据的基石。
如今,绝大部分互联网上可访问的数据都靠对象存储来存,偶尔曝出的数据泄露事件也大多都跟对象存储有关,当然,问题不在于对象存储本身。
从2006年,亚马逊云 科技 的对象存储服务Amazon S3发布,到现在,算起来也有十六年的时间了,这也是亚马逊云 科技 推出的第一款云服务。
从市场表现来看,Amazon S3是非常成功的,前两年有人推测说,亚马逊云 科技 在存储方面的营收规模非常大,甚至被称作是全球最大的存储公司,Amazon S3无疑是功劳最大的一个。
有人说,许多亚马逊云 科技 用户使用的第一个产品就是Amazon S3对象存储,在所有亚马逊云 科技 的用户案例,在所有技术文档里,Amazon S3的出镜率都非常高。
云上原生存储Amazon S3的主线任务:不断降低成本
如果亚马逊云 科技 的用户没用过Amazon S3,就好比去包子铺吃饭没点包子,光顾烧烤店没吃烤串一样,令人费解。
Amazon S3的易用性高、可用性高,开发者很喜欢,Amazon S3几乎不丢数据的可靠性,稳定性也很高,运维管理人员很喜欢,Amazon S3在互联网应用场景被普遍应用。
如今,Amazon S3上存着超过100万亿个对象,每秒需要处理上千百万次请求。
Amazon S3一开始解决了可靠性和可用性以及安全方面的基本问题,性能也一直在提升,多年看下来,最大的工作重点就是不断降低成本。
亚马逊云 科技 大中华区产品部总经理 陈晓建介绍称,同样存储一份数据,如果2006年需要100块钱,而在2022年就只需要大概15块钱,16年间,Amazon S3的存储成本降低了大约7倍。
2021年12月,亚马逊云 科技 宣布在全球九大区域,将Amazon S3 Standard In Frequent Access和Amazon S3 One Zone In Frequent Access的价格降低了31%。
Amazon S3存储分了八个层级。
对于需要经常访问的数据,首选标准版的Amazon S3,它具有毫秒级的访问表现,而不太经常访问的数据就选Amazon S3 Standard-IA上,相较于前者能节省大概40%的费用。
而对于那些很少访问的数据,则可以选择放在Amazon S3 Glacier DeepArcihve上,它的成本非常低,大约1美刀1个TB,但代价是,想把数据拿回来就得多等等,大概需要12到48个小时。
有人觉得这等的时间也太长了,于是,亚马逊云 科技 又推出了Amazon S3 Glacier Flexible Retrieval,只需要等上几分钟到几小时。
就没有一种,既可以便宜,访问性能又高的存储吗?还真有。
这就是Amazon S3 Glacier Instant Retrieval,它是最新的一个存储层级,拿回数据的速度是毫秒级的,成本与Amazon S3 Glacier相当,适合每季度才访问一次、又需要毫秒级取回的海量数据。
另外,Amazon S3 One Zone-IA的成本也很低,顾名思义,数据只存在单个可用区上,而其他S3存储的数据都在多个可用区上存着好几分,相比之下,理论上丢数据的风险高了些。
最后,出于合规的要求,用户有些数据不能上云,亚马逊云 科技 可以提供Amazon Outposts,把云的硬件放到了用户的数据中心里。使用Amazon S3 on Outposts,就像在云上使用S3一样。
总的来说,Amazon S3的存储层级还是挺多的,但问题是,这给选型和管理也带来了负担。
为此,亚马逊云 科技 推出了Amazon S3 Intelligent-Tiering(智能分层),它会根据对象被访问的次数在多个存储层级间进行自动化迁移。
如果不能确定要选什么或者存储需求会变,那就选它,它不仅能解除选择困难症,还能避免用户自行管理数据分层的麻烦。
一家在东南亚和北美市场非常有影响力的互联网公司,在亚马逊云 科技 上存放了大约几十PB的数据,原本主要使用的是Amazon S3 Standard—IA,在使用Amazon S3智能分层后,没有进行任何额外操作,就将存储成本降低了62%。
亚马逊云 科技 最早在2018年就推出了Amazon S3智能分层功能,如今,Amazon S3智能分层已经涵盖了Amazon S3家族的几乎所有存储类别,最多可节省68%的成本。
不仅如此,如今数据分层还拓展到文件存储Amazon EFS,Amazon EFS提供四种文件存储等级,数据分层能节省高达72%的存储成本。
打通云应用与传统应用的隔阂:靠多种文件存储
如果说,对象存储是云存储的标配的话,那文件存储就是云存储连接本地存储的桥梁。
如今常见的应用分为两类。
一类是云原生的现代化应用,也就是在云上开发的、充分利用云架构优势的应用,比如电商、 游戏 、社交媒体等平台。对应需要的存储,大部分是对象存储Amazon S3来满足,少部分需要文件存储Amazon EFS。
另一类是传统企业应用,它诞生在公有云之前,常见的有高性能计算、EDA、视频渲染等场景,通常由本地的文件存储系统,比如NAS来支撑的,为提升安全性和可靠性,通常都带有快照、镜像、远程复制等功能特性。
这类工作负载并没有根据云架构的特点来设计,如果强行上云,不仅需要调整应用本身,而且还可能出现兼容性的问题,为了避免此类问题,亚马逊云 科技 推出了FSx文件存储家族。
从2018年开始,陆续推出了面向Windows环境的Amazon FSx for Windows,面向高性能计算场景的Amazon FSx for Lustre,面向大数据分析场景推出了Amazon FSx for OpenZFS。
金风慧能采用了亚马逊云 科技 构建HPC高性能计算系统,其中使用了Amazon FSx for Lustre共享存储系统,不仅使气象预测系统性能提升了10%,气象计算时间缩短了1/3,还将成本降低了70%,运维复杂度也大大降低。
此外,还与知名存储厂商NetApp合作推出了Amazon FSx for NetApp ONTAP,把NetApp的经典NAS文件存储系统NetApp ONTAP放到了公有云上。
NetApp在2015年就提出了Data Fabric的概念,大意就是想要实现数据在云上和云下的自由流动,是比较早积极拥抱混合云的存储厂商之一。
与一些存储厂商的云上托管服务不同,Amazon FSx for NetApp ONTAP没有删减任何功能,它是云上唯一完整且全托管的NetApp ONTAP文件存储系统,能够无缝地跟企业本地的ONTAP系统对接,所以,用户的IT系统不需要做任何改动,就能使用云上服务。
2019年,NetApp与联想成立合资公司——联想凌拓,联想凌拓在中国区提供相关服务,联想凌拓产品管理与营销高级总监林佑声表示,从发布到现在,Amazon FSx for NetApp ONTAP得到了非常多客户的认可,包括金融、医疗、石油以及高 科技 行业客户。
嘉里物流原本是本地存储NetApp ONTAP的用户,随着业务全球化发展,在数据扩容以及数据共享方面碰到的问题越来越多,通过使用亚马逊云 科技 提供的Amazon FSx for NetApp ONTAP,将数据从本地迁到云上,解决了这些问题。
上云之后,不仅可以使用原来NetApp ONTAP自带的快照和备份等功能,同时,还可以使用亚马逊云 科技 遍布全球的数据中心,实现跨区域的灾备。
补足数据保护方面的短板:Amazon Backup
一直以来,云存储被诟病的点还在于缺少数据灾备功能,在如何维持业务连续性方面有一些争议,而亚马逊云 科技 正在试着消除这一顾虑,这就是Amazon Backup。
由于缺少与业务价值的强关联性,数据保护经常容易被忽视,同时,由于数据保护系统本身很复杂,合规的要求还特别多,实践起来也特别麻烦,所以,数据保护的实践相对落后。
可能也是基于这样的考虑,亚马逊云 科技 的数据保护服务Amazon Backup才特别喜欢强调“一站式”“操作简单”的特点,让用户知道,数据保护也没有那么麻烦。
于是我们看到,Amazon Backup能覆盖旗下的几乎所有存储产品,包括块存储(Amazon EBS)、对象存储、文件存储、数据库,以及计算和存储网关等相关产品。
Amazon Backup的操作比较简单,通过图形的界面即可完成大部分操作,用户还可以通过预设的策略进行自动化的备份,降低手动备份带来的问题。
安全合规的问题让许多用户头疼,Amazon Backup深度集成了亚马逊云 科技 自带的KMS数据加密服务,整个备份操作权限、数据访问权限都可以用IAM进行细颗粒度监控,满足个人信息安全规范、信息安全等级保护等方面的合规要求。
Amazon Backup避免让数据保护带来太多的成本负担,因此也用上了智能分层技术,用户通过冷热分层策略可以有效降低约75%的成本。
澳大利亚石油天然气的供应商Santos要对Amazon EBS块存储做备份,原本都是用手动备份的方案,但随着业务量的发展,备份的出错率越来越高,成功率越来越低。
而在用了Amazon Backup后,平均备份任务用时和运营成本均有大幅降低,备份成功率到了100%,而且还完全做到企业数据合规。
结束语
确实如陈晓建所言,亚马逊云 科技 存储服务已经成为IT行业的“水”和“电”,让各行各业的业务都能从存储服务中获得价值。
亚马逊云 科技 的存储服务类型和存储的相关实践都非常有代表性,而且,很多做法已经成了上云的参考实践,企业用户应该多少了解亚马逊云 科技 的云存储,特别是有上云打算的企业。
当然,上云带来的便捷和灵活,稳定性和安全性,以及对运维的解放都很吸引人。
还有顾虑?据我个人了解,亚马逊云 科技 非常在意企业在云上的成功和成本节省,不仅会帮企业不断优化。除此之外,市场上有一些专门的服务,帮助企业做规划实施,让你充分利用云的优势。
‘陆’ 从云计算到云原生:从概念到落地
云计算最近几年已经火得不行, 云原生 (Cloud Native)这个概念又来了,如果上云不“原生”,那就等于白上云。究竟什么是云原生?云原生有何优势?怎么从“不原生”一步一步做到云原生?本文将给出切实可行的云原生落地指南。
我们先从云计算说起 。在云计算普及之前,一个应用想要发布到互联网,就需要企业自己先买几台服务器,找一个IDC机房,租几个机架,把服务器放进去。接下来就是装Linux系统,部署应用。我们就假定用Java写了Web应用,怎么部署上去呢?先配置Tomcat服务器,在把编译好的war包上传到服务器,有用FTP的,安全意识高一点的会选SCP,然后配置Nginx、MySQL这些服务,最后一通调试,把应用跑起来,就算齐活。
这种物理机配合自搭网络环境、自搭Linux、自配环境的方式,有很多缺点,但最主要的问题有这么几个:
解决方案是上云 。上云不能解决所有问题,但部分解决了前两个问题:
但是如果仅仅满足上云,把物理机换成虚拟机,把物理网换成虚拟专用网(VPC),是远远不够的。这些是计算资源和网络资源层面的简化。应用方面,如果延续旧的一套开发、测试、部署流程,做不到快速迭代。
要做到快速迭代,敏捷开发,就需要DevOps,即开发运维由一个团队负责,开发阶段,就要把部署、运维的工作考虑进去,而不是发布一个war包或者jar包后扔给运维不管了。
重开发、轻部署,直接后果就是缺少自动化发布流程。想要把部署规范化,就需要整体考虑一系列问题。
还是以Java应用为例,如果是手动部署,那么就上传war包到服务器,覆盖原有的版本,重启Tomcat,再测试。如果发现有严重问题要回滚怎么办?把老版本再传一遍,然后重启Tomcat。
手动部署,每次部署都是一次生死考验,所以最好不要安排在半夜,以免手抖敲错了命令,本来中断10分钟的服务,变成了灾备恢复,中断3天。
稍微靠谱一点的是写脚本部署,但各家写出来的脚本都有各家特色,不通用,不易维护,所以更好的方式是用成熟的部署方案,比如Ansible,把脚本标准化,比如做成蓝绿发布,把服务器分组,比如A、B两组,先把流量切到B组,升级A组服务器,有问题就回滚,没问题了,再把流量切到A组,升级B组服务器,最后,恢复正常流量,整个部署完成。
但是回滚这个事情,远没有那么简单。做过开发的同学都知道,升级新版本,一般要加配置,改配置,如果回滚到旧版本,忘了把配置改回去,那旧版本可能也不能正常工作。
上云,除了物理变虚拟,简化运维外,最重要的特点——弹性计算,一定要充分利用。
理论指导实践,实践完善理论。如果我们分析大多数基于互联网的应用,可以看到,一个应用,通常用到的资源如下:
上云后,云服务商通常都提供托管的数据库,以及大规模存储系统(S3),可解决存储资源问题。通过云服务商提供的负载均衡(Load Balancer),也无需自行部署Nginx等网关,免去了运维的问题。各种标准的业务组件如Redis、Kafka等,均可直接租用云服务商提供的资源。
我们重点讨论计算资源,也就是云上的虚拟机资源。对于应用来说,可以设计成有状态和无状态两种。一个应用在一台虚拟机内跑着,如果有本地文件的修改,它就是有状态的。有状态的应用既不利于扩展,也不利于部署。反过来,如果一个应用在运行期数据总是存在数据库或者缓存集群,本地文件无任何修改,它就是无状态的。
无状态的应用对应的虚拟机实际上就是不变的计算资源。这里的“不变”非常重要,它是指,一台虚拟机通过一个固定的镜像(预先内置好必要的支持环境,如JRE等)启动后,部署一个应用(对应一个war包或者jar包),该虚拟机状态就不再变化了,直接运行到销毁。
有的同学会问:如果给这台虚拟机重新部署一个新的应用版本,它的状态不就发生了变化?
确实如此。为了确保虚拟机的不变性,一旦启动后部署了某个版本,就不允许再重新部署。这样一来,对虚拟机这种计算资源来说,就具有了不变性。不变性意味着某个虚拟机上的应用版本是确定的,与之打包的配置文件是确定的,不存在今天是版本1,明天变成版本2,后天回滚到版本1的情况。
计算资源不变,能确保启动一台虚拟机,对应发布的应用版本和配置是确定的且不变的,对于运维、排错非常重要。
那么如何在保持计算资源不变的前提下发布新版本?
我们以AWS的CodeDeploy服务为例,假设一组正在运行的某应用v1集群包含3台虚拟机:
现在,我们要把应用从v1升级到v2,绝不能直接把现有的3台虚拟机的应用直接升级,而是由CodeDeploy服务启动3台新的一模一样的虚拟机,只是部署的应用是v2。现在,一共有6台虚拟机,其中3台运行v1版本,另外3台运行v2版本,但此刻负载均衡控制的网络流量仍然导向v1集群,用户感受不到任何变化:
v2集群部署成功后,做一些自动化冒烟测试和内网测试,如果有问题,直接销毁,相当于本次部署失败,但无需回滚。如果没有问题,通过负载均衡把流量从v1集群切到v2,用户可无感知地直接访问v2版本:
稳定一段时间(例如15分钟)后,销毁v1集群。至此,整个升级完成。
上述的蓝绿部署就是CodeDeploy的一种标准部署流程。CodeDeploy也支持灰度发布,适用于更大规模的应用。
把计算资源不可变应用到部署上,实际上是充分利用了弹性计算这个优势,短时间创建和销毁虚拟机,只有上云才能做到,并且针对云计算,把部署流程变得更加简单可靠,每天发几个版本甚至几十、几百个版本都变得可能,DevOps能落地,有点“云原生”的味道了。
说到AWS的CodeDeploy,最早我使用AWS时,对于它的计费采用Reserved Instance预付模型感到很不理解,租用一台虚拟机,按国内阿里云、腾讯云包年包月预付享折扣不是更直观吗?如果仅仅把上云变成租用虚拟机,那就完全丧失了弹性计算的优势,相当于租用了一台虚拟机在里面自己折腾。AWS的Reserved Instance计费并不绑定某一台虚拟机,而是一种规格的虚拟机。
我们还是举例说明,如果我们有1台2v4G规格的虚拟机,并购买了1年的Reserved Instance,那么,我随时可以销毁这台虚拟机,并重新创建一台同样规格的新的虚拟机,Reserved Instance计费会自动匹配到新的虚拟机上,这样才能实现计算资源不变,频繁实施蓝绿部署,真正把部署变成一种云服务。最近阿里云终于推出了节省计划的付费模式,有点真正的云计算的付费味道了,但是腾讯云、华为云还停留在包年包月和按量付费这两种原始租赁模型。
讲了这么多自动化部署,实际上一个指导思想就是如何充分利用云的弹性计算资源。从充分利用云的弹性资源为出发点,设计一整套开发、部署、测试的流程,就是云原生。弹性资源利用得越充分,云原生的“浓度”就越高,就越容易实施小步快跑的快速迭代。
那么虚拟机是不是弹性最好的计算资源呢?从应用的角度看,显然容器是一种比虚拟机更具弹性,更加抽象,也更容易部署的计算资源。
容器和虚拟机相比,它实际上是一种资源隔离的进程,运行在容器中的应用比独占一个虚拟机消耗的资源更少,启动速度更快。此外,容器的镜像包含了完整的运行时环境,部署的时候,无需考虑任何额外的组件,比其他任何部署方式都简单。使用容器,开发部署流程就变成了开发,生成镜像,推送至Docker Hub或云服务商提供的Registry,直接启动容器,整个过程大大简化。
使用容器比使用CodeDeploy部署还要更加简单,因为CodeDeploy需要在虚拟机镜像中预置Agent,由于没有统一的发布标准,还需要配置CodeDeploy,告诉它去哪拉取最新版本,这又涉及到一系列权限配置。而容器作为标准的部署方案,连发布系统都以Registry对各个镜像版本进行了有效管理,所以部署非常简单。
容器作为一种弹性计算资源,也应遵循计算不变性,即不要给容器挂载可变的存储卷。一组不变的容器集群才能更容易地升级。容器的运行方式本身就遵循了不变性原则,因为通过一个镜像启动一个容器,在运行过程中,是不可能换一个镜像的。容器本身也强烈不建议应用写入数据到文件系统,因为重启后这些修改将全部丢失。
容器的启动和销毁非常容易,不过,容器的管理却并不简单。容器的管理涉及到创建、调度、弹性扩容、负载均衡、故障检测等等,Kubernetes作为事实上的容器编排标准平台,已经成为各个云服务商的标配。
如果要直接使用K8s,在云环境中首先要有一组虚拟机资源作为底层资源,然后搭建K8s环境,定义好容器编排并启动容器。云服务商几乎都提供托管的K8s服务,但直接管理K8s仍然需要非常熟悉K8s的工程师。
还有一种更简单的使用容器的方式,即完全将底层虚拟机和K8s托管给云服务商,企业客户只需关心如何部署容器,底层的K8s和虚拟机对企业不可见或者无需关心。AWS的Elastic Container和阿里云的弹性容器均为此类服务。对于中小规模的应用来说,计算资源直接使用容器,再配合云服务商提供的负载均衡,托管的数据库、消息系统、日志系统等组件服务,应该是目前最“云原生”的一种方案。
最后,我们总结一下云原生的特点:
所谓云原生,就是在上云的过程中,充分发挥云平台的弹性计算、弹性存储的优势,尽量把应用设计成适合云计算的架构,把部署设计成简单易用的流程,这样才能实现业务快速上线,快速迭代。
云原生是一个大方向,在上云的过程中,逐步改造应用架构和部署流程,从手动往自动转,逐步增加计算资源的弹性,就能把云原生一步步落地。
‘柒’ 什么是“云原生存储”产品有哪些特点有哪些商用的产品
1、云原生存储
云原生存储的概念来源于云原生应用,指一个应用为了满足云原生特性的要求,其对存储所要求的特性是云原生存储的特性,而满足这些特性的存储方案,可以称其为倾向云原生的存储。能够提供这类服务的产品,就是云原生存储产品。
2、云原生存储产品有哪些特点?
块接口——优点:高可用、低延迟、单应用吞吐更高 缺点:容量弹缩弱、数据共享性差。
文件系统接口——优点:多负载共享数据、多负载吞吐更高 缺点:共享数据时,文件锁性能差。
对象存储接口——优点:高可用、大容量、多负载共享数据、多负载吞吐更高 缺点:时延高。
3、具体推荐要根据实际情况来定,不同的接口偏向不同的业务。