百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

微博混合云架构实践之不可变基础设施

qiyuwang 2025-03-24 20:16 4 浏览 0 评论

与常见的灵活部署环境背道而驰,微博混合云架构上的不可变基础设施服务有哪些特别?

不可变,顾名思义就是一旦创建,便不再修改。这听起来和我们常见的诉求——灵活的部署环境,似乎背道而驰。对于DCP中的基础设施而言,这并不矛盾,因为创建后就没有必要去修改了。整个基础环境作为一种版本化管理的资源,和代码类似。运行时如果有一定要变更的部分,那么直接更新源码,重新创建资源即可。老版的环境依然存在,可以在需要时用于回滚。

  • 能够快速获取所需的资源;

  • 业务应用和基础资源之间相互独立。

微博私有云的传统基础设施

正如概述中所说,私有云的设备申请和环境部署流程过于繁杂,如下图所示:

  1. 不同业务部门的环境需求差异非常大,甚至操作系统版本都不同,难以统一管理;

  1. 随着运行时间增加,即使最初两台主机环境相同,到后来也无法保证一致性,最坏的情况可能造成业务应用部署失败;

  1. 环境的回滚几乎不可能,只有重装操作系统。

微博混合云上的基础设施服务

微博混合云的资源分为两个部分:内网主机和阿里云ECS,我们的目标是对上层业务提供统一、不可变的基础环境。但是如果彻底不可变,反而带来了不小的麻烦。还有人提出拒绝SSH,目的也是如此。试想仅仅需要临时改变一个系统参数,就必须完整构建一次环境,并且重新部署,这是令人难以接受的。

正视差异化

环境一致性

  • 资源在使用过程中,环境保持不变:内网主机随着时间推移,会不可避免地被修改,因此我们制作了一个运维使用的基础Docker镜像,即上面的OPS镜像,包括一些工具软件和业务脚本,并将docker.sock挂载进去。这样就可以在容器内部操作Docker Daemon,而其他修改也仅仅只在容器内部,不会污染主机环境。公有云的使用场景原则上不会发生环境漂移的现象,毕竟每次新建的资源使用时间不会超过12小时,同时使用上述运维镜像,更加没有必要操作宿主机。

  • 重新创建的和已经在运行的资源环境一致:即使配置未变更,也可能出现不一致的问题,尤其在使用外部软件仓库的情况下,比如脚本中yum update或者yum install docker类似的命令。因此我们使用了内部搭建的软件仓库,可自己对软件的更新频率和范围进行控制,同时也要求脚本中所有安装软件的命令带上版本号,如yum install docker-1.6.2。

基础资源版本化

架构演进

初试:Docker Machine

  1. docker-machine create

  1. 配置自定义的系统环境

  2. 部署服务

  • Docker启动参数无法完全自定义,当时只能配置少数几个参数,如--insecure-registry。

  • 命令行对应的几个函数都是不可导出的,因此无法通过API调用,只能进行二进制依赖。

  • 官方宣布不支持CentOS 6.x及之前的版本,而微博内部还有一小部分CentOS 6.5的服务器。

  • Docker的安装使用的官方脚本,超时问题比较严重。

  • 不够稳定,当时还处于开发阶段,版本迭代过于频繁。

改进:VM Image & Ansible

FROM weibo_plat_init:1.0

INCLUDE user.yml

INCLUDE config.yml

ROLE hongbao

  • 使用镜像创建ECS后,ntpd的配置会恢复为阿里云默认值,如果使用自定义的需要再次修改。

  • 如果在构建镜像时挂载了数据盘,生成镜像前需要删除/etc/fstab中自动挂载的配置,否则该镜像将由于找不到第二块硬盘的分区而无法启动。

  • 开启SSH参数,pipelining和ControlPersist;

  • 优化playbook,除去非必要模块,减少远程依赖;

  • callback模块异步化,Ansible自身会等callback结束才执行后续命令,这点可以大大降低高并发时的耗时;

  • 将需要网络传输的操作,如安装软件包、拉取Docker镜像等,内置到ECS镜像中。

基础设施发布

  1. 在DCP申请阿里云资源;

  1. 根据选择的VM镜像创建ECS;

  1. 待ECS启动完成后下发Ansible命令进行初始化;

  2. 交付上层业务使用。

Ansible Scheduler

部署公共组建

  • DNS;

  • Yum Repository;

  • Docker Registry;

  • Ansible Scheduler。

基础监控

总结

相关推荐

# 安装打开 ubuntu-22.04.3-LTS 报错 解决方案

#安装打开ubuntu-22.04.3-LTS报错解决方案WslRegisterDistributionfailedwitherror:0x800701bcError:0x80070...

利用阿里云镜像在ubuntu上安装Docker

简介:...

如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本

UbuntuKylin系统使用一段时间后,有新的版本发布,如何将现有的UbuntuKylin系统升级到最新版本?可以通过下面的方法进行升级。1.先查看相关的UbuntuKylin系统版本情况。使...

Ubuntu 16.10内部代号确认为Yakkety Yak

在正式宣布Ubuntu16.04LTS(XenialXerus)的当天,Canonical创始人MarkShuttleworth还非常开心的在个人微博上宣布Ubuntu下个版本16.10的内...

如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)

在Windows11的WSL(WindowsSubsystemforLinux)上安装Ubuntu非常简单。以下是详细的步骤:---...

Win11学院:如何在Windows 11上使用WSL安装Ubuntu

IT之家2月18日消息,科技媒体pureinfotech昨日(2月17日)发布博文,介绍了3中简便的方法,让你轻松在Windows11系统中,使用WindowsSubs...

如何查看Linux的IP地址(如何查看Linux的ip地址)

本头条号每天坚持更新原创干货技术文章,欢迎关注本头条号"Linux学习教程",公众号名称“Linux入门学习教程"。...

怎么看电脑系统?(怎么看电脑系统配置)

要查看电脑的操作系统信息,可以按照以下步骤操作,根据不同的操作系统选择对应的方法:一、Windows系统通过系统属性查看右键点击桌面上的“此电脑”(或“我的电脑”)图标,选择“属性”。在打开的...

如何查询 Linux 内核版本?这些命令一定要会!

Linux内核是操作系统的核心,负责管理硬件资源、调度进程、处理系统调用等关键任务。不同的内核版本可能支持不同的硬件特性、提供新的功能,或者修复了已知的安全漏洞。以下是查询内核版本的几个常见场景:...

深度剖析:Linux下查看系统版本与CPU架构

在Linux系统管理、维护以及软件部署的过程中,精准掌握系统版本和CPU架构是极为关键的基础操作。这些信息不仅有助于我们深入了解系统特性、判断软件兼容性,还能为后续的软件安装、性能优化提供重要依据。接...

504 错误代码解析与应对策略(504错误咋解决)

在互联网的使用过程中,用户偶尔会遭遇各种错误提示,其中504错误代码是较为常见的一种。504错误并非意味着网站被屏蔽,它实际上是指服务器在规定时间内未能从上游服务器获取响应,专业术语称为“Ga...

猎聘APP和官网崩了?回应:正对部分职位整改,临时域名可登录

10月12日,有网友反映猎聘网无法打开,猎聘APP无法登录。截至10月14日,仍有网友不断向猎聘官方微博下反映该情况,而猎聘官方微博未发布相关情况说明,只是在微博内对反映该情况的用户进行回复,“抱歉,...

域名解析的原理是什么?域名解析的流程是怎样的?

域名解析是网站正常运行的关键因素,因此网站管理者了解域名解析的原理和流程对于做好域名管理、解决常见解析问题,保障网站的正常运转十分必要。那么域名解析的原理是什么?域名解析的流程是怎样的?接下来,中科三...

Linux无法解析域名的解决办法(linux 不能解析域名)

如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。  此时,需要手动修改配置文件:  /etc/resolv.conf  将域名解析服务器手动添加到配置文件中  该文件是DNS域名解...

域名劫持是什么?(域名劫持是什么)

域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。说的直白些,域名劫持,就是把互...

取消回复欢迎 发表评论: