容器化应用的服务可用性

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是容器化应用的服务可用性【编者的话】高可用性的容器化应用是指服务可用性(连续运行时间)。本文介绍了如何借助于容器管理工具来监控和测量服务。
本文讲的是容器化应用的服务可用性【编者的话】高可用性的容器化应用是指服务可用性(连续运行时间)。本文介绍了如何借助于容器管理工具来监控和测量服务。

【烧脑式Kubernetes实战训练营】本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理、Kubernetes DNS与服务发现、基于Kubernetes和Jenkins的持续部署方案 、Kubernetes网络部署实践、监控、日志、Kubernetes与云原生应用、在CentOS中部署Kubernetes集群、Kubernetes中的容器设计模式、开发Kubernetes原生应用步骤介绍等。

我作为软件工程师的第一份工作是在阿灵顿高地(Arlington Heights, IL)的摩托罗拉公司。工作是关于蜂窝基站软件(cellular base station software )开发,以前称作为跨无线协议状态管理(state management across different radio protocols)。对于电话软件,99.999%的服务可用性是必需具备的(例如每年只能有小于5.26分钟的故障宕机时间)。我在摩托罗拉和贝尔实验室的后续几年,学习了如何建立和运维高可用性系统。

在那个时代里(约为90年代中期),高可用性系统需要昂贵且复杂的硬件,并且每个组件都得有个随时可用的备份。现在事情则变得容易多了。可以使用各种常见的硬件主机来主从备份应用组件,建立高可用性的系统。此外,使用容器来部署和运维,我们还可以获得更快的系统恢复时间,如Kubernetes、Nirmata这样的智能缓冲、精致的容器管理工具能将系统恢复时间降低至几毫秒。

然而,一直保持不变的是设计合理的系统管理需求,这包括管理系统所有组件的状态更新。而且对于微服务应用来说,一个应用可能有多个服务组成,每一个服务可能有多个实例,实现可靠性和伸缩性的系统管理正变得越来越复杂,因为有很多不相关的组件需要来跟踪和管理!让我们来看一看如何使用Nirmata来解决这个复杂的挑战。

服务可用性

为了管理服务可用性,我们首先需要知道三件事:
  • 哪个组件对服务来说至关重要
  • 每个组件可能有哪些状态
  • 如何定义和测量服务可用性

下图是Nirmata的部分领域实体(对象)图。如图所示,Nirmata收集和管理的信息既包含基础设施相关的对象(云供应商、主机、容器等),又包含软件应用对象(应用、服务等)。
1.png

建立一个优雅的状态模型需要及时更新每个对象的状态信息,同样重要的是需要对跨对象间的依赖和联系有深刻的理解。例如,由于主机重启导致某个服务不可用,那么这二者需要关联起来并进行上报。

这样的模型还能帮助我们区分严重问题与瞬间发生的故障。例如,某个容器的退出不会影响整个服务的可用性。实际上,服务编排引擎(orchestration engine)在多个服务实例上安排镜像滚动升级时,容器退出是正常的。

一旦我们知道了跟踪哪些实体,下一步就是定义和管理状态,及状态间的转换。在Nirmata,每个对象有两个主要状态和几个次要的过渡状态。主要状态有:
  • 运维状态:这个状态代表对象当前是否可运维或者可以如何运维。例如“上线”、“下线”、“故障”组成了一个对象的可运维状态模型。
  • 管理状态:这个状态是由用户或者管理员来管理的。例如,“关闭”、“暂停”是由用户触发的。

除了主要状态,每个对象可以有几个次要状态。这些状态是跟对象相关的,它们提供了更多的细节信息。例如,在Nirmata大多数管理的对象有“执行状态”,表示一个系统维护正在执行。

这里是一些在Nirmata中应用里服务有可操作状态:
  • 正在运行:服务的所有实例健康并且正在运行
  • 降级:服务的一些实例已经故障,或者正在执行某些操作
  • 正在执行:服务的所有实例正在执行更改
  • 故障:服务的所有实例已经产生故障

2.png

现在我们有了服务的状态模型,跟踪可用性就变得简单多了。在Nirmata,可用性是通过服务正在执行或降级时间占用总时间的比例来计算的。同样的方法也应用在应用级别的传播状态。未来版本,我们计划允许用户自己定义应用中每个服务如何被应用到整体的服务可用性计算中。

下面我们来看下Nirmata里的环境视图。每个环境可能有多个应用,每个应用都有自己的可用性,同时我们也可以看到该环境的整体可用性。
3.png

向下拉动,可以容易的看到特定应用的可用性。Nirmata还展示了应用的相关状态转换,并标识出应用的故障原因。
4.png

这里我们可以看到单个服务视图和它的状态变化:
ServiceAvailability-6-1024x540.png

总结

容器化微服务应用的可用性管理是复杂的,因为有很多项需要衡量和跟踪。而且,衡量系统可用性需要一个良好定义的状态模型。对象状态需要在跨物理设施和软件实体间可管理、可关联和可传播。

使用合适的系统管理平台,才有可能衡量、跟踪并报告服务、应用或者环境的可用性。运维人员通过聚焦于服务可用性,可轻易地实现“信噪分离”,只关注影响服务的问题。

原文链接:Service Availability for Container-Native Apps (翻译:姜俊厚)

原文发布时间为:2017-08-29

本文作者:姜俊厚

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:容器化应用的服务可用性

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
运维 Java Go
Go语言基础及其在容器化应用中的优势
【2月更文挑战第23天】本文首先介绍了Go语言的基本特性和优势,然后详细阐述了Go语言在容器化应用中的重要作用和独特优势。通过深入分析Go语言的语法简洁性、并发处理能力和内存管理特性,以及Docker容器技术的轻量级、可移植性和版本控制特点,本文旨在说明Go语言与Docker容器技术的结合能够显著提升应用的开发效率和部署灵活性,为现代软件开发和运维带来革命性的变革。
|
2月前
|
消息中间件 监控 NoSQL
容器化应用系统上生产的最佳实践
容器化应用系统上生产的最佳实践
|
7天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
17 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
21天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
45 1
|
25天前
|
存储 安全 算法
【C++ 17 包裹类 泛型容器 std::any】深入理解与应用C++ std::any:从泛型编程到多态设计
【C++ 17 包裹类 泛型容器 std::any】深入理解与应用C++ std::any:从泛型编程到多态设计
47 1
|
29天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
1月前
|
Kubernetes Go 开发者
Go语言与Docker容器结合的实践应用与案例分析
【2月更文挑战第23天】本文通过分析实际案例,探讨了Go语言与Docker容器技术结合的实践应用。通过详细阐述Go语言在容器化环境中的开发优势,以及Docker容器技术在Go应用部署中的重要作用,本文旨在为读者提供Go语言与Docker容器结合的具体实现方法和实际应用场景。
|
1月前
|
存储 Kubernetes 云计算
云计算基础与实战:从虚拟机到容器化应用
云计算基础与实战:从虚拟机到容器化应用
30 0
|
1月前
|
运维 应用服务中间件 调度
|
2月前
|
NoSQL Redis Docker
深入浅出:使用Docker容器化改进Python应用部署
在快速演进的软件开发领域,持续集成和持续部署(CI/CD)已成为加速产品上市的关键。本文将探索如何利用Docker,一种流行的容器化技术,来容器化Python应用,实现高效、可靠的部署流程。我们将从Docker的基本概念入手,详细讨论如何创建轻量级、可移植的Python应用容器,并展示如何通过Docker Compose管理多容器应用。此外,文章还将介绍使用Docker的最佳实践,帮助开发者避免常见陷阱,优化部署策略。无论是初学者还是有经验的开发人员,本文都将提供有价值的见解,助力读者在自己的项目中实现容器化部署的转型。