这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
在对企业级架构进行剖析的课程中,除了云计算外,云原生也是企业级架构的重要部分。通过课程内容和课后资料的阅读,我对云原生有了一定的了解,本文是一些关于云原生基础知识的总结。
云原生的定义
云原生中的”云“表示应用程序运行于分布式云环境中,即前面笔记中提到的云计算的”云“。所以,云原生是一种能充分利用云计算优势对应用程序进行设计、实现、部署、交付和操作的应用架构方法。
云原生关键技术
- 容器
- 容器的介绍
容器能为我们提供一种可移植、可重用的方式来打包、分发和运行应用程序,这种方式相对于虚拟机来说是更加轻量的虚拟化技术。容器提供的方式是标准化的,可以将不同应用程序的不同组件组装在一起,又可以将它们彼此隔离。容器的基本思想就是将需要执行的所有软件打包到一个可执行程序包中。用户可以在基础设施环境中使用这个容器镜像启动容器并运行应用程序,还可以将容器化运行的应用程序与基础设施环境隔离。
- 容器的优点
**应用程序的创建和部署过程更加敏捷:**与虚拟机镜像相比,使用应用程序的容器镜像更简便和高效。
**可持续开发、集成和部署:**借助容器镜像的不可变性,可以快速更新或回滚容器镜像版本,进行可靠且频繁的容器镜像构建和部署。
**提供环境一致性:**标准化的容器镜像可以保证跨开发、测试和生产环境的一致性,不必为不同环境的细微差别而苦恼。
**提供应用程序的可移植性:**标准化的容器镜像可以保证应用程序运行于Ubuntu、CentOS等各种操作系统或云环境下。
**为应用程序的松耦合架构提供基础设置:**应用程序可以被分解成更小的独立组件,可以很方便地进行组合和分发。
资源利用率更高。
**实现了资源隔离:**容器应用程序和主机之间的隔离、容器应用程序之间的隔离可以为运行应用程序提供一定的安全保证。
- 微服务
- 微服务的介绍
微服务是一种软件架构方式,使用微服务架构可以将一个大型应用程序按照功能模块拆分成多个独立自治的微服务,每个微服务仅实现一种功能,具有明确的边界。各个微服务之间通常需要互相调用REST等形式的标准接口进行通信和数据交换来实现协同工作,这是一种松耦合的交互形式。
- 微服务的特点
微服务基于分布式计算架构,主要有以下两个特点:
**单一职责:**微服务架构中的每一个服务,都应是符合高内聚、低耦合以及单一职责原则的业务逻辑单元,不同的微服务通过 REST 等形式的标准接口互相调用,进行灵活的通信和组合,从而构建出庞大的系统。
**独立自治性:**每个微服务都应该是一个独立的组件,它可以被独立部署、测试、升级和发布,应用程序中的某个或某几个微服务被替换时,其他的微服务都不应该被影响。
- 微服务的优点
**简化复杂应用:**微服务的单一职责原则要求一个微服务只负责一项明确的业务,相对于构建一个可以完成所有任务的大型应用程序,实现和理解只提供一个功能的小型应用程序要容易得多。每个微服务单独开发,可以加快开发速度,使服务更容易适应变化和新的需求。
**简化应用部署:**在单体的大型应用程序中,即使只修改某个模块的一行代码,也需要对整个系统进行重新构建、部署、测试和交付。而微服务则可以单独对某一个指定的组件进行构建、部署、测试和交付。
**灵活组合:**在微服务架构中,可以重用一些已有的微服务组合新的应用程序,降低应用开发成本。
**可扩展性:**根据应用程序中不同的微服务负载情况,可以为负载高的微服务横向扩展多个副本。
**技术异构性:**通常在一个大型应用程序中,不同的模块具有不同的功能特点,可能需要不同的团队使用不同的技术栈进行开发。我们可以使用任意新技术对某个微服务进行技术架构升级,只要对外提供的接口保持不变,其他微服务就不会受到影响。
**高可靠性、高容错性:**微服务独立部署和自治,当某个微服务出现故障时,其他微服务不受影响。
注意:虽然微服务具有诸多优点,但需要一定的技术成本,数量众多的微服务会增加运维的复杂度。因此,并不是所有应用程序都适合采用微服务架构,对架构的选择还是需要根据具体的应用程序进行综合评估。
- 服务网络
- 服务网络的介绍
服务网络作为服务间通信的基础设施层用于保证服务与服务之间的通信。服务网格是轻量级的网络代理,能解耦应用程序的重试/超时、监控、追踪和服务发现,并且能做到应用程序无感知。服务网格可以使服务与服务之间的通信更加流畅、可靠、安全,它的实现通常是提供一个代理实例,和对应的服务一起部署在环境中,这种模式我们称为 Sidecar 模式,Sidecar 模式可处理服务之间通信的任何功能,比如负载均衡、服务发现等。
- 服务网络的优点
**可观测性:**所有服务间通信都需要经过服务网格,所以在此处可以捕获所有调用相关的指标数据,如来源、目的地、协议、URL、状态码等,并通过 API 供运维人员观测。
**流量控制:**服务网格可以为服务提供智能路由、超时重试、熔断、故障注入和流量镜像等控制能力。
**安全性:**服务网格提供认证服务、加密服务间通信以及强制执行安全策略的能力。
-
DevOps
-
DevOps的介绍
DevOps(Development & Operations,开发和运维)是软件开发人员和 IT 人员之间的合作过程,是一种工作环境、文化和实践的集合,目标是高效地自动执行软件交付和基础架构更改流程。开发和运维人员通过持续不断的沟通和协作,可以以一种标准化和自动化的方式快速、频繁且可靠地交付应用。
- DevOps的优点
**避免重复性劳动,减少人工操作的错误:**自动化部署可以将开发运维人员从应用程序集成、测试和部署等重复性劳动环节中解放出来,而且人工操作容易犯错,机器犯错的概率则非常小。
**提前发现问题和缺陷:**持续集成和持续交付能让开发和运维人员更早地获取应用程序的变更情况,更早地进入测试和验证阶段,也就能更早地发现和解决问题。
**更频繁的迭代:**持续集成和持续交付缩短了从开发、集成、测试、部署到交付各个环节的时间,中间有任何问题都可以快速“回炉”改造和更新,整个过程敏捷且可持续,大大提高了应用程序的迭代频率和效率。
**更高的产品质量:**持续集成可以结合代码预览、代码质量检查等功能,对不规范的代码进行标识和通知;持续交付可以在产品上线前充分验证应用可能存在的缺陷,最终提供给用户一款高质量的产品。
总结
通过对云原生以及云原生关键技术的了解,可以发现开发者使用这些技术可以构建出容错性好、易于管理、具备较好观测性的云服务。同时结合可靠的自动化机制,服务可以轻松应对频繁和可预测的重大变更。云原生的各项关键技术使得软件架构中各项业务功能能够解耦开,同时对解耦后的功能有良好的治理能力。由此可见,企业级的后端架构中,云原生是很重要的一部分。