最新要闻

广告

手机

顺络电子:董事长部分股权办理股票质押业务

顺络电子:董事长部分股权办理股票质押业务

深圳7月二手住宅成交2259套,中介称近期咨询客户开始增加

深圳7月二手住宅成交2259套,中介称近期咨询客户开始增加

家电

读发布!设计与部署稳定的分布式系统(第2版)笔记29_控制层下

来源:博客园


(资料图片仅供参考)

1.配置服务

1.1.配置服务本身就是分布式数据库

1.1.1.像ZooKeeper和etcd这样的配置服务

1.1.2.受CAP定理和亚光速通信的限制

1.1.3.可实现容量扩展,但不具备资源可伸缩性

1.1.4.也会遭受相同的网络创伤

1.2.信息并不仅仅从服务流向客户端实例,实例也可以向服务报告其版本号(或提交SHA算法)和节点标识符

1.3.每次写入配置服务,都必须经历某种共识机制才能生效

1.4.确保实例可以在没有配置服务的情况下启动

1.5.确保实例在配置服务无法访问时不会停止工作

1.6.确保配置服务的某个被网络分隔的节点不具备关闭整个系统的能力

1.7.要跨地理区域进行复制

2.环境整备和部署服务

2.1.部署是运维工作中的必经环节,是连接开发和生产的桥梁

2.2.部署工具本身应该配备一个部署包库

2.3.对一些组织来说,部署就是DevOps

2.4.推式部署工具

2.4.1.使用SSH或其他代理工具,因此中央服务器可以连接到目标机器上来运行脚本

2.4.2.这些目标机器事先并不知道自己的角色,服务器会统一将角色分配给它们

2.4.3.对于长寿命的虚拟机甚至物理主机,推式部署工具就可以更简单地进行设置和管理

2.5.拉式部署工具

2.5.1.特别适用于资源可扩展的场景

2.5.2.拉式部署工具更依赖各台机器了解自己的角色

2.5.3.机器上的软件可以访问配置服务获取有关其角色的最新信息

2.6.用于生产环境的构建包需要使用已知来源的程序库,在一台“干干净净”的服务器上运行

2.7.可重复的构建工作非常重要,要确保在机器上可以运行的代码在生产环境中也能运行

2.8.任何广泛使用的服务器软件都可用作攻击武器,包括构建服务器,诸如Jenkins、Bamboo或GoCD

2.8.1.构建系统本身的插件是直接从网上下载的

2.9.金丝雀部署是构建工具需要完成的一项重要工作

2.9.1.“金丝雀”指一小组实例,它们率先获得了系统的新版本

2.9.2.在一段时间内,运行新版本的实例会与运行旧版本的实例共存

2.9.3.如果金丝雀实例行为异常,或者其度量指标一直很低,那么该构建就不会推送给剩余的实例安装

2.10.金丝雀部署的目的就是在构建包到达用户之前,拒绝其中糟糕的构建包

3.命令与控制

3.1.只有当实例需要花费很长时间才能做好运行前的准备工作时,实时控制才有必要

3.2.控制点

3.2.1.重置断路器

3.2.2.调整连接池大小和超时

3.2.3.禁用特定的出站集成

3.2.4.重新加载配置

3.2.5.开始或停止接收负载

3.2.6.特性开关

3.3.开发人员不相信运维人员能正确地部署软件并运行脚本

3.4.运维人员不允许开发人员登录到生产机器更新数据库模式

3.5.这个信任的破裂本身就是一个需要解决的问题

3.5.1.绝对不要在生产代码中构建一个自我毁灭“按钮”

3.5.2.许多服务会采取公开一些控制的方法来更新数据库模式,或者删除并重新设置所有数据

3.6.刷新缓存按钮,这也是非常危险的

3.7.命令队列

3.7.1.一个共享的消息队列或发布-订阅总线,所有的实例都可以监听

3.7.2.有了命令队列,一窝蜂效应就更容易发生了

3.7.3.为每个实例添加一个随机的延迟时间,让它们能够分散地执行命令,这是避免一窝蜂效应的好方法

3.8.Watir或RoboForm这样的图形用户界面测试工具

3.9.对生产环境中长期的运维工作来说,图形用户界面是糟糕的管理界面。长期运维的最佳界面是命令行

3.10.所有构建的软件要么必须维护,要么被迫抛弃

3.11.要选择那些适合团队规模和工作负载规模的工具

3.12.可以从系统可见性开始,使用日志记录、跟踪和度量指标来创建明晰性

3.13.当面对更大或更动态的系统时,可以使用配置、整备和部署服务来获得杠杆作用

3.14.一旦系统(在某种程度上)稳定下来,并且问题显露出来,就要建立控制机制,这样就能进行更精确的控制,而不仅仅是重新配置和重新启动实例

3.15.相比那些高度动态的环境,部署到长寿命机器上的大型系统从控制机制中受益更多

4.平台厂商

4.1.相对于云供应商,平台能够提供一个与之不同的特性——位置无关性

4.2.Kubernetes、Apache Mesos、Cloud Foundry以及Docker的Swarm Mode

4.3.既然已经在平台上花了大价钱,就应该充分加以利用

4.3.1.不要尝试在它外面再包装一层API,或自己提供一套脚本

5.工具清单

5.1.日志收集和搜索

5.2.度量指标收集和可视化

5.3.部署

5.4.配置服务

5.5.实例安置位置

5.6.实例和系统可视化

5.7.调度

5.8.IP地址、覆盖网络、防火墙和路由管理

5.9.自动扩展控制器

5.10.⑩告警和通知

6.要点

6.1.每个解决方案都会带来新问题。随着系统容量的水平扩展和垂直扩展,我们几乎将一切虚拟化了

6.2.一旦知道整个系统发生了什么,就能采取干预措施

6.3.需要了解自动化让所有事情都运行得更快带来的问题

6.3.1.自动化缺乏人的判断力,所以当出错时,错误会发展得很快,这就需要我们在自动化中建立安全机制

关键词: