You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
10 KiB
Markdown

2 years ago
# 08 | 如何在CMDB中落地应用的概念
我们前面讲了应用是整个微服务架构体系下运维的核心而CMDB又是整个运维平台的基石。今天我就讲讲在CMDB中如何落地应用这个核心概念以及如何建立应用集群分组的思路。
## 如何有效组织和管理应用
微服务架构下会有很多应用产生出来,少则十几、几十个,多则上百甚至上千个。这时我们面临的第一个问题就是如何有效地组织和管理这些应用,而不是让它们在各处散乱,命名方式和层次结构可能还不统一。
你可能接触过“**服务树**”的概念这个提法是小米在早期互联网运维实践的分享中传播出来的。我第一次听到这个概念是在13年阿里技术嘉年华大会上听小米运维的分享。再往前这个概念应该是从百度的运维体系中借鉴出来的。
这里的服务实际对应的就是我们前面提到的应用这个概念。据我了解,在阿里和腾讯都是叫作应用,现在业界比较通用的叫法也是应用。其实叫什么并不重要,关键还是要学习到对这个概念的管理方式。
从服务树这个名字中我们就可以了解到有效组织和管理应用的方式就是把它组织成一个树形的层次结构。这种管理模式无论是在BAT还是在其它的互联网公司基本都是一样的思路和模式所以叫法虽然不同但是思路上却是相通的可谓异曲同工。
**基于业务维度的拆分,对应产生了我们的应用拆分原则**。比如对于电商公司大的维度会有电商、支付、广告、流量和搜索等业务领域进一步电商业务领域里最典型的会有用户、会员、商品、交易、商家、店铺以及物流等这里面还可以再进一步细分比如商品会有详情、SKU、SPU、库存、评价、标签等。
讲到这里,我们再看一下技术团队的组织架构,基本上是对应着整个业务技术架构的拆分的。也就是**业务架构决定了技术架构,而技术架构又决定了一个研发团队的组织架构**,这个组织架构中不同的团队单元分别承担着对应业务的需求开发和实现职责。
上面这个组织架构建设的逻辑和思路,也是我们在组建团队和职责划分时可以参考的。
这样一个逻辑讲下来,我们的**应用管理思路**其实也就明晰了:**产品线-业务团队-应用**。
这里举个电商商品的例子就是:电商技术-商品团队-商品中心-商品详情等。
![](https://static001.geekbang.org/resource/image/51/ab/517948c6d93d9818f4d3bab69ba87bab.jpg)
当然因为每个公司对组织架构定义的方式不同,也可以用一、二级部门这样的方式来指代。但是具体团队的分工和职责,一定是来自于业务架构决定的技术架构,只有这样,各业务团队才会职责清晰,配合协作才会顺畅起来。
对于应用名定义,要设定规范,比如:
* 应用名必须以大小写英文字母以及下划线组合;
* 应用名长度不超过40个字符尽量简单易懂
* 不允许出现机房代号和主机名称这样的信息。
简单举例商品中心命名为itemcenter商品详情命名为detail。
这里做个小结:**到了软件运维阶段,运维工作是否可以高效地组织开展,很大程度上,在前面的业务架构拆分阶段就决定了。也就是业务架构拆分得是否合理、职责是否明晰,决定了后续团队组织架构是否合理、团队职责是否明晰。如果这点没做好,到了运维阶段必然就是混乱的**。
这一点我在开篇词中也提到过,**运维能力的体现,一定是整体技术架构能力的体现,割裂两者单独去看,都是没有意义的**。同时,对于当前仍然把运维割裂建设的研发团队,也需要去思考一下在组织架构建设上的合理性了。
## 应用的集群服务分组建设
上述讲到的是应用的组织管理,看上去逻辑思路相对清晰,组织起来也不复杂,但是再往下,应用的集群服务分组建设就会相对复杂了。
为什么会有集群服务分组呢?我们一起来看这么几个需求场景。
**场景一:多环境问题**。
我们常见的环境会有开发联调环境、集成测试环境、预发环境、线上环境等等。后面我们讨论持续交付时会讲到,实际场景下所需要的环境会更多。
**场景二多IDC问题**。
对于大型互联网业务会做业务单元化或者有海外业务拓展需求的场景我们会在多个IDC机房部署应用应用代码是相同的但是配置可能会不同。
**场景三:多服务分组问题**。
这个场景就跟具体业务场景相关了。举个例子比如商品中心IC这样一个核心应用对外会有商品详情、交易下单、订单、购物车、评价、广告、秒杀活动、会场活动、商家、店铺等一系列应用依赖它但是这些依赖它的应用优先级是不一样的。
* **核心应用和非核心应用**比如交易支付链路上的应用属于核心应用任何时候都必须要优先保障但是对于评价、商家和店铺这些应用优先级就低一些。反过来理解就是一个应用出现故障是不是会影响业务收入如果影响就属于核心应用如果不是或者影响非常小那就属于非核心应用。所以IC这个应用下面就会有IC的交易分组IC的广告分组、IC的电商分组等**这些分组就会相对固定和静态**。
* **场景因素决定**。这个对于电商就会比较典型比如大促时的秒杀场景对于参加秒杀活动的商品瞬时的访问量就会非常大而不参加活动的商品就不会有这么大的访问量。所以这时为了隔离较大的流量就需要有多个不同的秒杀IC分组从资源层面进行隔离同时上层秒杀活动的应用在配置中心配置依赖时就要配置到对应的秒杀IC集群分组上这样即使秒杀IC出现问题也不会影响正常的商品IC访问。所以根据场景不同阶段就会有IC的大促秒杀分组**这种类型的分组就需要根据实际的业务场景来决定,是个动态调整的过程,需要开发和运维一起来讨论和验证**。
一般情况下集群服务分组会有以上三个维度中的一个或多个来决定。还是以商品中心IC为例按照上面的介绍就会对应如下关系
![](https://static001.geekbang.org/resource/image/03/98/035dfa554ab4799e625f84eb52ab7d98.jpg)
至此,“**应用-集群服务分组-资源**”的对应关系就建立起来了。这里我们叫它“应用树”或者“服务树”都可以不管叫什么这个信息是CMDB中最为关键和核心的信息。为什么是最关键和核心的呢
## CMDB在基础服务体系中的核心位置
这里我们以应用为核心来看CMDB中会保存“应用-分组-资源”的对应关系,这个关系对于周边系统来说都是需要的,举例如下。
1.**监控系统**。
我们需要以上的对应关系,监控到每个应用、每个集群以及每台机器上的关键信息。
2.**发布系统**。
我们需要将每个应用对应的代码进行编译打包,然后发布到对应集群的主机上,也需要这个对应关系,这一点我在后面的持续交付中还会讲到。
3.**服务化框架**。
需要依赖应用和集群分组两个信息其中主要是对应用名和集群分组名的依赖对于服务化框架来说更多的是通过其配置管理中心注册的应用名来实现应用的服务和API管理这里要做到与CMDB统一。同样像LVS和Nginx这样的四七层负载以及ZK这样的开源分布式配置管理凡是涉及服务注册、服务发现以及服务上下线的基础服务都是类似思路。
4.**基础服务中**。
如分布式DB、分布式缓存和消息等就需要应用的应用名以及应用与资源IP的对应关系或者集群分组与IP的对应关系。
* **应用名**是因为要建立应用与分布式服务实例之间的关系。如应用与缓存NameSpace的对应关系应用与消息Topic的对应关系等以便于这些基础服务的生命周期管理和自动化开发。
* **应用与资源的对应关系**是因为有些核心资源是要做ACL访问控制的。比如对于用户、交易或支付这样非常敏感的数据它们对应的数据库就不允许随意连接而应该是仅限于授权过的应用访问。这时就要针对应用对应的IP地址进行白名单配置。一方面可以通过分布式DB中间件进行配置另一方面也可以通过在DB层面进行设置比如MySQL就可以直接配置白名单策略同时也可以在机器的iptables上配置至于如何配置就看具体需求了但是无论怎样应用与资源的对应关系是非常重要的。
5.**稳定性保障平台,或者叫服务治理平台**。
针对系统的稳定性,我们会在应用中做很多的降级限流和开关预案策略,这些都是跟应用直接关联的。而且按照我们前面介绍的,不同的集群分组,策略可能会有不同,所以又会跟集群分组相关。同时,这些策略最终下发到具体服务器上运行的应用实例上,所以这里就会需要应用、集群分组以及对应的资源关系。
总结一下,简单示意图如下:
![](https://static001.geekbang.org/resource/image/73/fe/7351b5e3b985d76c9e85875472c625fe.jpg)
## 总结
通过上述的分析,我们可以看到**基于以应用为核心的CMDB中又衍生出“应用-集群服务分组-资源”这样一个运维体系中的核心关系**。经过这三部分的分析,我们之前所说的基于应用为核心的运维视图就可以建立出来了,我们再次示意如下:
![](https://static001.geekbang.org/resource/image/10/6f/1028e2a9fdd0ab316a2893c6ee5d1e6f.jpg)
今天我们讨论的内容提到了监控、发布、基础服务以及稳定性平台会依赖CMDB中“应用、集群服务分组-资源”的对应关系信息但是当CMDB中的这些关系信息发生变化比如新增一个IP或者下线一个IP这些信息是如何传递到其它平台的呢这些平台又是如何查询这些关键信息的呢欢迎你留言与我一起讨论。
如果今天的内容对你有帮助,也请你分享给身边的朋友,我们下期见!