最典型一个词来描述“云原生”应用。给您一个参考,敏捷开发的12原则,满足这12原则的应用,基本上在云计算的这种分布式、虚拟化的环境中可以很好的运行。这里,个人认为,最重要的是集群化、支持应用补偿机制、模块化。参考http://12factor.net。
‣只使用一份基准代码,但是可以部署到多个环境
‣应用之间的依赖关系要是显示指定的,比如用配置文件描述,不要用隐式的代码关联
‣配置要用环境变量的方式来提供给应用,而不是用代码里面的常量或者代码相关的方式提供
‣代码用到的资源,如数据库,消息队列,分布式文件系统等,要作为可attach的资源的方式来提供,不要写死到代码。资源都用资源字符串的形式提供,可从环境变量注射到应用并立即提供服务
‣严格将编译,发布,生产等环境进行隔离,即使要改动生产配置,也需要用持续发布的方式从编译开始构建并自动发布到生产系统,不要直接更改生产系统
‣无状态的进程的方式提供服务,应用需要做到自身无状态无共享。如果需要保持状态或者共享,需要使用外置的服务的方式来提供,比如外置session管理器等
‣使用地址与端口绑定的方式提供服务,例如某个应用服务的消费者只需要知道uri地址与对应的端口,绑定之后即能消费该服务
‣通过进程模型的方式进行横向扩展,即应用或者微型的服务是可以通过多实例的方式来横向扩展并线性扩展支撑能力的
‣通常的应用进程要设计成可以快速启动和优雅终止销毁的模式,这样能够方便故障恢复与横向扩展
‣开发环境与线上环境等价,尽可能的保持开发,预发布,线上生产环境的相同。要能做到持续发布需要尽可能的缩小本地与线上生产环境的差别。尽量反对在不同的环境下使用不同的后端服务
‣把日志作为事件流来对待,汇总整个的日志来监控平台的应用和环境,这样经过大数据综合分析更能发掘出问题的根本原因
‣管理或者其他的任务作为一次性进程来对待,例如执行一次性的系统检查,快照一次健康状态等等。
收起