大规模服务设计部署经验谈(2) | 整体服务设计(2.7-2.10)

2.7               对吞吐量和延迟进行分析。

应当对核心服务的用户交互进行吞吐量和延迟的分析,从而了解它们的影响。结合其他运营操作,比如定期数据库维护、运营配置(加入新用户,用户迁移)和服务调试等,进行吞吐量和延迟的分析。这样做对于捕捉由周期性管理任务所带动的问题是颇有裨益的。对于每个服务,都应当形成一个度量标准,用于性能规划,比如每个系统的每秒用户访问数,每个系统的并发在线人数,或者某些将关联工作负载映射到资源需求的相关度量标准。

2.8               把运营的实用工具作为服务的一部分对待。

把运营的实用工具作为服务的一部分对待。由开发、测试、项目管理和运营所产生的运营实用工具应当交给开发团队进行代码审查,提交到主源码树上,用同一套进度表跟踪,进行同样的测试。最频繁出现的现象是,这样的实用工具对于任务有至关重要的影响,但几乎都没有经过测试。

2.9               理解访问模式。

理解访问模式。在规划新特性时,一定要记得考虑它们会给后端存储带来哪些负载。通常,服务模型和服务开发人员与存储抽象得非常开,以至于他们全然忘记了它们会给后端数据库带来的额外负载。对此的最佳实践把它作为规范建立起来,里面可以有这样的内容:“这项功能会给基础结构的其他部分带来什么样的影响?”然后在这项特性上线之后,对它进行负载的测量和验证。

2.10           让所有工作版本化。

做好在混合版本的环境中运行的准备。我们的目标是运行单版本的软件,但是多个版本可能会在首次展示和生产环境测试的过程中并存。所有组件的n 版和n+1版都应当能够和平共存。

2.10.1         保持最新发布版的单元/功能测试。

这些测试是验证n - 1 版本的功能是否被破坏的重要方法。我们推荐大家更进一步,定期在生产环境中运行服务验证(后面会详细介绍)。

2.10.2         避免单点故障。

单点故障的产生会导致整个服务或者服务的某些部分停工。请选择无状态的实现。不要将请求或者客户端绑定在特定的服务器上,相反,将它们负载均衡在一组有能力处理这样负载的服务器上。静态哈希或者任何静态的服务器负载分配都会时不时遭受数据和/ 或查询倾斜问题的困扰。在一组机器可以互换时,要做到横向伸展是非常容易的。数据库通常会发生单点故障,而数据库伸缩仍然是互联网级大规模服务的设计中最为困难的事情之一。良好的设计一般会使用细粒度的分区,且不支持跨分区操作,以在多台数据库服务器之间进行高效伸展。所有的数据库状态都会进行冗余存储(至少在一台)完全冗余的热待机服务器上,并且在生产环境中会频繁进行故障转移测试。

猜你喜欢

转载自blog.csdn.net/longdel/article/details/83652484