📅  最后修改于: 2023-12-03 15:13:08.147000             🧑  作者: Mango
30个因素是一组用于构建现代、可扩展和可维护的应用程序的准则和最佳实践。这些准则由Heroku的联合创始人之一Adam Wiggins提出,并被广泛应用于DevOps领域。下面将逐一介绍这些因素:
始终将代码存储在版本控制系统中(如Git),并确保所有开发人员都有权限访问。
明确定义应用程序所依赖的软件包和库,并对其版本进行管控。可以使用工具如npm、Gem、Packagist等进行管理。
将应用程序所需的所有配置参数(如环境变量)应该与代码分离。应用程序不应该包含硬编码的配置,而应该从环境变量或配置文件中获取。
应用程序应使用与之分离的后端服务,如MySQL、Redis等。分离后端服务使得更换和升级服务变得更加容易。
将构建过程与发布过程分离,并使用容器等技术来实现应用程序的部署和运行。
将每个应用程序视为一个独立的进程,使用进程管理工具(如systemd、supervisord等)来管理。
使用端口绑定将应用程序连接到外部网络。
应用程序应该是可水平扩展的,可以通过添加更多进程或节点来实现更高的并发性。
应用程序应该是可移植的,可以在不同的环境中运行,无论是本地还是在云上。
应用程序应该能够在不同环境下无缝运行,从开发到测试和生产环境。
应用程序必须记录所有事件和状态变化,并将其存储在中央位置。使用工具如ELK Stack等可以很好地处理日志。
使用管理进程器(如systemd)将应用程序作为服务运行。
应用程序需要提供一个交互式shell,使得管理员、维护人员可以直接与应用程序交互(如Rails命令行等)。
应用程序构建的过程应该是透明的,能够展示所有构建阶段的状态和问题。
应用程序应该能够容错,能够快速恢复。
应用程序需要提供一个完整的本地开发环境(如Docker Compose等)。
应用程序应该暴露服务状态信息(如URL状态码),以便于监测和故障排查。
应用程序需要提供实时解决现场问题的方法。
应用程序应该可以处理许多并发的请求。
应用程序中的重复性操作应该被缓存。
应用程序需要提供筛选器和授权规则。
应用程序中可以允许后台任务等异步操作。
应用程序应该可以公开运维数据。
应用程序应该具有可扩展性,以便它可以高效地应对更大的负载。
应用程序可以批量处理操作。
应用程序需要提供数据导入和导出等功能,以便将数据从一个环境移动到另一个环境。
应用程序的架构必须是透明的。
应用程序的设计应该首先考虑API的使用。
应用程序需要提供内部管理界面,以便管理员可以轻松地维护应用程序。
应用程序需要提供转换log功能,以便管理员可以查看应用程序运行状态的历史记录。
总的来说,30个因素是一系列值得参考和实践的开发准则和最佳实践,可以帮助我们构建现代、可扩展和可维护的应用程序。