B/S架构的软件配置的分类与管理
前言
本文分享B/S架构软件配置的分类与管理的一些实践经验。在开始本文之前,先来看看下面几个场景中涉及到的配置,到底是由运维人员还是运营人员来操作呢?
场景一:
在线购物网站,双十一由于订单火爆,为了防止恶意刷单,现在需要将
订单系统下单接口的QPS
配置阈值调低进行限流。
场景二:
在线购物网站,双十一由于订单火爆,快递运输能力有限,现在需要在下单时
发布一个公告
,提醒用户快递发货需要延迟1~2工作日。
场景三:
在线购物网站,双十一大促,决定指定某类型商品用户下单可以使用花呗支付,现在需要
开启该类商品的花呗支付通道
。
运维与运营的区别
在回答上面问题之前,我们先看看运维和运营在岗位职责上的区别?
运维 | 运营 | |
---|---|---|
方向 | 技术方向 | 业务方向 |
目标 | 系统稳定运行为导向 | 客户价值为导向 |
工作内容 | 业务架构底层支撑,保障IT系统运行 | 围绕产品,多种运作(用户增长,留存,促活,转化) |
关注点 | 偏技术 | 偏业务 |
能力要求 | 更强调技术能力 | 更强调规划和营销能力 |
通过了解了运维与运营的区别之后,上面的问题应该比较好回答了,下面表格中给出来答案和分析。
场景 | 操作配置的角色 | 分析 |
---|---|---|
场景一 | 运维 | QPS限流专业问题,维护系统稳定性 |
场景二 | 运营 | 业务场景需要,提升用户体验 |
场景三 | 运营 | 业务场景需要,增加交易量 |
上面三个场景涉及到的配置相对比较容易辨识应该是由运维还是运营来操作。然而实际开发中,研发人员面对比较多的配置定义时,容易忽略配置的使用场景或者对其具体的操作人理解有误,从而导致配置的管理上出现偏差。
软件配置的分类
软件配置分类策略
在进行软件分类之前,先了解一些B/S(Browser/Server)架构的软件配置相关的特点。
- 用户通过浏览器访问服务端,服务端的改进和升级,用户端不需要关注或者升级。
- 通常服务端的改进和升级可能伴随着新功能的发布,BUG修复,亦或者用户端看到的内容或者页面有变化,都会涉及一系列的配置。比如:服务端升级,则是运维人员重新部署了新版本软件;用户打开浏览器看到网页上出现了
国庆
庆典的Banner图,则是运营人员在服务端的运营平台上发起了节日提醒配置。
为了能有效的对软件配置进行管理,我们可以根据配置的维护人的角度将配置分为两大类:
- 运维配置
- 运营配置
什么是运维配置
运维配置是:软件(服务)正常稳定可靠运行的必要配置,这些配置通常来自
非功能性需求
,关注点在技术实现上,跟运维人员相关。
下面列举一些可以认为是运维配置的内容:
- 软件依赖的数据库地址,用户命,密码(正常运行的必要配置)
- 数据库连接池的配置参数(为性能,软件稳定运行)
- 负载均衡配置(流量转发)
- 服务健康检查配置(健康服务的健康状态,及时作出处理)
什么是运营配置
运维配置:软件(服务)正常运行过程中,由于要达成不同业务场景,不同运营活动,不同的权限,不同的使用习惯等业务目标,需要通过运行时修改程序的一些配来实现置,这些配置通常来自
功能性需求
,关注点在业务场景和功能上,跟运营人员相关。
备注:有时候为了软件(服务)的易用性,也会通过增加运营配置来满足这一非功能性需求。
下面列举一些可以认为是运营配置的内容:
-
为在线购物网站配置一个新的支付方式,用户在下单支付时可以选择新的支付方式进行支付
-
在线购物网站的客服联系方式变更
- WordPress博客系统更换一下主题风格,设置一下作者的联系方式
备注:定义一个概念是非常困难的,虽然上文中定义了运维配置和运营配置,仅供参考,以免引起纷争。比如:NoSQL,微服务等概念最初的描述也不是特别的明确,随着更多业内人士的讨论,实践才达成了一定的共识。
为什么没有研发配置
上面提到运维配置,运营配置,那为什么没有研发配置呢?这个问题比较好回答。
首先答案是:没有研发配置。理由如下:研发所交付的是可工作的软件,可工作的软件所依赖的基础设施以及基础设施(网络,数据库,磁盘,端口)的配置是运维的工作范畴。运营配置是在运维提供可运行的软件的基础上进行的。
可能会有人提问道
DevOps
(开发运作)中的
Ops
, 开发需要参与到软件的部署维护工作中,但是我们仍然要明确一个事情那就是
DevOps
是扩大的开发人员的工作边界,
Ops
中涉及的配置让属于运维配置。
配置管理设计思路
软件研发设计阶段关于配置管理的设计需要满足运维和运营两方面的要求。由于运维和运营的岗位职责的不同,特别是技术和业务背景的不同,在配置管理的设计上要充分考虑两者的差异。
配置管理常见设计方案
配置管理常见设计方案很多,本文主要以使用方式来讨论的是配置管理的实现,至于配置如何存储不是本文的关注点。
配置方式 | 运维配置 | 运营配置 |
---|---|---|
命令行工具 | 适合,较为专业 | 不适合 |
配置文件 | 适合,较为专业 | 不适合 |
可视化界面 | 适合,提高运维效率 | 适合,运营人员易用 |
引导界面 | 适合,专业程度较高引导运维配置 | 适合,涉及业务领域知识引导运营配置 |
这里重点说一下引导界面,引导界面也称为:引导设计。经常用在移动端APP上,目前在Web网站上也大量出现。如下图示:
按照引导界面实现方式上通常分为静态引导界面和动态引导界面。配置管理常使用动态引导界面,引导界面在可视化界面的基础上增加了交互式引导。比如:用户(运维或运营人员)在首次进行配置时,通过提示用户该如何进行一步步操作完成其目标;亦或者将引导界面作为帮助手册的一部分。
运维配置管理解决方案
由于运维属于技术范畴,其涉及到的配置也通常具有一定的通用性。关于运维配置管理解决方案下面列举几个:
- Apollo : 配置管理中心,能够集中化管理应用不同环境,不同集群的配置,具备可视化界面操作
- Nacos:阿里巴巴开源的配置中心
- Spring Cloud Config: Spring Cloud生态组件的配置中心
- Disconf : 百度开源的分布式系统配置管理的通用组件和通用平台
除了上面例举的配置管理解决方案外,软件研发经常也会采用一些分布式系统中间件来实现配置管理,比如:Zookeeper, Consul,etcd。
下面列举几个常见的运维配置管理实现的示例图:
- Apollo配置管理界面
- Nacos配置管理界面
运营配置管理解决方案
很遗憾,运营配置管理没有标准的解决方案。上文中
什么是运营配置
中提到,该类配置通常来自
功能性
需求,既然是功能性需求,那么必须从具体业务需求的角度出发去解决运营配置的管理。
不过仍然有一些可以借鉴和参考的思路。比如:通常会在运营人员参与的系统中增加
设置
或者
系统管理
或者
运营配置
等功能,然后对功能进一步分解实现具体的配置管理。比如:常规设置,个性化配置,支付管理,渠道管理,用户管理,权限管理等。当然不仅限于此。业务功能中常常涉及运营人员参与的配置,比如:站内通知功能,优惠券发放功能等都将包含运营的配置。
下面列举几个常见的运营配置管理实现的示例图:
- 阿里云控制台用户管理安全设置
- WordPress博客系统运营端设置
- 常见的系统权限管理
结尾
本文从软件配置的分类和配置管理设计两大方面分享了一些实践经验。最后总结一下:研发人员面对功能性需求和非功能需求所涉及的配置,应该尽早的在软件设计的阶段就去考虑配置应该如何划分与管理;满足运维和运营能够在各自工作范围内更好的操作配置实现彼此的工作目的要求。
参考文献
- 面向运营的IT运维配置管理
- Disconf 配置管理服务
- Nacos 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
- Apollo 携程框架部门研发的分布式配置中心
- Spring Cloud Config
- 关于引导设计,你知道多少