写点什么

如何打造一个以应用为核心的运维体系

  • 2020-03-18
  • 本文字数:2103 字

    阅读完需:约 7 分钟

如何打造一个以应用为核心的运维体系

关于服务化

在讲发布系统《XXOps实践:持续发布和部署》的时候提及过,随着业务体量和业务复杂度的上升,单体工程因为紧耦合的原因,会慢慢地无法满足快速迭代的要求,特别是开发人员增加到一定规模的时候,代码的开发和维护变得非常头疼,这个时候必然要对单体工程进行拆分,也就是我们常说的服务化拆分的过程。


以 Java 为例,我们根据业务模型拆分出不同职责的模块或工程(可独立运行的一套代码),叫做一个应用,在应用里我们会设计很多类出来,其中对外提供业务功能逻辑的类,我们通常定义为服务,也就是我们常见到的 xxxxService,这个 Service 里面我们又可以提供很多的具体调用方法出来,我们叫做 API 或者 Method。大致的逻辑可以用下图表示:



比如电商里面的商品 Item,最典型的就会有 SKU、Detail、Snapshot、Tag 等等的服务,以 SKU 为例,我们定义为 SKUService,做过服务设计和开发的同学肯定都很清楚,接下来我们就要为 SKUService 提供各种 get、list、query、update 等方法,有时候为了提供统一的查询或写服务,可能还会专门设计出 SKUReadSevice 提供统一的各种的 query 方法。


以应用为核心的运维体系建设


这里面 Item 就是一个应用的定义,所以我们可以从这里看到,从源头上讲,应用这个标示是在引入服务化,进行架构拆分的时候就应该定义下来的。


但从我个人实际观察到的情况看,大部分的公司在这块的统筹设计上是不够的,我经常看到的场景是,RPC 的服务注册或配置中心上,有自己的一套应用名标示,开发要独立去填写;做发布系统的时候,又单独搞出一套应用标示,开发又要填一遍;同理,做监控的时候,监控自己也整一套,到了运维这里,为了维护资源的分配,为了应用跟资源的对应关系,搞不好也会有一套。有时候为了保持各个系统能够很好的协作,又得搞出一个映射关系来,比如运维的应用标示跟监控的应用标示做个对应,或者跟服务化的应用标示做个对应,但是这样做就很难形成统一的体系。所以,我看到的很多平台就都会变成一个个的孤岛,无法成为体系。


所以,在这块的建设上,必须在服务化阶段就得明确应用标示的统一,后续的资源分配、发布、监控、稳定性体系等等,都以此标示为准。这块我们 CMDB 的文章中已经提到了基于应用为核心,如何去建立 CMDB 和应用配置的模型,下面直接上图,说明从运维的角度如何去建立应用服务和稳定性体系的模型。



对于服务化的应用:


1、首先是应用,这个要根据产品业务场景去设计。然后拆分出对应的服务,也就是 Service 这一层,服务里面再设计出对外暴露的方法。这个过程,主要是业务技术架构师和开发 Owner 要去做。但是应用的标准,要么架构师一开始就能够全局确认下来,否则,运维就必须参与进去跟开发一起明确指定下来。


所以这里的路径就是,应用—服务 Service—方法 Method


2、基于应用,有了 CMDB、应用配置,以及服务的管理,就可以去完成类似于持续集成和发布、自动化扩缩容这些动作了,具体可以结合《XXOps 实践:持续发布和部署》


3、有了应用服务管理,接下来可以做的另外一件事情,就是稳定性体系的建设,比如全链路跟踪、容量评估、开关、限流、降级等等。这块后面专门整几篇文章出来。这里特别要说明的一点,所有上面提到的这些技术手段,准确的讲,都应该要加几个定语,就是基于应用的 xxxx,或者基于服务的 xxx。比如,降级策略,就以 Cache 故障,自动降级到 DB 为例,最终这降级策略是要通过配置的方式,下发到应用或服务层面来执行的,具体可以看下上述图示。


最后,有了这样一套基于应用的模型之后,就可以通过应用把这些管理环节给集成起来,放在统一的门户里提供出来,至此,应用为核心的运维体系雏形就有了。简单的示例:



关于微服务和服务化,多说两句:


前两天跟公司一个开发 Leader 还在探讨是否有必要拆分微服务的问题,这里也分享一下,服务化和微服务的的争议主要是个粒度问题,我们在设计时到底是把应用拆分成粗粒度的一组服务形成一个应用,比如上面提到的 Item 商品,形成一个单独应用,还是将更细粒度的 Service 独立成一个个的应用,比如上面提到的 Item 里面的 SKUService 这个服务,还是再微服务化一点,甚至可以 SKU 这个服务里面的读写服务,SKUReadSevrvice 和 SKUWriteService 分别独立出来分别独立出来作为一个应用。


这个说实话没有什么严格标准,横着切也好,竖着切也罢,粒度大也好,粒度小也好,关键还是看这个应用和服务的 Owner 怎么来把握,或者团队有统一的架构师来定义标准。



不过,个人观点,对于微服务还是持一点保守态度,不要做过细粒度的拆分,也并不是越细越好,这里面有个度的问题。粒度过细就会有大量的应用独立出来,应用之间又会有相互调用,应用的管理和调用链管理就变的异常的复杂,最终意味着管理成本就会非常高。这个时候是需要有非常完善的运维体系来保障的,比如持续集成和发布、全链路保障、容量和性能评估手段等等,而这些保障体系说实话有一定的技术门槛,也需要一定的技术和人才积累,需要有一个迭代的周期来完善,这必然是一个逐步演进的过程,所以这些配套手段跟不上的情况下,过度的微服务化是没有意义的。


本文转载自成哥的世界公众号。


原文链接:https://mp.weixin.qq.com/s/b3enQL25LPtxja5oY2iqgg


2020-03-18 20:061755

评论 1 条评论

发布
暂无评论
发现更多内容

OceanBase 生态产品:时序数据库CeresDB 正式发布 1.0 版本

OceanBase 数据库

数据库 oceanbase

探索以小程序提升运维效率

Onegun

运维 小程序容器

瓴羊Quick BI和Tableau哪个更适合复杂表格呢?

夏日星河

京东云RASP云原生安全免疫创新实践

京东科技开发者

Web 安全 漏洞 业务安全 企业号 3 月 PK 榜

2022 IoTDB Summit:天谋科技刘海《Timecho:孵化于Apache IoTDB的开源商业化公司及其核心产品》

Apache IoTDB

大数据 分布式 开源数据库 IoTDB

DevOps 与平台工程:企业该如何选择?

SEAL安全

DevOps IdP 平台工程 企业号 3 月 PK 榜

2022 IoTDB Summit:东方国信王超《Apache IoTDB 在东方国信的商业化及应用》

Apache IoTDB

大数据 开源 时序数据库 IoTDB

MMMBSC互助基金系统开发智能合约部署

薇電13242772558

智能合约 dapp

中国特供版也残了!AMD 3GHz最强核显梦碎

科技之家

NFTScan:怎么使用 NFT API 开发一个 NFT 数据分析平台?

NFT Research

数据分析 API NFT

技术沙龙 | 探索软件测试前沿技术及最佳实践,体验ChatGPT在测试领域中的应用

测吧(北京)科技有限公司

测试

ByteHouse实时导入技术演进

字节跳动数据平台

大数据 数据仓库 Clickhouse 数据仓库服务 企业号 3 月 PK 榜

动转静两大升级!一键转静成功率领先,重点模型训练提速18%+

飞桨PaddlePaddle

人工智能 百度 飞桨 PaddlePaddle 框架解析

技术沙龙 | 探索软件测试前沿技术及最佳实践,体验ChatGPT在测试领域中的应用

测试人

软件测试 沙龙 ChatGPT

TypeScript 与 JavaScript:你应该知道的区别

京东科技开发者

JavaScript typescript 前端 后端 企业号 3 月 PK 榜

精选案例 | 博睿数据30w+监测节点护航新华网、人民网两会重保工作

博睿数据

可观测性 智能运维 博睿数据 精选案例 主动式拨测

面试官:请说一下如何优化结构体的性能?

王中阳Go

Go golang 高效工作 学习方法 高效学习

2022 IoTDB Summit:用友郭关飞《用友在 Apache IoTDB 应用与生态建设方面的探索与实践》

Apache IoTDB

大数据 开源 时序数据库 IoTDB

瓴羊Quick BI:“3端4表4擎、3+NPlus”得到众多行业内部人士的认可!

对不起该用户已成仙‖

淘宝 APP 网络架构演进与弱网破障实践

阿里技术

架构 网络

性能平台数据提速之路

百度Geek说

大数据 百度 提效 企业号 3 月 PK 榜 性能平台

SSH和VNC的四个区别简单讲解

行云管家

SSH 行云管家

等保联盟是什么机构?有什么用?

行云管家

等保 等级保护 等保联盟

搬得进来,搬得出去!快来过一把数据迁移的“瘾”

OceanBase 数据库

数据库 oceanbase

Vineyard 论文被 SIGMOD'2023 接收,助力计算引擎之间高效数据交换

阿里巴巴中间件

阿里云 计算引擎

用户分享 | 达梦第三方客户端DockQuery使用体会

BinTools图尔兹

数据库 用户体验 国产数据库工具

React等前端框架如何与小程序结合

Onegun

前端 前端框架 React Vue 3

瓴羊Quick BI和Power BI哪个比较好呢?

巷子

Caffeine高性能本地缓存框架初探

FunTester

秒懂算法 | 搜索基础

TiAmo

DFS BFS 搜索算法

数据测试实践:从一个bug开始的大数据引擎兼容性探索

京东科技开发者

大数据 bug修复 引擎 测试数据构造 企业号 3 月 PK 榜

如何打造一个以应用为核心的运维体系_语言 & 开发_成哥的世界_InfoQ精选文章