理解了云原生,才能正确迎接云时代的到来
在探讨过无服务器技术《沉寂多年,无服务器爆发,其硬核是什么?丨技术前沿》和裸金属技术《未来将是容器和裸金属的天下,这话有道理吗?| 技术前沿》的发展后,本篇我们讨论云原生(Cloud Native)技术。
如果说无服务器和裸金属的爆发属于间歇性的,那云原生这几年的热度就称得上持续火热,且随着云计算普及进程的不断加深,有愈演愈烈的趋势。今天再谈云原生已经不是少数几个大企业的专属,越来越多的企业正在拥抱它,享受它带来的红利。
究竟什么是云原生?能带来什么价值?本文第一篇将进行全面的梳理,后续将逐步介绍相关的技术和趋势。
云原生四要素
云原生,顾名思义,面向云而设计的。设计的什么?一套方法、一套理念、一套工具……
最早人们对云计算的认识就是改变了基础资源的使用方式,业务会逐步迁移上云。但现在再看呢?远不止这一点。云计算在重新构建IT运行的规则,“上云”和“云上”是两个概念。上云是过去对云计算的认知,也就是迁移;而云上是现在及未来对云计算的认知,是云上重新构建,这是云原生的本质。
举个例子对比,上云和云上就像后天培养和天生就有,区别是显而易见的。
进一步说,云原生的概念最早由来自Pivotal的Matt Stine于2013年提出,一直延用至今。它是Matt Stine根据其多年的架构和咨询经验总结出来的一个思想集合,并得到了社区的不断完善,包含内容非常多,囊括众多板块,如:
DevOps
持续交付(Continuous Delivery)
微服务(MicroServices)
敏捷基础设施(Agile Infrastructure)
12要素(The Twelve-Factor App)
……
不仅有企业文化、组织架构的重组与建设,也有方法论与原则,以及具体的操作工具。
12要素已经说了很多年了,这里将思维导图整理出来,供参考。
所以,云原生不是一个具体的产品,也绝非是把原先在传统IT架构中的东西搬上云,而是基于云的一种全新IT理念,必须是与之相关的包括应用的架构、应用的开发方式、应用的部署和维护方式都要做出改变,这样才能真正发挥出云的价值,包括弹性、动态调度、自动伸缩等,享受新IT技术带来的红利。
为了更好地推进云原生技术的发展,2015年由谷歌牵头成立CNCF,即云原生计算基金会。目前,基金会成员已有一百多家企业与机构,包括百度、亚马逊、微软、思科等巨头。
当前,CNCF所托管的应用已达14个,下图为其公布的Cloud Native Landscape,给出了云原生生态的参考体系。
CNCF认为云原生系统应该具备三大特征:
容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。
自动化管理:统一调度和管理中心,从根本上提高系统和资源利用率,同时降低运维成本。
面向微服务:通过松耦合方式,提升应用程序的整体敏捷性和可维护性。
要充分理解云原生,必须对其每一个板块进行了解。而当前,业界对云原生的看法是非常一致的,那就是四要素:持续交付、DevOps、微服务、容器。
一个一个展开。
容器,云原生的基石
容器不是新概念,1979年就出现了。
很多人会将Docker与容器划等号,其实不然,Docker只是容器理念最普及的一种应用技术。容器的英文单词是Container,有集装箱的含义,而借用集装箱技术会很好理解容器的优势。集装箱的特点,在于标准化,这样可以大量堆叠,装卸也很方便。容器也是这样。
与容器做比较的是虚拟化技术。早期,大家认为硬件抽象层基于Hypervisor的虚拟化方式能够最大程度实现系统管理的灵活性,因为各种不同操作系统的虚拟机都能通过Hypervisor生成、运行、销毁。但是,随着时间推移发现,Hypervisor没有想象的那么好,因为它的原理是每个虚拟机都要安装一个完整的操作系统和大量的应用,而实际生产环境大家更关心的是自己部署的应用。显然,如果每次都部署一个完整的操作系统和大量关联的开发环境,开发效率、管理效率都会很低下。
于是有了容器这种方式,简单说,它只把应用代码运行所需相关的环境打包、封装进了一个系统,就像集装箱一样,直接运走就行,不用关心船是什么样,到哪都可以跑起来。
容器技术有四大特点:
极其轻量:只打包了必要的Bin/Lib;
秒级部署:根据镜像的不同,容器的部署大概在毫秒与秒之间(比虚拟机强很多);
易于移植:一次构建,随处部署;
弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。
换句话说,使用容器,用户可以将微服务及其所需的各种配置、依赖关系和环境变量很方便的移动到全新的服务器节点上,而无需重新配置环境。
在容器领域,Docker是最受欢迎的容器格式标准。同时,与Docker配合使用的Kubernetes则成为了容器编排和管理工具中的事实标准。
微服务,改变产品开发方式
微服务是什么?重点在“微”。它的核心是将单个应用程序作为一组小型服务来开发。原来一个产品的开发可能是拆成几个大的模块,然后由几个团队来做,然后再合,微服务的理念是把一个产品拆的更细,可能一个人、几个人负责一个服务的开发,每个服务之间都是独立的。
每个服务都在自己的进程中运行,并使用轻量级机制(通常是基于HTTP的API)进行通信。 这些服务是围绕业务功能构建,可以通过全自动部署机制独立部署,不需要集中管理,可以用不同的编程语言编写,并使用不同的数据存储技术。
所以,微服务核心就是服务粒度要小,每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情。但是又不能太小,否则易发生“服务爆炸”。通常在工程实践中,如果一个功能被两个或两个以上的服务调用,就可以被封装为服务。
所以,微服务的优点很明显,小而美、松耦合、灵活、易集成,但是挑战也很明显,最大的问题在于服务如何切分。其实,早在1968年康威就提出了——康威定律,系统的服务划分应该是根据组织架构的功能来划分。这一点用在微服务领域也非常合适。
这样按照组织架构划分的优势在于:
1.内聚更强,所有遵循同一种业务准则的人内聚在一起,就容易解决问题。
2.服务解耦,变更容易,更加敏捷。
DevOps,内部协作更紧密
DevOps,如果从字面上来理解,是Dev(开发)+Ops(运维)。
实际上,可以把DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
为什么要整合?因为能帮助企业提升效率。
众所周知,传统的软件组织将开发、IT运营和质量保障设为各自分离的部门。开发与运营之间存在着信息“鸿沟”──例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。
每个部门需求都不同,怎么调和?DevOps的价值就体现在这。DevOps的引入能对产品交付、测试、功能开发和维护起到意义深远的影响。其最大的价值在于,透过自动化“软件交付”和“架构变更”的流程,能使得构建、测试、发布软件更加地快捷、频繁和可靠,这是每一个企业都期望的。
因此,更深层次的理解,DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动。
持续交付,云原生终极目标
如何理解持续交付?听着比容器、微服务、DevOps更抽象。简单来说,它是一种状态,一种能力,就像生产线能持续交付产品一样。
具体而言,持续交付是一种软件工程手法,它能让软件产品的产出过程在一个短周期内完成,保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。
为什么要有持续交付?这是和曾经的软件开发方式相比的,过去的软件开发周期以月、季度、年来计算,今天呢?一个应用晚上线一个小时造成的损失都可能是巨大的,所以要小步快跑、快速迭代,这就是持续交付的价值所在,不断的交付,不断的修正。
很显然,如果把云原生的四要素串联起来,持续交付才是最终目标。但要实现持续交付,容器、微服务、DevOps缺一不可。
总结一下,云时代必须以全新的理念来看待软件架构和基础设施,只有从这个角度理解云原生才能得到正确的答案。未来必然是属于云原生的,所以,企业变革的绝不仅仅是工具,而是从思想到方法,再到工具的一整套理念。只有这样,才能更好迎接云时代的到来。
本文由百度开发者中心发布,一个面向开发者的知识分享平台,专注于为开发者打造一个有温度的技术交流社区,开发者通过平台来分享知识、相互交流。 developer 发布!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
手把手教你用免费代理ip爬数据
/1 前言/ 玩爬虫的都避免不了各大网站的反爬措施限制,比较常见的是通过固定时间检测某ip地址访问量来判断该用户是否为 “网络机器人”,也就是所谓的爬虫,如果被识别到,就面临被封ip的风险,那样你就不能访问该网址了。 通用的解决办法是用代理ip进行爬取,但是收费的代理ip一般都是比较贵的,网上倒是有很多免费的代理ip网站,但是受时效性影响,大部分地址都不能用,有很多维护代理ip池的教程,即把爬取并检测后能用代理ip放到“代理池里”,等以后要用的时候再从里面提取,在我看来,这种效率比较低,因为这类IP地址很快就失效,我们要做的是边检测边使用,充分保证免费IP的时效性。 /2 抓取IP地址/ 下面就开始实战操作。 1.首先我们随便找一个免费代理ip网站,如下图所示。 2、打开网页查看器,分析其网页元素结构,如下图所示。 3、就是一个简单的静态网页,我们用requests和bs4将ip地址和对应端口爬下,如下图所示。 4、每一行ip地址都由5个标签组成,而我们需要的是第一个标签(对应IP地址)和第2个标签(对应端口),所以从第一个开始,每隔5个取出ip地址(item[::5]),从第二个开始...
- 下一篇
关于Java序列化的问题你真的会吗?
引言 在持久化数据对象的时候我们很少使用Java序列化,而是使用数据库等方式来实现。但是在我看来,Java 序列化是一个很重要的内容,序列化不仅可以保存对象到磁盘进行持久化,还可以通过网络传输。在平时的面试当中,序列化也是经常被谈及的一块内容。 谈到序列化时,大家可能知道将类实现Serializable接口就可以达到序列化的目的,但当看到关于序列化的面试题时我们却常常一脸懵逼。 1)可序列化接口和可外部接口的区别是什么? 2)序列化时,你希望某些成员不要序列化?该如何实现? 3)什么是 serialVersionUID ?如果不定义serialVersionUID,会发生什么? 是不是突然发现我们对这些问题其实都还存在很多疑惑?本文将总结一些Java序列化的常见问题,并且通过demo来进行测试和解答。 问题一:什么是 Java 序列化? 序列化是把对象改成可以存到磁盘或通过网络发送到其它运行中的 Java 虚拟机的二进制格式的过程,并可以通过反序列化恢复对象状态。Java 序列化API给开发人员提供了一个标准机制:通过实现 java.io.Serializable 或者 java.io...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群