思维碎片
提示
EasyOps
的设计仍在逐步改进与完善中,本文将随时发生变化,感兴趣的朋友们可以时刻保持关注;- 在下方的版权声明中有本文作者的联系方式,有不同意见和相关建议的朋友可以与其保持联系;
- 也可在本文底部的评论区登录 Github 后,直接发表您的观点;
版权声明
- 文章作者: flytreeleft - flytreeleft@crazydan.org
- 文章链接: https://studio.crazydan.org/docs/easy-ops/system-design/thoughts
- 版权声明: 本文章采用许可协议《署名 4.0 国际 (CC BY 4.0)》。 转载或商用请注明来自 Crazydan Studio!
- 口号: Make Ops Easy,以不变应万变
- 采用Erlang/Elixir开发
- 两方面:应用层面;控制层面。前者由k8s调度和监控,后者通过脚本等实施。后者涉及实施、维护、监控,不喜欢使用Ansible是因为需要尝试和验证脚本和命令(默认情况看不到输出,若出现严重错误无法及时发现并终止),很多需要根据环境做改变和检测,无法一次到位,除非是针对纯净和一致的环境
- 录制任务操作,获取日志,分析日志
- 接管主机shell,在一个界面中输入命令或执行脚本,再分发至各个主机,分别获取和分析输出。命令针对系统做适应性转换
- 拖动脚本到执行界面便自动在目标主机执行
- 无需在脚本端转换输出,直接在系统层面按照规则转换,并在后续执行时自动转换
- 选中多个主机,启动ssh连接并开启shell窗口
- 编写匹配规则时,以当前输出为例动态显示结果
- 避免操作因网络问题而中断,并在恢复连接后可继续前面的任务:出现中断时,受控端则主动挂起?在受控端记录每个执行步骤以在控制端恢复连接时查看?
- 文件传输支持断点续传,以及分块并发传输
- 尝试在首次连接时安装必要的最小化的agent工具;尝试用Go编写agent和master并在master提供web(websocket)支持;通信加密;
- 对执行命令的危险性及产生的后果进行分析并给予警告提醒,比如,删除根目录,rsync添加了delete选项(若src以/结尾,则传输的是目录内文件)等
- 将系统命令封装为某种语言的库函数,使用对应的意义明确的参数名替代命令选项
- 初始:从一个端点开始向其他端点安装agent,且agent可以任何用户身份运行并在需要时切换到其他用户(经常的切换操作将被自动化);在需要时,同一agent可同时支持以桥接方式连接到其他端点,在管理端无差异地显示这些被桥接的端点;
- 可通过某种连接和控制协议从控制端连接受控端点,而无需在端点安装agent,且同样可以桥接方式建立连接
- agent之间可互通,管理端提供web界面以及操作记录等功能
- 以端点的 固定且具有 唯一性的数据(所有网卡的物理地址等)为自动识别的标识,并与特定操作建立联系
- 对内网主机可与外部服务端建立连接并以推送方式收发控制消息和数据
- 复制/移动时进行文件名称配对检查,如,存在名称更匹配的目标但实际选择的是其他目标,这时需进行二次确认
- 主动保护系统文件,确保其不被错误删除:标记文件受保护,检查所有删改命令和操作。包装或替换系统命令以进行控制和检查(定义同名的bash function?)
- 统一各种表达式规范(如正则表达式)以消除系统实现的差异
- 对所有修改文件进行版本控制,而对二进制文件或较大的文件进行备份以便在遇到错误时可还原
- 在某一台主机上执行的命令可在其他多台主机上回放执行(可剔除,可增加,可系统自适应);可以在某台主机上输入命令的同时在其他多台中同步输入相同命令,并同时显示输出;
- 数据、习惯、常用操作可被携带
- 移动终端支持
- 主机资源多级分组以支持为外部客户进行运维,以分组为单位划分责属和操作权限
- 按组设定可对主机进行的操作,避免误操作造成的严重后果
- agent端需记录所有的操作、输出及影响的文件(分布式数据库,agent端即为一个节点),主动备份和版本化(采用不可变机制?)文件和脚本
- 出现异常时,默认暂停所有节点的后续执行(正在执行的不受影响),待修复异常后,再继续执行或全部或部分中断,异常的节点重新从执行异常的命令开始
- 可根据输出内容做自动处理:发送按键、终止操作等
- 对于虚拟机,支持通过API接口发送按键消息 ;对于物理机,可通过控制U盘发送按键消息。初始是发送按键以调用系统内命令做shell封装以重定位输出到文件,以便于后续能接收到输出
- 展示配置数据的关联性,对配置的作用和影响能够一目了然
- 应用管理以实际运行的主机或虚拟机为单位进行管理,在视图上为应用服务,下层为组成服务的各个子服务,再下层为运行所在的设备,其他的为各类资源,如存储,网络等
- 执行脚本需备注应对的场景以及需要解决的问题,以方便共享学习,形成知识库
- 对于固定的自动化流程,需要对每个环节细化整理出执行清单,并在执行过程中检查清单执行结果,执行前后对输入输出与预期值进行匹对。如,构建项目代码的提交ID是否与预期的一致(启动构建前需要录入预期的代码版本),操作的配置是否正确,数据库变更结果是否符和预期等。每个环节涉及的输入输出都是可查的。从而为新人提供清晰的熟悉流程的机制,同时预防误操作和错误配置导致流程执行异常或数据安全问题