微服务器容器化是什么
‘壹’ 容器,微服务与OpenStack到底是什么关系
容器,微服务与OpenStack到底是什么关系
容器化不是一个革命性想法——容器技术已经存在很多年并且被大橘扮慧量应用程序所使用,但现在,容器几乎不考虑系统体结构。
今天,相信很多缺敬人都听说过Docker。一年多以来,很多公司都在评估Docker,也有很多公司想要使用Docker,但是很少公司真正把Docker应用在生产环境中。那这一年发生了什么变化呢?
Docker让容器化变得更加简单。
在Docker出现圆答之前,运行容器需要成群的骇客,需要对整个系统有深入的理解,还需要一定的勇气。进程隔离或者网络堆栈是存在已久的一些技术,想想FreeBSD中的Jails或者其他类似的工具。但现在有了Docker,只需要使用( docker)命令就能在几秒钟内让一些东西运行起来。
即时满足感不是Docker成功的唯一原因。大量免费应用程序的镜像能够吸引很多想要快速部署微服务以达到更大体系架构的人,但这些人不希望每次都重新部署虚拟化堆栈。
‘贰’ 容器云技术有什么特点
1.容器云技术在计算形态上面是一种轻量级的虚拟化技术,是进程级的虚拟化形态封装,容器的启动和部署的迅速,可以在应用层面按照资源进行快速的部署和调度的,这样生命周期的变化速度也就很快了。
2.它是可以移植册中基的一种技术,能够降低成本。当前容器云技术的现代形式,主要是体现在应用程序容器化和培纳系统容器化方面。这两种形式的容器都是可以让IT团队从底层的架构中抽象出程度代码的,这样就可以实现跨各种部署环境的可移植性了。
3.容器一般是位于物理服务器以及主机操作系统之上的。它可以通过单个的操作系统安装去运行多个工作环境,州谨因此容器是非常轻的,它们只有几兆的字节,只需要几秒钟就可以启动了。另外,内存,存储和CPU效率的提高,是容器云技术的关键优势。它可以在同一基础架构上面支持更多的容器,这样就可以减少管理方面的开支了。
国内做的比较好的我推荐时速云,他们服务过500+的中大型客户,不仅涵盖容器云 PaaS、DevOps、微服务、ServiceMesh、API 网关等核心云原生产品,还可以为企业提供数据开发、数据治理、数据资产、数据服务等数据能力。感兴趣的可以去了解一下!
‘叁’ 微服务是如何演变的,又为什么重要
微服务的概念产生是顺应这样的需求:为了开发出速度更快、更有弹性且用户体验更佳的应用。这个概念等同于具有可扩展性的自动化系统,在简单的商业化架构上运行软件。由于容器所提供的经济效率,在2016年微服务将是一大主题。
应用快速开发的需求影响到了全部公司,以及如何看待历来业务安排的方式。来自微服务的新实践代表着需要小型团队以对于公司来说陌生的方式——自上而下进行迭代。这意味着企业运作的方式将获得彻底的改变。
现在在针对应用架构与微服务的新思蔽咐考方面,容器生态系统逐渐成为核心主题。根据Battery Ventures技术人员Adrian Cockcroft的说法:关于微服务有一些基本的原则需要思考。首先,如今构建软件的价格更为低廉,容器的出现降低了成本。Docker被所有人纳入蓝图——从软件供应商到终端用户,所有人都在尝试找出容器的用法,因为用它就能加快软件的交付节奏。不过这也代表着要安装的系统是应用级别的,也就是说在应用的开发、部署与管理方面出现了不同的需求。
Adrian Cockcroft在面向对象软件架构大会上关于微服务的演讲,以卡通形式呈现,作者是Remarker
举个例子,对于要处理服务与堆栈范围增长的公司来说,监控比以往更加重要。要想解决问题,必须对数据日志进行分析,而这些日志很可能横跨临时节点与多项服务。由于需要李并碰细化监控与加强工具,从业人员能更好地掌握这些构建模块对于应用所依赖的许多潜在微服务的影响。
那么起作用的是什么呢?从公司与API开始:基于微服务的产品团队与另一个基于终端的平台团队之间靠API连接,通过API调用以及企业基础架构持续作出相应的回应来生效。
微服务被定义为特定背景下松耦合、面向服务的架构,允许在无需理解其他部件运作原理的情况下进行更新。整个服务是跨公司构建的,但所有权却在同一个地方。微服务架构提供了更多系统间的点对点调用。消息形式必须灵活,所有部件在无论哪个版本中都能运作。这意味着在构建微服务架构时,我们需要一些工具来配置、探索、输送流量、观察与构建系统。
IBM杰出的工程师兼IBM云计算中心的CTO Andrew Hately作出了类比:15年前人们可能需要每周查看一下自己的银行余额,而互联网允许人们实时查看余额甚至做出进一步操作,也许随着智能手机的发展,很多事情都发生的改变。如今,人们可以即时访问自己的账户收支信息。这种速度与即时性代表着:在过去的5-10年内,企业提供服务的发展速度必须跟得上社交网络与搜索公司发展的速度。
公司必须处理员工、消费者、系统与所有可能组合之间的持续互动——就像Hately所说的完全互联与持续可用。这意味着企业流程需要重建,需要将所有东西连接起来。如果公司不进行这方面的尝试,也无法提供相应功能的话,很快就会面临收入减哪谈少甚至出局的局面。
Hately表示:“工具非常关键。” 有数百家网站不支持代码,收到反馈后,在下一组测试用例中消费者就能使用它了。这种严格的开发过程提供了一种企业工作方式,也为微服务发展提供了思考方式。DevOps中的ops也会执行这样的工作。如果你有一小段代码并为其定义指标的话,就能细分出哪些会成功,哪些会失败。
IBM通过为消费者及内部团队构建反馈通道与成功标准,在敏捷、DevOps、精益生产与其他迭代进程中结合最佳实践,创建了名为IBM Bluemix Garage Method方法的企业方法论。IBM Bluemix Garage Method方法将企业解决方案的可靠性及可测试性与最新开放社区在规模质量上的最佳实践结合起来,持续创新、创建持续交付渠道并在云平台上进行部署。这种方法很有价值,向所有人开放资源能够提高个人、团队与全公司的DevOps技能,以及管理与监控能力。
软件相关的契约
第一代的容器管理平台支持这些速度更快的开发进程。Docker的产品高级VP Scott Johnston表示,在Docker Compose中,微服务促进了工具发展,YAML文件扮演了描述不同组件的清单(manifest)。Compose让开发人员得以用抽象的方式描述多容器应用,它可以描述web容器、数据库容器、负载均衡及其间的逻辑关系,无需连网或部署存储。
Engine Yard的Matt Butcher表示:微服务是软件相关的契约。有些人会辩称微服务是正确执行的面向服务架构(SOA)。开发者想要的是有用、功能丰富且结构优雅的架构。微服务使得软件开发回归Unix的根源——将一件事完成得很好。用Unix可以任意输出命令。微服务不止在如何优秀地完成工作方面,同时在如何与环境互动方面也表现出契约性。如果运行良好,它所做的工作就像是优秀的Unix shell脚本。
举个例子,Kubernetes清单文件格式扮演着契约的角色,这个清单提供了所需的来源细节、存储卷定义、存储需求等,扮演了强大的DevOps类契约。它让开发者和运营者了解想要的内容。开发者与运营者之间的关系不再如同之前那样——开发者被迫只管自己的一摊工作。
一张清单可能会包括应用元数据,加上具体版本的描述性参数,其中可能还有多个清单。也许是一个实例、一个pod清单、一个复制控制器(replication controller)或者一个服务定义,还有组成文件的已知来源位置。任意标签可能由图表中所包括的组件来定义。
Butcher表示:“应用开发者在这方面的体验够深刻了。一旦出现典型问题,就会说丢过墙去,各管各的,反正有DevOps来负责生产环境中的运行事宜,开发者只负责开发,总有一个切换过程,往往会成为各扫门前雪的后果。”
如果开发者构建容器,会存在一定的水平保证(由抽象层决定):这些容器的运行方式在生产阶段与开发阶段是一样的。这已经缓解了让懂得容器这个基本工具的DevOps专业人员感到头疼的大多问题。容器化已经提供了这种保障,不过像Helm(Engine Yard所提供的新服务)之类的产品有助于进一步规范化这种关系,具体表现为团队间的契约形式——团队成员不能再推卸责任,各扫门前雪了,而要全程参与。
从虚拟机与Monolith,到容器,再到微服务
根据Joyent的CTO Bryan Cantrill的说法:容器为原生云架构提供了基础,与传统的虚拟化形式相比,象征着一种新的应用架构形式。在使用较大的机器来进行计算时,基于硬件的虚拟化或者传统虚拟机流行过一段时间。虚拟机为运营团队提供了管理大型整体应用的方式,就像Cantrill说的“过于臃肿”,而硬件定义了企业架构。虚拟机建议在底层之上,承担了运营系统的负载。但是容器创建了一个全新而更敏捷的抽象。就是Cantrill的那句话:“应用继续减肥速成修炼。”
如今,唯一的麻烦在于如何将虚拟机和monolith换成容器和微服务。各家公司还在想方设法执行这种转变,因为两种方式对应用架构、基础设施还有公司自身整体的思路都是迥异的。
Cantrill表示:Joyent的开源Triton服务,其目的就是为了简化与加速公司向容器与微服务的转变。它允许开发者简化架构,只提供容器,不提供虚拟机。由于无需配置网络等操作,用户可以通过阅读微服务手册,在短时间内完成部署。
Cantrill表示,Joyent公司是Docker Compose的粉丝,因为Compose可以用来与单独的Docker Engine通讯。Docker的远程端点由Triton部署,从而虚拟化了整个数据中心。使用这些工具,很容易快速让一个完整有弹性的运营服务运转起来。正如Cantrill所言:“这是大势所趋。”
VMware的CTO Kit Colbert从如何沿着容器之旅前进的角度来观察市场。VMware着重运营领域。现在它开发了一种方式,来满足新的开发人员及其需求,不过是作为基础架构提供商存在。
对于VMware来说,这家公司将自己视为基础设施提供商,而不是以应用为中心、面向架构的公司。Colbert只看到了对Cloud Foundry感兴趣的消费者,不过也有人想要DIY的方法。VMware正在设法通过vSphere集成容器(VIC)与Photon平台对应用技术提供支持。
为了让消费者适应使用容器,vSphere集成容器(VIC)让容器化工作负载称为vSphere的重中之重。VIC适合在开发进程中运行,将容器化最有价值的一个方面应用在容器中:灵活并具有动态的资源界限。通过虚拟化,VMware将普通硬件转化为简单、可取代的财产。同样,通过在虚拟机中应用Docker端点,vSphere集成容器创建了完全动态边界的虚拟容器主机。结果就是对传统与基于微服务应用同样支持的基础架构,允许IT与开发者的访问。
相比之下,VMware的Photon平台是专为原生云应用设计的。Photon平台由最小的管理程序与控制面板组成,专为微服务提供速度与规模的服务。Photon平台在设计时还考虑到了开发者通过API使用时的易用性,让这个平台成为一个提供应用程序与快速部署的自助服务平台。
从VMware的角度来说,运营团队也在推进部署速度。现在更着重于数字化体验或者软件如何提供更多功能方面。很类似我们如何看待在智能手机上使用的应用。供应商可能以声音很大的扬声器而闻名,不过服务的应用是否能提供功能?
Colbert询问:“我能依赖它吗?” 公司必须找出构建应用,为寻找高质量应用的消费者提供服务的方式。想要继续进步,就必须找到这一点。很多拥有外置式、虚拟化基础架构的消费者希望:随着应用开发进程的加快,解决公司面临的挑战。
在微服务时代的开发
软件开发是迭代式的,需要持续的反馈循环才能奏效。这也是类似IBM Bluemix Garage Method所提供的工具所提供的功能。不过大多公司是根据模型来执行的,这与开发者工作的方式不同。开发者不会按照销售、市场推广、财务等部门人员的方式来工作,开发者不是按照计划或方案来执行工作的。软件开发的过程有更多的迭代,并非瀑布式自上而下的。
Pivotal的首席技术Michael Coté表示:“我不知道怎么说,不过真实世界与软件世界是完全不同的。”Coté辩称:找出软件开发的方式似乎非常矛盾,不过事实上确实阻止了人们想要根据一份文档来了解一个巨大机器的所有部件的工作方式。通过遵守软件开发的原则,各家公司找到了自己的办法,而不是严格遵守固定的计划。
Coté认为,没有执行微服务的固定道路。用微服务可以在运行中和架构上获得灵活性。微服务根据简单的原则构建出真正复杂的东西。原则越简单,所能创造的东西就越复杂。
不过,如果把复杂性转移到其他地方会发生什么?Pivotal这个平台管理着复杂程度。去掉选择,让消费者无需考虑网络、运营系统等问题。它允许消费者将复杂性放在应用堆栈的顶层,在为终端用户提供服务时能够更好的区分服务。Hately表示:“在科技行业,我们看到了另一个文艺复兴时期。”
同样地,IBM Bluemix Garage Method也希望简化复杂性,以便让开发者的工作更有效率,能够更好地享受自己的工作。所有这些努力都为企业提供了巨大的机会,无论在技术还是文化层面。
‘肆’ 浅谈对微服务的一些思考
两年前,第一次真正接触微服务的概念,但也只是简单地进行了使用,当时技术栈主要是 Spring Boot,那时 Spring Cloud 也比较流行,但是由于各种原因,并没有转向这套(甚至用 zookeeper 实现了简单的服务发现),理论上来说,用了 Spring Boot 再转向 Spring Cloud 应该是很正常的事情。当时也认为 Spring Cloud 各种理念很高级,实现上也不错,也有 Netflix 等之类的大公司背书,而且和 Spring 天然集成的,使用起来还是比较方便。当时可能觉得其他的 RPC 框架:如 Dubbo 和 Spring Cloud 相比简直差了一个档次,可能大家都认为 Spring Cloud 是未来。
从第一家公司离职后,去了另外一家公司,发现一个很奇怪的特点,这家公司的技术比较保守,基本还是十年前或者五六年前的技术架构困燃。记得之前看过一本书上说过,技术不与时俱进,那就相当于自取灭亡,特别是技术驱动型公司,如果一直停滞不前,那就相当于你拿几十年前的武器和别人战斗,那结果自然是必然的。为什么技术要与时俱进,不是因为有了新技术就要去使用它,而是因为新技术往往可以提高业务的运转效率,同时也可以降低成本。不过在这个公司待了两个月,还是觉得有可取的地方,第一点是对代码质量的追求,由于业务的体量和特殊性(大概是亿级),所以对代码有较高的要求;第二点是对微服务整体架构的深入,虽然这个系统没有上 Spring Cloud ,甚至 Spring Boot 都没有,还是很老的一个架构,但其中微服务的思想已经有了,比如服务的拆分,服务的水平扩展,基于 Dubbo 的一些伍尺冲服务发现和治理,整体来说已经算是不错了,但是也总在思考,感觉还是少了什么东西。
容器化和 CI/CD
后来又到了一家比较年轻活跃的公司,接触到 Docker 的大规模使用以及 CI/CD,也是在这里,形成了整个对微服务完整生命周期的理解。 Docker 其实流行也很久了, 但是真正线上使用的并没有那么多,最近随着 Kubernetes( k8s ) 的流行,更多公司也开始关注起来。
首先为什么服务要容器化,第一点是不再依赖于运行环境,只要有 Docker 就可以跑起来,无论你是什么发行版的 Linux 系统,还是 Windows,Mac。这有点像 JVM,屏蔽底层的细节,一次编写,到处运行,用在容器上就是一次构建,到处运行。第二点是容器化可以更好的进行持续集成,由于第一点的缘故,部署一个服务容器将非常快捷,这更加适合目前 devops 的理念。
持续集成(Continuous Integration)简称 CI ,持续部署(Continuous Deployment)简称 CD,如果微服务不把 CI/CD 放在首位,那必然整个流程就是不流畅的。有些公司还是手动本地构建包,然后 上传 到服务器上跑起来,进行这样的人肉运维,人肉上线,要么考虑一下,是不是整个 CI/CD 有问题,或者根本就没有 CI/CD 。其次 CI/CD 流程要做到每次构建自动跑单元测试,集成测试,以及 API 测试,UI 测试等等,这些流程也没有自动化的话,也谈不上完整的 CI/CD。如果没有经过这些流程把包直接上传到服务器,不出问题,那应该要烧柱香,拜拜佛。
云原生应用和服务网格
云原生应用遵循 Twelve-Factor ,云原生应用是为了解决传统应用发布升级流程缓慢、架构复杂,可维护性差而提出的的一个思腔歼想集合,集中了 微服务,devops,云等多种思想。
云原生应用应用可以跑在任意一家云服务商上,也可以实现多家服务商同时使用,同时也支持公有云和私有云的混合部署,这只是它的一个特点,更多的特点还是集中在解决传统应用面临的问题,如灰度发布,不停机发布,A/B Test, 快速回滚,服务治理等。
服务网格(Service Mesh)是一个比较新的概念,但是核心思想并不新。Spring Cloud 以框架的形式侵入到程序中来解决微服务的各种问题,理论上来说,应该是效率最高,最灵活的一种做法。但是侵入性太强,而且只能 Spring 这套,异构语言的系统玩不转。Service Mesh 从另外一个角度来解决这个问题,也就是 sidecar 和 proxy,这样虽然性能上有些损失,但是扩展性却是比较灵活的,将这些基础能力(服务发现,服务治理,熔断限流,监控等)下放到基础设施中,做到对应用程序透明,是一个不错的进步。写业务逻辑不需要再去和这些东西纠结,代码逻辑也变得十分明朗。同时这样也解决了异构语言系统的问题,无论什么语言,都是可以完美的工作在一起,简直是一个完美世界。但是但是但是 Service Mesh 由于还比较新,目前还不能进行生产环境使用,就拿目前最流行的 Istio 来说,目前只发布了 0.8 版本,还不能实际使用,估计 1.0 也不行,可能得 1.2 才推荐生产,所以现在就面临一个困境,Service Mesh 是一个好东西,但是我们却用不了,呜呼哀哉。
Spring Cloud 和 Service Mesh
首先两者解决问题的方式不一样,Spring Cloud 是直接的方式,Service Mesh 是委婉的方式,这可能会造就两者之后的命运。如果目前已经上了 Spring Cloud 或者其他的,系统已经具有基础的服务治理能力,先不要考虑 Service Mesh ,要先去考虑容器化和 CI/CD ;如果没有太多的 历史 负担,则是可以考虑。
总结
技术发展太快,不能停滞不前,也不能盲目追风。当年的 SSH 也只剩下了 Spring,可是有人说 Spring 只能一个季节用,但是 Service Mesh 整年都可以用,好像很有道理。最后,路漫漫而修远兮,吾将上下而求索。
‘伍’ 全栈工程化实战之(一)—容器化和基础环境
在虚拟机(VMware)出现以前,应用的部署由于依赖问题,往往新应用要部署在独立的服务器上,导致硬件资源利用率低下,VMware的出现完美的解决了这个问题。
但是,VMware也存在不足,首先樱察VMware实际上是虚拟独立的OS,这需要额外的CPU、RAM和存储资源;其次,由于虚拟机是独立的OS,因此启动比较慢;最孙兆后,对于独立的OS,需要单独的补丁&监控,对于商业应用还需要系统的授权许可。
基于以上原因,以google为代表的大型互联网公司一直在探索以容器技术替代虚拟机模型的缺点。
在虚拟机模型中,Hypervisor是 硬件虚拟化(Hardware Virtualization) —将硬件资源划分为虚拟资源打包进VM的软件结构中,而容器模型则是 操作系统虚拟化(OS Virtualization) 。
容器共享宿主机OS,实现进程级别的隔离,相对于虚拟机,容器 启动快、资源消耗低、便于迁移 。
现代容器技术起源于Linux,依赖的核心技术包括 内核命名空间(Kernel Namespace)、控制组(Control Group)、联合文件系统(Union File System) 。
容器技术的复杂性使其难于推广,知道Docker的出现,Docker使得容器技术的使用变得简单。
目前还没有Mac容器,windows平台win10和win server2016已经支持windows容器。
注意,因为容器是共享宿主机操作系统的,因此windows容器是不能运行在Linux系统的,但Docker for Mac和Docker for Windows 通过启动脊凯茄一个轻量的Linux VM来支持Linux容器
在windows中,系统必须是64位windows 10且开启 Hyper-V 和容器特性。
略,Mac安装参考 这里 ,windows安装参考 这里 。
安装成功后,执行 docker version 输出类似下面的内容:
镜像是由多个层组成的,包含一个精简的OS和应用和依赖包的独立对象。镜像存储于镜像仓库 官方镜像仓库服务 。
可以通过命令 docker image pull 镜像名 拉取镜像,一个完整的镜像名如下:
<ImageRegistryDomain/><UserId/>:repository:<tag>
容器是镜像的运行时实例。
容器即应用。
将应用整合到容器运行的过程称为容器化。
容器化的一般步骤:
下面正式进入正题,通过容器化的方式定制一个全栈开发基础环境。
创建容器运行脚本startup.sh:
最后执行构建命令 docker image build . 。
‘陆’ 容器云是什么技术对比于虚拟机有什么特点
容器云是近两年在云计算技术中新兴的一种产品形式,容器在计算形态上是归属于轻量级的虚拟化技术。和传统虚拟化内核级的Guest OS的封装不同,容器服务是进程级的虚拟化形态封装,启动速度和部署的速度都十分迅速,能够在贺蔽应用层面根据资源的需求进行快速部署与调度,生命周期变化速度快。
之所以会有容器云的出现,主要还是因为时代的发展趋势所导致。由于在2010年,国外Cloud,Docker等容器技术刚刚创立,这无非给云计算指明了一条明确的道理,此后K8s和Docker等技术就火的一塌糊涂。
而对比于传统虚拟机,容器云有什么特点呢?
一:可移植性
目前容器技术主要体现在应用程序容器化(Docker)和系统容器化上。这两种形式的容器都能让IT团队从底层架构中抽象出程序代码,进一步实现各种部署环境的可移植性。
二:轻量级
容器通常部署在物理服务器及其主机操作系统上,它可以通过单个操作系团核统安装来运行多个工作环境,因此容器云特别“轻”,仅仅需要几秒钟就可以启动。
三:降低成本
与传统虚拟机相比,CPU,内存和存储效率的提高是容器技术最大优势。在同一基础架构上支持更多容器,那么这些资源的减少就转化成巨大的禅或州成本,同时也大大减少了管理开销。
‘柒’ 容器是什么
是云原生的核心技术,它是一种相对于虚拟机来说更加轻量的虚拟化技术。能为我们提供一种可移植、可重用的方式来打包、分发和运行程序。
容器的基本思想就是将需要执行的所有软件打包到一个可执行程序包。例如,将一个Java虚拟机、Tomcat服务器以及应用程序本身打包进一个容器镜像。用户可以在基础设施环境中使用这个容器镜像启动容器并运行应用程序。想要了解更多,我推荐你去看看时速云,他们是一家全栈云原生技术服务提供商,桐早羡提供云原生应用及数据平台产品,其中涵盖容器云PaaS、DevOps、微睁漏服务治理、服务网格、API网关等。大家可以去体验一局拍下。
希望能给您提供帮助,可以给个大大的赞不。
‘捌’ 微服务中的容器技术---Docker(一),Docker的安装和使用
在微服凳磨系统中,因为服务特别多,如果手动部署以及启动、重启等工作会比较繁琐,这里会涉及到自动化部署谨仿,自动化部署就需要用到容器技术,虽然这里基本属于运维范畴,但是开发者还是需要了解一下,以及简单操作使用需要会。
现在比较热门的容器技术当然还是Docker了。关于容器和Docker的名词解释请网络/Google/Bing一下,解释比较详细,这里不过多描述。
显示下图,安装完毕
查看网桥信息
默认的为:172.17.0.0/16,也可以修改上述配置文件docker.service中的ExecStart参数,添加自定义ip段,如:--bip 10.0.0.1/16,这里不作修改保持默认。
显示如下
可以更新一下源的配置来加速
修改完记得重载、重启
如下图所示
※这里出现一个错误,因为服务器中之前安装过lnmp,所以启动docker中的nginx的时候,提示80端口被占用了,这里需要关闭原来的nginx
访问http://192.168.0.241,显示如下
参数说明如下:
参数说明
不同指定映射方法
容器内枣晌斗站点目录: /usr/share/nginx/html,可以测试一下
测试一下
官方镜像列表:
https://hub.docker.com/explore/
启动完成后镜像ssh连接测试
以下为nginx的dockerfile
dockerfile主要组成部分:
dockerfile常用指令:
好了,以上是Docker入门的一些日常操作,后续还有Docker容器操作的拓展内容。
‘玖’ 现在大家都在说的云原生到底是什么
云原生是一个组合词,可以拆分为“云”和“原生”两个词,“云”我们都知道,即在线网络,传统的应用原本都跑在本地服务器上,很有可能需要停机更新,且无法动态扩展,“云”表示应用程序运行在分布式的云环境中,可以频繁变更,持续交付。
“原生”表示应用程序在设计前期就考虑到了云平台的弹性和分布式特性,也就是为云设计的。
可以简单理解为:云原生=微服务+DevOps+持续交付+容器化
| 微服务 |
即软件架构,使用微服务架构可以将一个大型的应用程序按照功能模块拆分成多个独立自治的微服务,每个微服务仅仅实现一种功能,具有很明确的边界。
带来的好处有哪些?
1)服务的独立部署
每个服务都是独立的项目,可以独立部署,不依赖于其他服务,耦合性低。
2)服务的快速启动
拆分之后服务启动的速度要比拆分之前快很多,因为依赖的库少了,代码量也少了。
3)更加适合敏捷开发。
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。
4)职责专一,由专门的团队负责专门的服务。
业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。
5)服务可以动态按需扩容
当某个服务的访问量较大时,我们只需要将这个服务扩容即可。
6)代码的复用
每个服务都提供REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。
| 容器化 |
是云原生的核心技术,它是一种相对于虚拟机来说更加轻量的虚拟化技术。能为我们提供一种可移植、可重用的方式来打包、分发和运行程序。
容器的基本思想就是将需要执行的所有软件打包到一个可执行程序包。例如,将一个Java虚拟机、Tomcat服务器以及应用程序本身打包进一个容器镜像。用户可以在基础设施环境中使用这个容器镜像启动容器并运行应用程序。
而Docker是目前应用最为广泛的容器引擎,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡,Docker和K8s都采用Go编写,(K8s全称Kubernetes,由首字母K,结尾字母s以及中间的8个字母组成,所以简称为K8s)。
| DevOps |
是软件开发人员和IT运维人员之间的合作过程,是一种工作环境、文化和实践的集合,目标是高效地自动执行软件交付和基础架构更改流程。开发和运维人员通过持续不断的沟通和协作,可以以一种标准化和自动化的方式快速、频繁且可靠地交付应用。
| 持续交付 |
就是不误时开发,不停机更新,是一种软件开发方法,它利用自动化来加快新代码的发布。在持续交付流程中,开发人员对应用所做的更改可通过自动化被推送至代码存储库或容器镜像仓库。