写点什么

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

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

评论 1 条评论

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

时序数据库在船舶风险管理领域的应用

CnosDB

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

如何写一份高可读性的软件工程设计文档

C++后台开发

数据库 软件工程 后端开发 C/C++后台开发 C/C++开发

加密生活,Web3 项目合伙人的一天

TinTinLand

区块链

华为云数据治理生产线DataArts,让“数据'慧'说话”

华为云开发者联盟

云计算 华为云

想用K8s,还得先会Docker吗?其实完全没必要

程序员啊叶

Java 编程 程序员 架构 java面试

太牛了,百度这份开发手册几乎涵盖了Spring Cloud所有操作

程序猿阿宇

架构 java程序员 java面试 秋招 程序员‘

我给大家免费公开五份阿里Java架构师学习手册!助力金九银十

程序猿阿宇

架构 Java 面试 大厂面试 大厂技能 秋招

大厂面试突击必备:“网络编程”高频八连击,扛得住吗?

程序员啊叶

Java 编程 程序员 架构 java面试

首发!阿里技术大牛最新耗时半个月整理出最全MySQL性能优化和高可用架构技术宝典,直接封神!

了不起的程序猿

MySQL 数据库 程序员 性能优化 JAV A

上天入地Hadoop——使用高性能分布式技术完成大数据处理任务

程序猿阿宇

大数据 架构 Java 面试 java程序员 编程、

4位资深专家多年大厂经验分享出Flink技术内幕架构设计与实现原理

程序员啊叶

Java 编程 程序员 架构 java面试

六面蚂蚁金服,唬住了面试官要了30K;其实Java面试也没那么难

程序知音

Java 程序员 后端技术 秋招 Java面试八股文

腾讯被裁,转头去字节!Java后端核心面试题在手,怎能进不去大厂

程序员啊叶

Java 编程 程序员 架构 java面试

SocialFi 何以成就 Web3 去中心化社交未来

One Block Community

区块链

一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价?

鳄鱼视界

CMake库搜索函数居然不搜索LD_LIBRARY_PATH

华为云开发者联盟

后端 开发

难道Redis真的变慢了吗?

程序员啊叶

Java 编程 程序员 架构 java面试

阿里内网最新发布“M8”级Java面试笔记,助力金九银十

程序员啊叶

Java 编程 程序员 架构 java面试

DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

华为云开发者联盟

云计算 后端 SaaS

Kubernetes应用管理深度剖析

Bob

云原生 容器化 后端技术 Kubernetes 集群

只分享这一次!阿里软件架构师深入底层手写JDK源码

程序猿阿宇

架构 Java 面试 大厂技能 后端技术 秋招

真香!180页100+题15W+字解析的《Java高级面试指南》,果断收下

程序员啊叶

Java 编程 程序员 架构 java面试

SMI 与 Gateway API 的 GAMMA 倡议意味着什么?

张晓辉

Kubernetes 服务网格 SMI

浅谈非 EVM 公链的可能性: 兼容多类型虚拟机是否是区块链未来?

One Block Community

区块链

蓦然回首,“工厂、构造、原型”设计模式,正在灯火阑珊处

掘金安东尼

JavaScript 前端 7月月更

五面阿里,终拿offer,不明白为什么面试官总喜欢问Java这种问题

程序知音

Java 阿里 后端技术 八股文 Java面试八股文

备战金九银十,两份JAVA面试题2022最新整合版,祝你脱颖而出

王小凡

Java MySQL spring 面试 springboot

Moonbeam创始人解读多链新概念Connected Contract

One Block Community

区块链

数据中台建设(五):打破企业数据孤岛和提取数据价值

Lansonli

数据中台 7月月更

HarmonyOS分布式协同演奏技术实现路线(Java)

程序员啊叶

Java 编程 程序员 架构 java面试

京东发布这份SpringBoot实战手册带你从0手动搭建企业级商城项目

程序猿阿宇

程序员 面试 java程序员 Spring Boot CLI 秋招

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