您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Docker应用的监控与实践
 
作者:杨金全  来源:CSDN  发布于 2016-3-23
  3507  次浏览      20
 

近两年,Docker容器技术的发展使交付链更加畅快。而Docker和传统虚拟的技术相比有什么不同。又如何带给我们更好的用户体验呢?

说道Docker容器技术带来的改变 ,可以从两个角度进行对比:

与传统虚拟化的差别

  1. VM –> Dockers (职能更少)
    原来由一个虚拟机变成现在多个Docker,每一个Docker里面所运行的服务智能会更少。
  2. IP –> Ips (关系更加复杂)
    一个IP变成多个IP,多个IP承载多个服务,整个应用之间的关系更加复杂,不像在原来有一个VM承载所有的服务 ,现在把所有的大的服务拆分为很多细小的微服务提供给用户,体现它的价值。

  3. 服务节点增加

Docker扩容的机制很方便,服务节点会呈现一个明显上升的趋势,是一个曲线增长。

  1. 生命周期更短

和传统的VM来比,Docker可能它的生命周期更短。

应用角度

  1. 微服务:虚拟化的场景下使得微服务架构更加流行,以前在早期的时候提SOA,可能像服务这种架构的时候,大家可以提这个概念,但是 Docker容器技术的出现使SOA架构更加敏感,现在说微服务是比较流行的。比如说使用的REST风格架构,以及我们更多的是拿这种去做分布式的部署, 可以在多个节点,不同的地域,不同的城市之间布局我们的服务,来提供更好的统一的输入口。

  2. DevOps:对于DevOps来说,以前虽然有很多技术出现,但是自从Docker出现之后,它更加贴近研发和运营。以前可能 Docker更多的实践是在运营团队,现在它可以保证线上的环境,保证更多的一致性。每一个Docker的服务可能是无状态,其中一个容器出现了问题,再 用一个容器来替代。基于现在服务的概念,其他容器管理技术来说,无状态就是更加的常态化。

  3. 持续集成:持续交付是软件交付比较注重的概念,Docker的出现使得持续集成被大家广泛的接受。基于一些现有的技术与平台,它可以使你的 开发和测试更加快速。如果我们将Docker的概念结合起立,其实每一个Docker的环境构建,每一个版本的迭代更加快速。还有线上线下的环境是一致 的,每一个应用可以在不同的环境里,保证环境的统一,减少了我们以往做的很多测试。

  4. 协作:除了以上几点,Docker还可以让我们在不同的领域之间协作。我们现在有Docker Hub,它可以放大,比如说需要一个服务,可能有在这个领域比较擅长的公司,擅长的团队有一些好的实践,以这个为基础做我们自己的服务,就减少了去采购一 些别人愿意采购的东西。之后,我们更加可以灵活部署应用,更加关心属于自己的业务以及所带给客户的价值。

这是从两个角度来探讨Docker所带来的改变。Docker应该也属于交付之间的环节,最终交付之后还是要提供给应用,如何更好提供的服务,就需要去了解Docker不同的运行环境和运行状态。

利 用率、内存使用率,以及整个对于网络的情况是什么样的,可以通过一些文件来获得状态信息。比如CPU的文件,以及用网卡做监控的时候怎么做网络的协同。下 面有一个链接,有一些公开的脚本,可以拿这些脚本定期的去跑,这样就是说可以拿到Docker基础的状态。如果说Docker里面的服务出现了问题,提供 的服务出现了问题怎么办?以往我们做这种状态获取的时候,获取这种状态有几种方案。

首先,我们处在一个注重用户体验的时代,随处都可见的是在讲体验,不管是我们PC页面,还是软件的体验,从用户体验的角度来讲,它所带来的概念是说围绕着这个用户的价值能不能够提供一个很友好的交付页面,很畅快的体验,这里面有几个东西可以衡量。

  1. 性能(响应时间/用户感知/独占时间)
    最主要的是拿性能来体验,比如说从Web容器到应用容器,有一些排队时间,这个时间是说通过WebServer到APPServer,它最终所提供的服务 是以应用服务器所提供的服务,这个之间一些转化规则,附载规则都可能会影响到应用的性能。我们刚才也讲到,微服务这种架构越来越流行,大家也慢慢的采用微 服务的架构,服务会独立的部署,服务与服务之间的工序是不可避免的。从A服务到B服务的时间,B所产生的消耗对于A应用所带来的时间,也是一个衡量你整个 应用体验的一个关键,我们称为External时间,可以基于HTTP、RPC、REST,除了这些还有更多的协议,我们跨平台的协议,包括国内有一些服 务。

  2. 可用性(异常/错误)
    除了性能还有一个比较关注的地方,如果你的服务出现了短暂的停顿,就要说到可用性。服务是不是出现了错误,页面是不是出现了异常,每个APP上出现了崩溃的信息。

  3. 流量(PV/UV/吞吐量)
    Docker有一个特点是可以做扩容,其中依据是什么呢?流量的信息,不管是你PV、UV、吞吐量的信息,它有可能提供一个扩容的机制数据,提醒我知道流量到达了多少的时候该去扩容设备。

  4. 拓扑结构
    拓扑结构是什么概念呢?不管是研发人员或者运营人员、技术人员,这种微服务上线之后服务关系变得越来越复杂,怎么能一目了然的知道为哪个服务提供服务,这个服务调动了多少次服务,逻辑上的拓扑结构也能够帮助我们定位问题,提供给我们扩容的一些基本数据。

除了刚才讲的CPU信息、内存信息,内存的利用率,包括整个服务领域的数量也会影响到服务的状态。

以往我们应用的来源是说有用户投诉了,到你的服务不可用了,然后客服部门会找到技术团队说你的技术不能用,这是一个应用状态来源。

另 外一个是我们更多常规的采用应用的日志,会对技术做一些汇集,把各种应用状态分析出来。但是微服务的架构下,在当前的容器下应用的日志会越来越多,每一个 Docker容器会产生一到多个日志文件,我们怎么样把这个文件更好的结合在一起,怎么把应用的关系串联起来,其实是有一定的难度。就算能够将这些信息串 联起来,也有可能会碰到比如说这是突发性的故障,我们根本以前没有遇到过,或者偶尔几个月才能遇到一次,这个错误出来之后不能得知原因,也不知道它到底代 表什么,可能去找研发人员之后一步一步的去尝试,难道没有一个更好的方式吗?

随着技术的发展,APM技术能够帮我们做一些事情。APM其实有两个含义,我们更多的理解它是一个管理,为什么是管理?应用的状态不是一个点,也不是一个时间段的问题,它是一整个软件生命周期的问题,所以对于应用性能的是软件周期中的一个关键点。

这是一张拓扑图

用 户所能体现的,对应用的直观感受是什么样的?它所获取到的时间是什么样的?以入口服务为主,这个入口服务调用了哪些服务?这个下面调用了数据库的服务,在 这个服务上访问了一些其他网站。根据业务关系可能会更加复杂,每一个服务上面是什么样的?会通过一定的基准值表现出来,是因为某一个服务出现了问题导致整 个服务有问题,这是一个应用的逻辑,它能够告诉你当前应用下你所部署的关系,以及应用和应用之间的关系。

下图可以看到其中一个应用,它在一个打分的情况下出现了54分。

由于应用的响应时间超过了2秒,这时会出现一些用户体验的问题,用户投诉也会随之而来。如果能在用户投诉来之前就解决这个问题是现在互联网企业比较关心的问题。根据这个图来可以了解到应用出现了哪些问题,响应时间超过了2秒,而这2秒花在哪个地方呢?我们通过另外一个图

可以看到这个2.5秒绝大部分花在应用层时间,此外还有APP服务的时间,这个外部服务时间是它调动了其他的服务出现的问题。其实这个时间还不能明确的表现出到底是应用层还是哪段代码出现了问题。

再一步一步的往下看,能够看到错误率达到了5%,高的时候可能超过了10%,如果你有100个用户,其中有10个用户受到了影响,他访问服务的时候已经出现了中断。接下来要单独的去分析到底是什么导致了问题。

对 于这个应用来讲能够看到是应用代码和外部服务时间出现了问题,到底能不能了解到在这个应用下有哪些服务出现了问题,图中可以看到这个服务调动了很多包括调 用了OpenCMS以及这条线上会有OpenCMS享受的服务,OpenCMS调用了另外一个服务。这里面包括每一个服务对于吞吐率、错误率等等的指标, 由此就能得知到底是本身的业务出现的问题,还是因为调用了其他的服务出现的问题。

在这个应用里面其中的几个服务是最慢的,拿其中的一个来分析:

这 个叫RSS2的服务,URL对应的服务是什么,可能是和本身业务相关的,而能不能知道在这个服务中它到底调用了哪些代码?整个调用链里面出现了哪些有可能 产生性能的问题呢?除了能看到这个服务的调用所占比达到了50%以上以及对数据库的访问也占了15%的情况之外,也可以从单一用户场景下出现的问题分析。

上 图能看到这一次请求里面,在SPP这个服务里面消耗的时间是11秒,这11秒的时间通过这个拓扑图来看调用的这个应用所消耗的是133毫 秒,OpenCMS消耗的应用在四个时间里面平均是1.9秒,总共消耗了7秒,在11秒里面有7.8秒是因为OpenCMS效应过慢导致了对外服务的应用 出现了缓慢的问题。再去看OpenCMS,总共调用了四次的OpenCMS,OpenCMS对应的是哪些服务?它这个服务到底发生在哪个虚拟的环境下面? 这个虚拟的环境下所产生的是什么样的?是因为OpenCMS的问题,导致我整个服务出现了问题。

整个供应链里面,因为其中一个函数调用了 OpenCMS的URL,对应OpenCMS应用的实例是这台主机,我们能得知在这台容器里面它发生的时间主要是在外部服务,也就是说OpenCMS在这 4秒里面所消耗的时间,绝大部分是发生在外部服务里,通过一步步的钻取,可以看到在当时的场景下调用了这个服务,这4秒花在了什么地方。

接下来到了OpenCMS的应用,也在这个时间点看到了对应的请求类别,在这里面我们可以看到当时是因为它调用了这个里面的服务所产生了问题,原因是方法 在文件的127行调用的服务。从以上的这两个图来看,我们既可以知道是因为什么样的服务出现了问题,也可以告知是因为哪一行代码调用了这个所产生的问题。

由刚才的图可以看到在这个时间点里面有一次调用所执行的是这个SQL,这个SQL在当时的执行计划是什么样的,是因为单表数据量过大而导致了数据库的反应过慢还是其他原因,有了这个信息就可以提供一些优化依据来提升我们的的质量。

刚 才有大约10%的用户受到了服务的影响,这10%当时是不可用的,这些不可用的情况下到底发生了什么样的错误?也许会看到绝大部分是因为404,也有一些 情况是因为编辑的问题,以往这些问题只能通过点去查,或者是没有日志出错的情况下很难定位这个问题。当一步一步看这个错误的时候,可以看到错误详情以及当 时的调用情况,请求信息所带来的是什么样的,包括出现问题的代码和数据,这样就可以快速的告诉研发哪段代码出现了问题赶紧修改,立马上线,就免于其他更复 杂的服务,对10%的用户可以看到正常的服务。

通过以上,可以看到APM的技术能够帮助我们快速的了解应用状态,根据这些应用状态以及其他信息来获取依据,作为去调整服务的依据。

   
3507 次浏览       20
 
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
 
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
 
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件的思考
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS
更多...   
相关培训课程

云计算原理与应用
Windows Azure 云计算应用

摩托罗拉 云平台的构建与应用
通用公司GE Docker原理与实践
某研发中心 Openstack实践
知名电子公司 云平台架构与应用
某电力行业 基于云平台构建云服务
云计算与Windows Azure培训
北京 云计算原理与应用