2021马哥云原生/微服务治理大厂冲刺班/名师亲授

爱共享 爱生活 加油 2021

百度网盘程序员

提取码:qhhv docker

 

 

微服务
微服务解决的是咱们软件开发中一直追求的低耦合+高内聚,记得有一次咱们系统的接口出了问题,结果影响了用户的前台操做,因而黎叔拍案而起,灵魂发问:“为啥这两个会互相影响?!”服务器

微服务能够解决这个问题,微服务的本质是把一块大饼分红若干块低耦合的小饼,好比一块小饼专门负责接收外部的数据,一块小饼专门负责响应前台的操做,小饼能够进一步拆分,好比负责接收外部数据的小饼能够继续分红多块负责接收不一样类型数据的小饼,这样每一个小饼出问题了,其它小饼还能正常对外提供服务。网络

DevOps
DevOps的意思就是开发和运维再也不是分开的两个团队,而是你中有我,我中有你的一个团队。咱们如今开发和运维已是一个团队了,可是运维方面的知识和经验还须要持续提升。架构

持续交付
持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要作到这点很是很是难。咱们如今两周一个版本,每次上线以后都会给不一样的用户形成不一样程度的影响。app

容器化
容器化的好处在于运维的时候不须要再关心每一个服务所使用的技术栈了,每一个服务都被无差异地封装在容器里,能够被无差异地管理和维护,如今比较流行的工具是docker和k8s。负载均衡

因此你也能够简单地把云原生理解为:云原生 = 微服务 + DevOps + 持续交付 + 容器化less



自进入云计算时代后,大量的新概念、新技术如雨后春笋般的涌现出来,从早期的openstack、IAAS平台,到中期的容器技术、微服务架构,再到如今的servicemesh服务网格技术、serverless无服务器架构、云原生技术,可谓在云计算的时代,咱们从未停下前进的步伐。而今天要给你们带来的即是云原生技术~运维

那么什么是云原生呢?咱们将名词拆成两部分—云、原生,这些是相对于本地应用来的,云是相对于本地而言的,传统的应用都是运行在本地机房的服务器上,而云的应用则是运行在云端(如IAAS、PAAS、SAAS)。分布式

原生就是亲生的、土生土长的意思,即应用一诞生就是基于云的,能够直接在云平台上运行或很是轻松的迁移到云平台。

咱们能够这么来定义云原生:一套新的技术体系、一种新的工做方法论、云计算发生的必然导向。

云原生应用要运行在云平台,那么就必需要有云的特色,好比弹性伸缩、分布式、快速部署、快速迭代、高效、持续。这可不止是简单的把原先在物理服务器上的应用迁移到虚拟机里,不止是基础设施和运行平台在云上,应用架构、应用开发方式、应用部署方式、应用维护方式全都要作出改变。

云原生的四大核心要素即是微服务技术、DevOps、持续交付、容器化。

微服务技术使得应用原子化,全部的应用均可以独立的部署、迭代。DevOps使得应用能够快速编译、自动化测试、部署、发布、回滚,让开发和运维一体化。持续交付让应用能够频繁发布、快速交付、快速反馈、下降发布风险。容器使得应用总体开发以容器为基础,造成代码组件复用、资源隔离。接下来咱们就好好的侃侃这几门技术~

 
watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
微服务

微服务的定义是独立部署的、原子的、自治的业务组件,业务组件彼此之间经过消息中间件进行交互,业务组件能够按需独立伸缩、容错、故障恢复。

微服务架构的演变可从早期的单体式架构、中期的SOA架构、后期的微服务架构来看。客户提出一个需求时,早期的作法是直接往现有的代码包里加东西,客户来一个需求,程序员们就写一串代码在里面,来十个写十串,来一百个写100串,反正就是不断的加,最后咱们的应用就变成了一个巨无霸应用,要往里面再加东西很难,要保证全面测试无误很难,要保证定期上线很难,要保证线上出现了问题快速解决也很难,由于牵一发而动全身,即便是技术精湛的程序员也不敢轻易的下手作了。

新的解决方案是SOA架构(ServiceOrientedArchitecture面向服务的架构),即将业务服务化、抽象化,将整个业务拆分红不一样的服务,服务与服务之间经过相互依赖提供一系列的功能,经过网络调用。经常使用的实现方式是使用ESB(EnterpriseServiceBus企业服务总线)来把各个服务节点,集成不一样系统、不一样协议的服务,经过ESB将消息进行转化,实现不一样的服务互相交互。这个方案很大程度上解决了巨无霸应用的问题,可是对于ESB的维护成本却比较高。

 
watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

云计算时代的到来推进应用“高内聚,低耦合”,高内聚就是熟悉同一块业务的人、提供用一个服务的模块聚合在一块儿,低耦合就是应用与应用之间没有紧密强依赖关系,而高内聚低耦合的最佳实践即是微服务架构。经过将服务拆分红单独的服务,小型团队可专一于本身的功能开发上线,运维团队也可根据服务的调用状况弹性扩缩容,符合云计算时代的特点,肯定是云原生的特性之一了。

 

DevOps

DevOps的定义是研发运维一体化,经过自动化流程使得软件过程更加快捷和可靠。它不是一个产品,而是一种新的团队工做方式、新的技术理念。

一个软件从0到1的最终交付包含以下阶段:市场规划、产品规划、编码设计、编译构建、部署测试、发布上线、后期维护。

早期的时候全由一我的完成了,这我的通常都是CEO了,他根据对市场的洞察感知有了好的idea,本身开发编码,编译打包,进行测试以后在云厂商上买一两台服务器部署上应用就对外发布了,这就是瀑布式开发模型,确认好需求后就进入开发阶段,直到完成上线。

而随着使用人群的增长,应用的总体维护开始变得艰难,由于CEO对外要去扩展业务、对内要继续开发、继续维护应用,一我的实在干不过来了。

慢慢的团队里有了产品经理、开发人员、测试人员、运维人员的划分,由产品经理负责需求的规划、产品交互设计,研发人员负责编码、构建包,测试人员负责功能测试和自动化测试、上线发布,运维人员负责维护线上服务的正常运行、扩容缩容,这就是敏捷开发模型,在开发过程阶段测试介入,快速验证修改问题直到基本无误后上线部署。这一切所带来的问题是总体的交付周期变长了,团队之间沟通合做成本变高了,所以DevOps应运而生。它将整个软件开发测试运维过程变为一体化,每完成一个小的需求点便测试上线部署,快速验证需求,捕获用户,占领市场。

 
watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

所以DevOps的出现是一种组织架构的变革,一种开发模式的变化,团队人员在需求规划、代码设计、编译构建、测试部署、上线发布、后期维护的过程全程参与,每一个人都对总体的方案了解清晰,可制定合适的系统架构、技术架构、运维部署方案。

 
watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

云计算时代的到来带来了虚拟化、容器、微服务等新的技术理念,强调的是服务的拆分、精细化的分工,奠基了DevOps落地的基础条件,只有当服务拆分的原子化了,整个团队密切合做的成本才会下降,才能实现云上应用的快速迭代,符合云计算时代的特点,肯定是云原生的特性之二了。

 

持续交付

持续交付的定义就是一直在交付,敏捷开发和DevOps要求随时都有一个合适的版本部署在生产环节上,频繁发布、快速部署、快速验证,因此必需要持续交付。

持续交付出现的状况是需求迟迟不能肯定从而缩短了开发时间,需求不能肯定所带来的问题是在肯定的过程当中整个市场或用户已经发生了变化,开发出来的内容早已不符合当下用户的需求了。为了快速的验证需求,每每在生产环境上会部署多个版本,从而也产生了不一样的发布部署方式,好比灰度发布、蓝绿发布。

所谓灰度发布即是当新的需求开发完成后,将线上的版本只升级部分服务,让一部分用户继续使用老版本,一部分使用新版本,若是用户对新版本没有意见,再迁移到新版原本,整个过程是运维人员从负载均衡上去掉灰度服务器,待服务升级成功后再加入负载均衡服务器列表,这时候有少许用户访问业务时流量到新版本,若是这小部分用户使用没有反对,逐渐扩大灰度范围,最后升级剩余服务器。

 
watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

所谓蓝绿发布则是将应用从逻辑上分为A、B两组,升级时将A从负载均衡组里删除,进行新版本的部署,同时B组仍然继续提供服务。当A组升级完成后,负载均衡从新接入A组,再把B组从负载列表摘除,进行新版本的部署。A组从新提供服务。最后B组升级完成,负载均衡从新接入B组。此时AB组版本都升级完成,而且都对外提供服务。保障整个过程对用户无影响,出现问题及时回退上一个版本。

 
watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

经过灰度发布和蓝绿发布的方式,能够快速的验证用户需求,频繁的发布,根据用户状况规划产品演变方向,实现了云计算时代的快速迭代,符合云计算时代的特点,肯定是云原生的特性之三了。

 

容器化

容器技术的定义就是一个单独的应用程序进程、运行资源的高度隔离。早期的时候应用全运行在物理机上,这致使资源分配不均匀,即便是一个小的应用也要耗费一样的计算存储资源,中期的时候有了虚拟化技术将物理机划分为多个虚拟机,这样在一台物理服务器上能够运行多个虚拟服务器,实现了资源利用率的较大提高,而云计算时代的到来,带来了微服务、DevOps、持续集成持续交付等内容,要求应用要原子化、快速的开发迭代、快速的上线部署,划分为虚拟机的方式不能保障应用在每一个环境(Dev、Test、Pre、Prod)都一致,容易引发应用因环境的问题而产生Bug,容器的出现极好的解决了这个问题。

在容器出现以后,整个的流程变成了研发人员在将代码开发完成后,会将代码、相关运行环境构建镜像,测试人员在宿主机上下载服务的镜像,使用容器启动镜像后便可运行服务进行测试;测试无误后运维人员申请机器,拉取服务器的镜像,在一台或多台宿主机上能够同时运行多个容器,对用户提供服务。在这个过程当中每一个服务都在独立的容器里运行,每台机器上都运行着相互不关联的容器,全部容器共享宿主机的cpu、磁盘、网络、内存等,即实现了进程隔离(每一个服务独立运行)、文件系统隔离(容器目录修改不影响主机目录)、资源隔离(CPU内存磁盘网络资源独立)。

使用容器,研发团队能够将微服务及其所需的全部配置、依赖关系和环境变量移动到全新的服务器节点上,而无需从新配置环境,这样就实现了强大的可移植性,实现了云计算时代的资源最大化利用,符合云计算时代的特点,肯定是云原生的特性之四了。

 
watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

 

综上所述,云原生的DevOps、容器化平台、持续交付、微服务都是云原生不可缺乏的一部分,而云原生也必然是云计算发展的一定趋势,咱们须要以全局地眼光看待问题,对四个核心元素加以整合后才能见到云原生的全局风貌。

相关文章
相关标签/搜索