配置中心的设计方案

对于配置文件,我们不陌生,它提供我们可以动态修改程序运行能力。引用别人的一句话就是:系统运行时(runtime)飞行姿态的动态调整。

我可以把我们的工作称之为在快速飞行的飞机上修理零件。我们人类总是无法掌控和预知一切。对于我们系统来说,我们总是需要预留一些控制线条,以便在我们需要的时候做出调整,控制系统方向(如灰度控制、限流调整),这对于拥抱变化的互联网行业尤为重要。对于单机版,我们称之为配置(文件),对于分布式集群系统,我们称之为配置中心(系统);下面聊聊我们的配置中心。

演进中的配置

当我们是一个单机服务的是,我们的配置通常写在一个文件中的,代码发布的时候,把配置文件和程序推送到机器上去。

Java高级——阿里巴巴统一配置中心的设计方案

当随着业务的用户量增加,通常我们会把我们的服务进行多机器(集群)部署。这时候,配置的发布就变成了如下:

Java高级——阿里巴巴统一配置中心的设计方案

业务的急剧扩张,导致单机服务无法满业务需求。这时候需要对单体大服务进行切开,服务走向SOA(微服务化)。

Java高级——阿里巴巴统一配置中心的设计方案

这种场景中,配置文件的部署可能如上图所示。这样去部署配置简直是一场噩梦,而且无法做到快速的动态的调整。失去了配置主要意义之一。这时候就需要今天说的统一配置中心。

配置中心之简版

首先来看下我们理想中的配置中心需要具备哪些特点。

配置的增删改查

不同环境配置隔离(开发、测试、预发布、灰度/线上)

高性能、高可用性

请求量多、高并发

读多写少

我们可以设计出如下的简版配置中心

Java高级——阿里巴巴统一配置中心的设计方案

设计说明点:

  • 通过OA系统对每一条配置(每一个配置有唯一的配置ID)进行增删改查。

  • 区分不同环境的配置,每个环境同一配置ID对应不同数据库记录。

  • 配置最终以json格式(便于编辑和理解)储存在mysql数据库中。

  • 引入redis集群,做配置的缓存(比如可以设置配置修改后1分钟后生效)

  • 配置对外服务,多机器部署,满足性能需要。

  • 如果有必要,可以引入配置历史修改记录。

很多时候,这样可以基本上满足我们对配置系统的基本需求。

这种设计,由于所有的配置都存放在集中式缓存中,这样集中式的缓存也会有他的性能瓶颈。而且,每次配置的访问都需要发起rpc请求(网络请求),因此考虑在客户端引入本地缓存的选择及其原理(localCache,例如Ehcache)。

配置中心之性能改进

为了提高配置中心的可用性,减少网络请求等因素对性能带来的影响,我们考虑在客户端引入localcache,来解决系统的高可用,高性能、可伸缩性。

Java高级——阿里巴巴统一配置中心的设计方案

相对于第一版的改进点是,在客户端引入localcache。开启线程异步调用配置服务,更新本地配置。这样可以减少rpc调用。

这种方式较为简单,但是存在一个问题,就是一旦用户量大的时候,会增加很多无意义的轮询。因为配置中心的定位就表明了他的修改并不会很多,所以大多数情况下的轮询都是无意义的。会给缓存系统增加很多无谓的压力。

同时,由于各个客户端的拉取时间及网络延迟等都不尽相同,也会存在数据一致性的问题,

配置中心之可用性改进

还好,配置通常都只会有一个入口修改,因此可以考虑在配置修改后,通知应用服务清理本地缓存和分布式缓存。这里可以引入mq或ZooKeeper。

Java高级——阿里巴巴统一配置中心的设计方案

感兴趣的朋友可以了解下阿里巴巴的Diamond,他的工作原理就是这种通过推拉结合的方式,减少不必要的轮询,并且可以降低缓存系统的负载。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目号 版本 OA系统 概要设计说明书 2017年 5 月 20 日 版本历史 "日期 "版本 "说明 "作者 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 目 录 1. 引言 4 1.1. 编写目的 4 1.2. 项目背景 4 1.3. 适用范围 4 1.4. 术语和缩略语 4 1.5. 参考资料 5 2. 总体设计 5 2.1. 运行环境 5 2.1.1. 硬件环境 5 2.1.2. 软件环境 5 2.2. 开发环境 5 2.2.1. 硬件环境 5 2.2.2. 软件环境 6 2.3. 总体结构设计 6 2.3.1. 系统体系架构 6 2.3.2. 系统功能架构 7 2.3.3. 系统部署架构 7 2.3.4. 系统软件架构 8 3. 系统功能设计 8 3.1. 功能模块列表 8 3.2. 系统菜单 9 3.3. 个人事项 10 3.3.1. 待办公文 10 3.3.2. 已办公文 12 3.3.3. 待阅公文 12 3.4. 公文起草 12 3.4.1. 外部来文登记 12 3.4.2. 司内申请 12 3.4.3. 司内请示 13 3.4.4. 报送办领导 13 3.4.5. 草稿箱 13 3.5. 基础管理 13 3.5.1. 类型设置 13 3.5.2. 流程设置 15 3.5.3. 文单设置 15 3.5.4. 文号设置 16 3.5.5. 批示设置 16 3.6. 系统管理 17 3.6.1. 功能需求用例 17 3.6.2. 用例描述 17 3.6.2.1. 用户 17 3.6.2.2. 组织机构 18 3.6.2.3. 部门 18 3.6.2.4. 用户 19 3.6.2.5. 组 19 3.6.2.6. 权限 19 3.6.2.7. 角色 19 3.6.2.8. 功能模块 20 3.6.2.9. 功能权限 20 3.6.2.10. 页面元素权限 21 3.6.3. 用户管理 21 3.6.4. 角色管理 21 3.6.5. 权限管理 21 3.6.6. 组织管理 21 3.6.7. 菜单管理 21 3.6.8. 字典管理 21 3.6.9. 自定义列表 22 3.6.10. 自定义菜单 22 4. 系统接口设计 22 4.1.1. 接口1 22 4.1.2. 接口2 22 5. 数据结构设计 22 6. 系统出错处理 24 6.1. 出错信息 24 6.2. 补救措施 25 6.3. 系统维护设计 25 7. 性能与安全等设计 26 7.1. 系统性能 26 7.2. 系统安全 27 引言 1 编写目的 OA系统概要设计说明书是在客户提出的需求基础上,经过对OA系统需求规格说明书和 系统原型的分析和系统设计编写而成。用于将系统相关需求转换为未来系统的设计,提 交软件研发部门相关实现团队作为系统研发的依据和指南。 2 项目背景 根据电子公文管理总体要求,在现有信息化OA系统建设的基础上,要求完善电子公 文办理系统和交换系统,建设支持大并发和多级管理模式的协同办公平台,实现高效的 业务协作和信息共享,增强电子文件的完整性、可靠性、可用性和安全。基于此现状, 万达公司根据自动化系统总体要求,拟建设"统一规范、稳定安全、协同共享"的OA管理 系统,实现电子文件管理规范与信息化的全面融合,本文是基于对于新版OA管理信息系 统的基本设想和总体需求的理解基础上,形成的设计文档 3 适用范围 本文档适用于所有与本项目有关的软件设计、开发阶段相关人员,主要包括项目组成 员、研发经理、开发人员,项目管理人员,测试人员以及在以后想对系统进行扩展和维 护的相关人员等。 4 术语和缩略语 "术语、缩略语 "说明 " " " " " " " 5 参考资料 《软件需求规格说明书》 《OA系统原型》 总体设计 1 运行环境 1 硬件环境 1) 应用服务器: 2) 数据库服务器: 2 软件环境 1) 操作系统: Radhat Linux 6.0 数据库系统: ORACLE10I 中间件:Tomcat、Jboss 通信协议:http 客户端浏览器:IE9 2 开发环境 1 硬件环境 1) 应用服务器: 2) 数据库服务器: 2 软件环境 1) 操作系统:Win2003、Win7 2) 数据库系统:ORACLE10I 3) 开发平台及工具:炎黄Eclipse 4) 通信协议:http: 5) 客户端浏览器:IE9以上、Chrome 3 总体结构设计 1 系统体系架构 图2-1 OA系统体系架构图 2 系统功能架构 图2-2 OA系统功能架构图 3 系统部署架构 4 系统软件架构 5 核心业务对象 6 核心业

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值