写点什么

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

  • 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:061364

评论 1 条评论

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

FeatureStore meetup V4回顾|腾讯 & 微软 & 第四范式特征平台技术解析与应用实践

星策开源社区

机器学习 微软 特征平台 MLOps FeatureStore

主流开源消息队列对比与分析

穿过生命散发芬芳

消息中间件 9月月更

精通高并发与内核 | Linux内核与C/Java进程与线程深度解析

小明Java问道之路

并发编程 线程 进程 Linux内核 9月月更

【云原生 | 从零开始学Docker】九丶完结篇 Docker Compose

泡泡

容器 云原生 Docker 镜像 9月月更

计算机网络——编码与调制

StackOverflow

编程 计算机网络 9月月更

22个常用的js单行代码

大师兄

JavaScript 前端面试 9月月更

本地部署 VS 云服务

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

【云原生 | 从零开始学Docker】八丶Docker网络与部署redis集群

泡泡

Docker 云原生 9月月更

精通高并发与内核 | Linux内核进程的切换方式

小明Java问道之路

进程 Linux内核 进程管理 9月月更 进程切换

Elasticsearch聚合的嵌套桶如何排序

程序员欣宸

9月月更

上海理工大学 x WeLink智慧迎新,2022届新生体验闪电式入学

科技怪咖

SaaS 的多版本销售该如何设计

产品海豚湾

产品经理 产品设计 SaaS B端产品 9月月更

爆火小游戏《羊了个羊》,我偏不玩

图灵教育

游戏开发 游戏设计 游戏史

案例拆解:重要节日客情维护的礼品卡券应用

boshi

运营 礼品

WeLink协作文档:办公协作再快一档

科技怪咖

爆火小游戏《羊了个羊》,我偏不玩

图灵社区

游戏开发 游戏设计 游戏史

面试突击84:Spring 有几种事务隔离级别?

王磊

Java 面试

性能测试知识科普(一):核心术语

老张

性能测试

Elasticsearch聚合学习之五:排序结果不准的问题分析

程序员欣宸

elasticsearch 9月月更

利用flexible.js和VSCode插件cssrem进行可伸缩布局方案

海底烧烤店ai

前端 JavaScrip 响应式网页 9月月更

uni-app黑马优购项目学习记录(一)

海底烧烤店ai

小程序 uni-app JavaScrip 9月月更

数学家的这些迷惑行为,最后都成了神操作

图灵社区

数学 数学教育 数学家

Java中的Request和Response详解

共饮一杯无

Request 9月月更 Response 请求与响应

精通高并发与内核 | 解析Linux内核并发并行

小明Java问道之路

并发编程 并发 并行 Linux内核 9月月更

数学家的这些迷惑行为,最后都成了神操作

图灵教育

数学 数学教育 数学家

2022-09-18:以下go语言代码输出什么?A:1;B:15;C:panic index out of range;D:doesn’t compile。 package main import

福大大架构师每日一题

golang 福大大 选择题

【字符串函数内功修炼】strcpy + strcat + strcmp(一)

Albert Edison

C语言 9月月更 strcpy strcat strcmp

三分钟了解什么是时序数据库

阿泽🧸

时序数据库 9月月更

项目进度delay怎么办

Ian哥

项目管理 项目进度 项目计划

一次线上事故,我顿悟了异步的精髓

勇哥java实战分享

[极致用户体验] 为什么建议2022年不用"等比设计稿"+rem,而用"灵活设计稿"+px

HullQin

CSS JavaScript html 前端 9月月更

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