深入理解DevOps+微服务框架

单体架构

单体架构是什么

在搞懂DevOps和微服务之前,需要先搞懂什么是单体应用/单体架构。简单来说,就跟在校的一些小项目一样,项目的Demo写好了,找一台服务器安装环境,然后把jar包远程上服务器,然后跑起来服务就可以了。这个时候进行简单的服务监控也不难,如果项目出了问题,查看一下运行日志,就可以知道哪一步出问题了。如果懂一些脚本,也可以写一些脚本分析日志,解放双手监控服务器。这种单体架构就是采用瀑布流方式开发的,服务的流程就是:设计 -> 开发 -> 测试 -> 部署 。

单体B/S架构

在还没有微服务和DevOps之前,一个Web应用的上线,一般都是将所有的功能都打包在一起,也就是都在一个项目包里面,然后将项目打包到一个服务器上跑起来就可以了,那个时候的B/S应用架构就是单体架构,结构图如下:

单体B/S+负载均衡

如果当用户访问量变大导致一台服务器无法支撑时,就需要加服务器进行负载均衡,这个时候架构的形式就是:单体B/S+负载均衡

单体B/S+前后端分离(CDN)

用了一段时间负载均衡之后,发现通过CDN手段,把静态文件独立,可以加速服务,提升应用速度,所以单体架构就进一步演变成了:B/S+前后端分离(CDN)

单体架构总结

上面所说的架构都是单体应用,只是某方面的部署形式进行了优化与改动,所以最终都避免不了单体应用的普遍缺陷:

单体

1、代码量大,应用启动时间较长。
2、测试周期长,更改Bug需要对全部业务进行回归测试。
3、应用容错性差,当某个程序出错后,导致整个项目业务宕机。
4、伸缩性困难,只能整个应用进行扩展,浪费资源。
5、开发协作性困难,项目人员都在维护一套代码,协作周期长、难度大。

DevOps

DevOps是什么

DevOps:Development和Operations的组合词,是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

分布式架构+敏捷开发模式

随着上述说的单体架构时,业务流量越来越大,那么肯定几台服务器是不够用的,这个时候就会加很多服务器机器,也会加入Nignx、CDN、缓存、消息队列等技术栈,同时开发人员也会变多,这个时候就是 多人多机协同开发问题。

多人协同开发的问题

这个时候,大多会将项目进行拆分,每个人负责专注于开发一部分业务,敏捷开发的核心理念就是既然无法充分了解超高业务流量下的用户的真实需求是怎样的,就将一个大的目标不断拆解,把它变成一个个可交付的小目标、小项目,然后通过不断迭代,以小步快跑的方式持续开发

此外,这个时候项目是非常大的,为保证项目质量,测试环节不可减少,为了加快速度增大开发效率,测试的工作最好是和开发同步交替进行的,需要将测试环节从后面注入到整个开发环节当中,每次可交付的都是一个可用的功能集合,对开发交付的内容进行持续验证。这样开发产品的可控性也更强,可以阶段性的检验一下项目成果。

多机器问题

之前机器很少架构简单的时候,开发就可以干运维的活,就算加了几台服务器,那也是脚本将 jar包 发布到这些机器上,好像也挺简单,但是会有两个人同时上线部署被覆盖的问题,但这些都不是问题,只要约定好错开时间进行上线部署就可以了。

但你如果是几千台服务器起步,那就需要专门的运维人员进行维护项目了,因为开发分工每个人都专注于自己的事情,不会那么用心进行维护,另一方面是运维的学习成本确实变高了,开发人质量参差不齐,如果服务器出问题那就不是小事。

但是这个时候也不是 DevOps,而是 Dev+Ops,还没有融合在一起。这时 Ops 的主要职责就是:硬件维护、网络设备维护、DBA 、基础服务维护、数据监控等,运维们擅长写各种部署,监控脚本,减少机械的重复工作,开发模式变成了敏捷开发模式。

这个时候,开发设计流程大致是这样。

到这里了,还没有引入到DevOps,还要先再插入讲讲微服务,才能更好的说明DevOps到底怎么理解。

微服务

微服务是什么

微服务(Microservices)是一种软件架构,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic)的API集相互通信。

微服务的出现就是因为原来单体应用架构已经无法满足当前互联网产品的技术需求。

那么,到底什么样的服务才能算是微服务?
1、单一职责的。一个微服务应该都是单一职责的,这才是“微”的体现,一个微服务解决一个业务问题(注意是一个业务问题而不是一个接口)。
2、面向服务的。将自己的业务能力封装并对外提供服务,这是继承SOA的核心思想,一个微服务本身也可能使用到其它微服务的能力。
(有点像SOA的演进)

微服务架构

微服务架构,核心是为了解决应用微服务化之后的服务治理问题。

应用微服务化之后,首先遇到的第一个问题就是服务发现问题,一个微服务如何发现其他微服务呢?最简单的方式就是每个微服务里面配置其他微服务的地址,但是当微服务数量众多的时候,这样做明显不现实。所以需要使用到微服务架构中的一个最重要的组件:服务注册中心,所有服务都注册到服务注册中心,同时也可以从服务注册中心获取当前可用的服务清单:


解决服务发现问题后,接着需要解决微服务分布式部署带来的第二个问题:服务配置管理的问题。当服务数量超过一定程度之后,如果需要在每个服务里面分别维护每一个服务的配置文件,运维人员估计要哭了。那么,就需要用到微服务架构里面第二个重要的组件:配置中心,微服务架构就变成下面这样了:

以上应用内部的服务治理,当客户端或外部应用调用服务的时候怎么处理呢?服务A可能有多个节点,服务A、服务B和服务C的服务地址都不同,服务授权验证在哪里做?这时,就需要使用到服务网关提供统一的服务入口,最终形成典型微服务架构:

上面是一个典型的微服务架构,当然微服务的服务治理还涉及很多内容,比如:

1、通过熔断、限流等机制保证高可用;
2、微服务之间调用的负载均衡;
3、分布式事务(2PC、3PC、TCC、LCN等);
4、服务调用链跟踪等等。

主流的微服务框架

目前国内企业使用的微服务框架主要是Spring Cloud和Dubbo(或者DubboX),Spring Cloud已经逐渐成为主流,比较两个框架的优劣势的文章在网上有很多,这里就不重复了,选择什么框架还是按业务需求来吧,业务框架决定技术框架。

Spring Cloud全家桶提供了各种各样的组件,基本可以覆盖微服务的服务治理的方方面面,以下列出了Spring Cloud一些常用组件:

DevOps+微服务:拆分解耦

了解完上述全部之后,假设当原本是单体架构的公司发展到非常大规模的时候,会有很多程序员、服务器等等,所以一个项目里面,什么语言、技术栈都会有,Java、Go、Python肯定是数不胜数的,所以,这个时候需要协调技术栈,并且项目后期肯定会变得非常大,全部都兑到一个项目里,最直接的后果就是项目变得很大,上线项目启动时间变长,一个BUG可能导致整个业务全线崩溃,最终的后果就是项目变得越来越难以维护,加一个改一个东西几乎搞不动,而且还越来越难重构。

所以,拆分解耦是最终的出路,将项目拆成一个个小的服务单独部署,以电商项目为例,将整个项目拆分为用户服务、商品服务、订单服务,积分服务、支付服务每个服务单独部署,之间通过互相调用的方式来交互,而且可以将一些基础服务例如上传图片,发送短信等很多服务都需要的基础服务,抽象到一个单独的整合服务,也就是之前所谓的中台服务

拆分解耦演化催生DevOps

按照上述说的微服务架构进行开发DevOps的话,运维需要做的上线工作,主要就是将代码部署到对应的机器里面,微服务有那么多的服务,每个大点的公司几百个服务不算多,而且还可能随时搞一个服务出来,如果还按照原始的脚本部署方式,可能最后连是哪个脚本都找不到。而且,如果每个服务上线都需要运维来同意,开发会非常难受,需要天天找运维同意发布,运维也会增加繁琐的工作量。

所以,开始演化出远程部署一些机器,专门用来管理代码,进行上线工作,由运维事先把上线的规则都给定义好了,开发只要按照他的规则都访问这台服务器进行各自的代码合成和发布,自己上线呢,能用代码自动完成的事情就绝不要手动解决,这是每个开发人员都在想的东西。运维需要做的事情,慢慢的都沉淀到了各个平台上面,例如监控,有专门的监控组件和可视化,基础服务例如服务器,CDN,负载均衡等基础服务可以外包到云服务厂商,日志也有专门的日志工具,链路追踪也有专门的组件和可视化,还有网关等,渐渐的,只要这些都配置好了,开发也可以做运维的部分工作,毕竟开发才是最了解代码的人,哪里出了问题看看监控日志,可以最快速度定位到问题,于是DevOps开发模式诞生了,开发也是运维。

早期的DevOps,大部分指的都是“开发运维一体化”。

而现在的DevOps,概念上已经扩大到端到端的概念了。

实现DevOps:DevOps搭建工具

综上所示:DevOps 的三大支柱之中,即人(People)、流程(Process)和平台(Platform)。

项目管理(PM):Jira。运营可以上去提问题,可以看到各个问题的完整的工作流,待解决未解决等;
代码管理:Gitlab。jenkins或者K8S都可以集成gitlab,进行代码管理,上线,回滚等;
持续集成CI(Continuous Integration):gitlab ci。开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
持续交付CD(Continuous Delivery):gitlab cd。完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
镜像仓库:VMware Harbor,私服nexus。
容器:Docker。
编排:K8S。
服务治理:Consul。
脚本语言:Python。
日志管理:Cat+Sentry,还有种常用的是ELK。
系统监控:Prometheus。
负载均衡:Nginx。
网关:Kong,zuul。
链路追踪:Zipkin。
产品和UI图:蓝湖。

参考文章:
1、知乎:什么是DevOps? 作者:小龙飞
2、知乎:微服务入门 作者:未知

到此这篇关于深入理解DevOps+微服务的文章就介绍到这了,更多相关DevOps 微服务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用DevOps开源利器开发部署Hygieia平台

    目录 Hygieia是什么? Hygieia架构图 Hygieia开发用到技术栈 Hygieia项目运行部署 启动api模块 启动UI模块 启动插件模块 测试gitlib插件 文末结语 Hygieia是什么? Capitalone(全美十大银行之一)开源的DevOps利器.使用Hygieia后,在整个软件开发周期中,用户可以选择VersionOne或Jira进行用户故事的追踪,选择Subversion或GitHub作为代码仓库,选择Jenkins或Hudson进行构建,选择Selenium和So

  • DevOps自动化组件RUNDECK开发部署使用说明

    目录 前言 RunDeck的使用场景 (一).标准流程自动化 1.自定义工作流 2.端到端的业务流程在本地或远程服务器 3.跨平台 4.可扩展 5.安全访问控制 6.和主流的DevOps组件集成 (二)作业调度 使用案例分析 开发部署服务 (1)如何二次开发RunDeck (2)怎么部署RunDeck环境 1.获得部署jar 2.新建rundeck目录 3.访问RunDeck服务 4.用户指定的配置? RunDeck的使用 (1)创建Project (2)添加节点信息 (3)新增用于节点服务器权

  • 利用FlubuCore用C#来写DevOps脚本的方法详解

    前言 随着近些年微服务的流行,有越来越多的开发者和团队所采纳和使用,它的确提供了很多的优势也解决了很多的问题,但是我们也知道也并不是银弹,提供优势的同时它也给我们的开发人员和团队也带来了很多的挑战. 为了迎接或者采用这些新技术,开发团队需要更加注重一些流程或工具的使用,这样才能更好的适应这些新技术所带来的一些问题. 对于流程行问题,敏捷的Scrum能够很好的提升产品开发团队之间的协作问题,那么对于应用变的越来越复杂这种情况,它最直接的问题就是带来了开发运维的复杂性,这个时候我们就需要使用工具来解

  • DevOps,CI,CD,自动化简述

    前言: 随着企业应用的不断迭代,不断扩大,应用的发布发布可能涉及多个团队,如pc端,手机端,小程序端等等.应用发布也就成为了一项高风险,高压力的超过过程,以及应用的开发迭代的沟通,测试成本也大大的变得不可控了.这时候就出现了DevOps管理理念,CI,CD以及强大的部署自动化手段确保部署任务的可重复性.减少部署出错的可能性.下面简单的描述一下这四者的基本概念. DevOps 什么是DevOps? DevOps(Development和Operations的组合词)是一组过程.方法与系统的统称,用

  • 深入理解DevOps+微服务框架

    单体架构 单体架构是什么 在搞懂DevOps和微服务之前,需要先搞懂什么是单体应用/单体架构.简单来说,就跟在校的一些小项目一样,项目的Demo写好了,找一台服务器安装环境,然后把jar包远程上服务器,然后跑起来服务就可以了.这个时候进行简单的服务监控也不难,如果项目出了问题,查看一下运行日志,就可以知道哪一步出问题了.如果懂一些脚本,也可以写一些脚本分析日志,解放双手监控服务器.这种单体架构就是采用瀑布流方式开发的,服务的流程就是:设计 -> 开发 -> 测试 -> 部署 . 单体B/

  • go zero微服务框架logx日志组件剖析

    目录 addTenant api 和 rpc 的实现 logx 日志组件剖析 Go-zero 中 logx 是如何使用的? Logx 基本的数据结构 Logx 的默认接口实现 Logx 自定义存储日志位置 和 实现自定义接口的方式 自定义存储日志位置 实现自定义接口 addTenant api 和 rpc 的实现 上一篇我们说到咱们还剩下 addTenant 功能还未实现,不知道有没有兄弟感兴趣去实验一波的,本篇文章进行简要补充 根据上一篇文章分析,其实我们只需要执行如下几步即可: 编写 ten

  • 通过lms.samples熟悉lms微服务框架的使用详解

    经过一段时间的开发与测试,终于发布了Lms框架的第一个正式版本(1.0.0版本),并给出了lms框架的样例项目lms.samples.本文通过对lms.samples的介绍,简述如何通过lms框架快速的构建一个微服务的业务框架,并进行应用开发. lms.samples项目基本介绍 lms.sample项目由三个独立的微服务应用模块组成:account.stock.order和一个网关项目gateway构成. 业务应用模块 每个独立的微服务应用采用模块化设计,主要由如下几部分组成: 主机(Host

  • golang微服务框架基础Gin基本路由使用详解

    目录 概述 1. 基本路由 2. 路由参数 获取URL路径全部参数 获取URL路径单个参数 获取URL中指定的参数 获取指定默认值的参数的 概述 路由是自定义url地址执行指定的函数,良好的路由定义可以对seo起到很好的效果. 1. 基本路由 gin框架封装了http库,提供了 GET.POST.PUT.DELETE.PATCH.HEAD.OPTIONS 这些http请求方式. 使用 router.method() 来绑定路由 func (group *RouterGroup) METHOD(r

  • 基于微服务框架go-micro开发gRPC应用程序

    go-micro是golang的一个微服务框架.这篇文章将介绍使用go-micro最新版本v4开发gRPC服务的方式. 1.安装protoc 这个工具也称为proto编译器,可以用来生成各种开发语言使用proto协议的代码. 下载地址:https://github.com/protocolbuffers/protobuf/releases 一般下载最新版本就行,注意要符合自己当前的操作系统. 解压后里边有个 protoc.exe ,拷贝到 GOPATH 的 bin 目录下,我这里就是 C:/Us

  • go micro微服务框架项目搭建方法

    目录 一 微服务项目介绍 二 go-micro安装 1.拉取micro镜像 2.生成项目目录 三 项目搭建 使用DDD模式开发项目: 四 最后 一 微服务项目介绍 账户功能是每一个系统都绕不开的一部分,所以本次搭建的微服务项目就是账户微服务项目,其中向外暴露的功能有: 登录 注册 查询用户信息 修改信息 发送注册邮件 发送重置密码邮件 重置密码 获取权限 修改权限 退出账号 删除账号 禁用账号 启用账号 提供的功能总共有13个,基本上包含了账户相关的所有功能! 在本次微服务项目中使用到的技术包括

  • Spring Boot 快速搭建微服务框架详细教程

    前言: SpringBoot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题---习惯大于约定. Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录. Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XM

  • 详解利用SpringCloud搭建一个最简单的微服务框架

    Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config.Spring Cloud Netflix.Spring Cloud CloudFoundry.Spring Cloud AWS.S

  • 新手学习微服务SpringCloud项目架构搭建方法

    这篇文章主要介绍了新手学习微服务SpringCloud项目架构搭建方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring的微服务框架SpringCloud受到众多公司欢迎,给大家带来一篇框架搭建入门.本次采用的版本是Spring Cloud版本为Finchley.RELEASE. 一.SpringCloud项目简介 spring cloud: 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.

  • 详解多云架构下的JAVA微服务技术解析

    微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施. 目前比较成熟的 JAVA 微服务生态包括 servicecomb(华为), spring-cloud (Pivotal), dubbo(阿里), tsf(腾讯)等.gRPC.Thrift 等也用于内部服务之间的通信,但是微服务基础设施比较欠缺. 核心的微服务基础设施包括:注册中心.配置中心.应用网关.此外,分布式事物管理.计划任务.调用链跟踪系统等也是微服务基础设施的组成部分.完整的微服务基础实施

随机推荐