集群信息管理,架构设计中最容易遗漏的一环

准备系统性介绍“技术体系规划”了,这是第一篇。

 

监控平台,服务治理,调用链跟踪,数据收集中心,自动化运维,自动化测试… 很多要讲,却没想好从哪里入手。

讲Z平台,可能需要提前介绍Y服务;讲Y服务,可能需要提前介绍X知识。

 

思来想去,准备从技术体系里,最容易被遗漏,非常基础,却又非常重要的“集群信息管理”开始介绍。

由于基础,可能部分同学会觉得简单;由于大家所在公司处于不同阶段,所以在实现上会介绍不同阶段的公司应该如何来实现。

 

还是一如既往的按照“架构师之路”的思路:

  • 是什么

  • 什么场景,为什么会用到,存在什么问题

  • 常见方案及痛点

  • 不同阶段公司,不同实现方案

希望大伙有收获。

 

一、啥是集群?

互联网典型分层架构如下:

  • web-server层

  • service层

  • db层与cache层

 

为了保证高可用,每一个站点、服务、数据库、缓存都会冗余多个实例,组成一个分布式的系统,集群则是一个分布式的物理形态。

 

额,好拗口,通俗的说,集群就是一堆机器,上面部署了提供相似功能的站点,服务,数据库,或者缓存。

如上图:

  • web集群,由web.1和web.2两个实例组成

  • service集群,由service.1/service.2/service.3三个实例组成

  • db集群,由mysql-M/mysql-S1/mysql-S2三个实例组成

  • cache集群,由cache-M/cache-S两个实例组成

与“集群”相对应的是“单机”。

画外音:关于高可用架构,详见文章《究竟啥才是互联网架构“高可用”》。

画外音:缓存如果没有高可用要求,可能是单机架构,而不是集群。

二、集群信息

什么是集群信息?

一个集群,会包含若干信息(额,这tm算什么解释),例如:

  • 集群名称

  • IP列表

  • 二进制目录

  • 配置目录

  • 日志目录

  • 负责人列表

画外音:集群IP列表不建议直接使用IP,而建议使用内网域名,详见文章《小小的IP,大大的耦合》。

 

什么时候会用到集群信息呢?

很多场景,特别是线上操作,都会使用到各种集群信息,例如:

  • 自动化上线

  • 监控

  • 日志清理

  • 二进制与配置的备份

  • 下游的调用(额,这个最典型)

 

这些场景,分别都是如何读取集群信息的?

一般来说,早期会把集群信息写在配置文件里。

 

例如,自动化上线,有一个配置文件,deploy.user.service.config,其内容是:

name : user.service

ip.list : ip1, ip2, ip3

bin.path : /user.service/bin/

ftp.path : ftp://192.168.0.1/USER_2_0_1_3/user.exe

 

自动化上线的过程,则是:

  • 把可执行文件从ftp拉下来

  • 读取集群IP列表

  • 读取二进制应该部署的目录

  • 把二进制部署到线上

  • 逐台重启

画外音:啥,还没有实现自动化脚本部署?还处在运维ssh到线上,手动执行命令,逐台机器人肉部署的刀耕火种阶段?赶紧照着这个方案,做自动化改造吧。

 

又例如,web-X调用下游的user服务,又有一个配置文件,web-X.config,其内容配置了:

service.name : user.service

service.ip.list : ip1, ip2, ip3

service.port : 8080

web-X调用user服务的过程,则是:

  • web-X启动

  • web-X读取user服务集群的IP列表与端口

  • web-X初始化user服务连接池

  • web-X拿取user服务的连接,通过RPC接口调用user服务

 

日志清理,服务监控,二进制备份的过程,也都与上述类似。

 

三、存在什么问题?

上述业务场景,对于集群信息的使用,有两个最大的特点

  • 每个应用场景,所需集群信息都不一样(A场景需要集群abc信息,B场景需要集群def信息)

  • 每个应用场景,集群信息都写在“自己”的配置文件里

一句话总结:集群信息管理分散化。

 

这里最大的问题,是耦合,当集群的信息发生变化的时候,有非常多的配置需要修改:

  • deploy.user.service.config

  • clean.log.user.service.config

  • backup.bin.user.service.config

  • monitor.config

  • web-X.config

这些配置里,user服务集群的信息都需要修改:

  • 随着研发、测试、运维人员的流动,很多配置放在哪里,逐步就被遗忘了

  • 随着时间的推移,一些配置就被改漏了

  • 逐渐的,莫名其妙的问题出现了

画外音:ca,谁痛谁知道

 

如何解决上述耦合的问题呢?

一句话回答:集群信息管理集中化。

 

四、如何集中化管理集群信息

如何集中化管理集群配置信息,不同发展阶段的公司,实现的方式不一样。

早期方案

通过全局配置文件,实现集群信息集中管理,举例global.config如下:

[user.service]

ip.list : ip1, ip2, ip3

port : 8080

bin.path : /user.service/bin/

log.path : /user.service/log/

conf.path : /user.service/conf/

ftp.path :ftp://192.168.0.1/USER_2_0_1_3/user.exe

owner.list : shenjian, zhangsan, lisi

[passport.web]

ip.list : ip11, ip22, ip33

port : 80

bin.path : /passport.web/bin/

log.path : /passport.web/log/

conf.path : /passport.web/conf/

ftp.path :ftp://192.168.0.1/PST_1_2_3_4/passport.jar

owner.list : shenjian, zui, shuaiqi

 

集中维护集群信息之后:

  • 任何需要读取集群信息的场景,都从global.config里读取

  • 任何集群信息的修改,只需要修改global.config一处

  • global.config会部署到任何一台线上机器,维护和管理也很方便

画外音:额,当然,信息太多的话,global.config也要垂直拆分

 

中期方案

随着公司业务的发展,随着技术团队的扩充,随着技术体系的完善,通过集群信息管理服务,来维护集群信息的诉求原来越强烈。

画外音:慢慢的,配置太多了,通过global.config来修改配置太容易出错了

如上图,建立集群信息管理服务

  • info.db :存储集群信息

  • info.cache :缓存集群信息

  • info.service :提供集群信息访问的RPC接口,以及HTTP接口

  • info.web :集群信息维护后台

 

服务的核心接口是:

Info InfoService::getInfo(String ClusterName);

Bool InfoService::setInfo(String ClusterName, String key, String value);

 

然后,统一通过服务来获取与修改集群信息:

  • 所有需要获取集群信息的场景,都通过info.service提供的接口来读取集群信息

  • 所有需要修改集群信息的场景,都通过info.web来操作

 

长期方案

集群信息服务可以解决大部分的耦合问题,但仍然有一个不足:集群信息变更时,无法反向实时通知关注方,集群信息发生了改变。更长远的,要引入配置中心来解决。

配置中心的细节,网上的分析很多,之前也撰文写过,细节就不再本文展开。

 

五、总结

集群信息管理,是架构设计中非常容易遗漏的一环,但又是非常基础,非常重要的基础设施,一定要在早期规划好:

  • 传统的方式,分散化管理集群信息,容易导致耦合

  • 集中管理集群信息,有全局配置,信息服务,配置中心三个阶段

六、调研

调研一、对于集群信息管理,你的感受是:

  • ca,没考虑过这个问题,一直是分散式管理

  • 在使用全局配置文件

  • 在使用信息管理服务

  • 在使用配置中心

 

调研二、对于自动化运维,你的感受是:

  • ca,啥是运维,都是研发在线上乱搞

  • 有专门的运维,但一直是人肉运维

  • 运维在使用脚本,实现了自动化

  • 运维都下岗了,在使用平台,实现了平台化

嗯,有道理,得转发一下。

下期预告:监控平台架构细节

本期推荐:框架组件,究竟要不要自研?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值