终于有人把云原生讲明白了
导读:本文我们将一起探讨什么是云原生,它的关键技术包括哪些。
作者:郝树伟
来源:大数据DT(ID:hzdashuju)
符合12因素,见下方所示。
面向微服务架构。
自服务敏捷架构。
基于API的协作。
具有抗脆弱性。
基准代码:一份基准代码,多份部署 依赖:显示声明依赖关系 配置:应用配置存储在环境中,与代码分离 后端服务:将通过网络调用的其他后端服务当作应用的附加资源 构建、发布、运行:严格分离构建、发布和运行 进程:以一个或多个无状态进程运行应用 端口绑定:通过端口绑定提供服务 并发:通过进程模型进行扩展 易处理:快速启动和优雅终止的进程可以最大化应用的健壮性 开发环境和线上环境一致性:尽可能保证开发环境、预发环境和线上环境的一致性 日志:把日志当作事件流的汇总 管理进程:把后台管理任务当作一次性进程运行
应用程序的创建和部署过程更加敏捷:与虚拟机镜像相比,使用应用程序的容器镜像更简便和高效。 可持续开发、集成和部署:借助容器镜像的不可变性,可以快速更新或回滚容器镜像版本,进行可靠且频繁的容器镜像构建和部署。 提供环境一致性:标准化的容器镜像可以保证跨开发、测试和生产环境的一致性,不必为不同环境的细微差别而苦恼。 提供应用程序的可移植性:标准化的容器镜像可以保证应用程序运行于Ubuntu、CentOS等各种操作系统或云环境下。 为应用程序的松耦合架构提供基础设置:应用程序可以被分解成更小的独立组件,可以很方便地进行组合和分发。 资源利用率更高。 实现了资源隔离:容器应用程序和主机之间的隔离、容器应用程序之间的隔离可以为运行应用程序提供一定的安全保证。
单一职责:微服务架构中的每一个服务,都应是符合高内聚、低耦合以及单一职责原则的业务逻辑单元,不同的微服务通过REST等形式的标准接口互相调用,进行灵活的通信和组合,从而构建出庞大的系统。 独立自治性:每个微服务都应该是一个独立的组件,它可以被独立部署、测试、升级和发布,应用程序中的某个或某几个微服务被替换时,其他的微服务都不应该被影响。
简化复杂应用:微服务的单一职责原则要求一个微服务只负责一项明确的业务,相对于构建一个可以完成所有任务的大型应用程序,实现和理解只提供一个功能的小型应用程序要容易得多。每个微服务单独开发,可以加快开发速度,使服务更容易适应变化和新的需求。 简化应用部署:在单体的大型应用程序中,即使只修改某个模块的一行代码,也需要对整个系统进行重新构建、部署、测试和交付。而微服务则可以单独对某一个指定的组件进行构建、部署、测试和交付。 灵活组合:在微服务架构中,可以重用一些已有的微服务组合新的应用程序,降低应用开发成本。 可扩展性:根据应用程序中不同的微服务负载情况,可以为负载高的微服务横向扩展多个副本。 技术异构性:通常在一个大型应用程序中,不同的模块具有不同的功能特点,可能需要不同的团队使用不同的技术栈进行开发。我们可以使用任意新技术对某个微服务进行技术架构升级,只要对外提供的接口保持不变,其他微服务就不会受到影响。 高可靠性、高容错性:微服务独立部署和自治,当某个微服务出现故障时,其他微服务不受影响。
可观测性:所有服务间通信都需要经过服务网格,所以在此处可以捕获所有调用相关的指标数据,如来源、目的地、协议、URL、状态码等,并通过API供运维人员观测。 流量控制:服务网格可以为服务提供智能路由、超时重试、熔断、故障注入和流量镜像等控制能力。 安全性:服务网格提供认证服务、加密服务间通信以及强制执行安全策略的能力。
避免重复性劳动,减少人工操作的错误:自动化部署可以将开发运维人员从应用程序集成、测试和部署等重复性劳动环节中解放出来,而且人工操作容易犯错,机器犯错的概率则非常小。 提前发现问题和缺陷:持续集成和持续交付能让开发和运维人员更早地获取应用程序的变更情况,更早地进入测试和验证阶段,也就能更早地发现和解决问题。 更频繁的迭代:持续集成和持续交付缩短了从开发、集成、测试、部署到交付各个环节的时间,中间有任何问题都可以快速“回炉”改造和更新,整个过程敏捷且可持续,大大提高了应用程序的迭代频率和效率。 更高的产品质量:持续集成可以结合代码预览、代码质量检查等功能,对不规范的代码进行标识和通知;持续交付可以在产品上线前充分验证应用可能存在的缺陷,最终提供给用户一款高质量的产品。
能提升应用交付效率:基于不可变基础设施的应用交付,可以由代码或编排模板来设定,这样就可以使用Git等控制工具来管理应用和维护环境。基础设施环境一致性能保证应用在开发测试环境、预发布环境和线上生产环境的运行表现一致,不会频繁出现开发测试时运行正常、发布后出现故障的情况。 能快速、可靠地水平扩展:基于不可变基础设施的配置模板,我们可以快速创建与已有基础设施环境一致的新基础设施环境。 能保证基础设施的快速更新和回滚:基于同一套基础设施模板,若某一环境被修改,则可以快速进行回滚和恢复,若需对所有环境进行更新升级,则只需更新基础设施模板并创建新环境,将旧环境一一替换。
评论