云原生的概念和应用
1 简介
现代企业希望构建高度可扩展、灵活且具有弹性的应用程序,可以快速更新以满足客户需求。
为此,他们使用现代工具和技术,这些工具和技术本质上支持云基础设施上的应用程序开发。
而云原生就是在云计算环境中构建、部署和管理现代应用程序的软件方法。
这些云原生技术支持快速、频繁地更改应用程序,而不会影响服务交付,从而为采用者提供了创新的竞争优势。
2 技术特点
从技术的角度,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将
云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),
使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。
由于云原生是面向“云”而设计的应用,因此,技术部分依赖于传统云计算的3层概念,即基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。
代码通常包括三部分:业务代码、三方软件、处理非功能特性的代码。
其中“业务代码”指实现业务逻辑的代码,为核心。
“三方软件”是业务代码中依赖的所有三方库,包括业务库和基础库;
“处理非功能性的代码”指实现高可用、安全、可观测性等非功能性能力的代码。
云原生软件的设计原则有以下几点
- 1 服务化原则
当代码规模超出小团队的合作范围时,就有必要进行服务化拆分了,包括拆分为微服务架
构、小服务(MiniService)架构,通过服务化架构把不同生命周期的模块分离出来,分别进行
业务迭代,避免迭代频繁模块被慢速模块拖慢,从而加快整体的进度和稳定性。
- 2 弹性原则
弹性则是指系统的部署规模可以随着业务量
的变化而自动伸缩,无须根据事先的容量规划准备固定的硬件和软件资源。
- 3 可观测原则
可观测是指在云这样的分布式系统中,主动通过日志、链路跟踪和度量等手段,使得一次点击背后的多次服务调用的耗时、返回值和参数都清晰可见.
甚至可以下钻到每次三方软件调用、SQL请求、节点拓扑、网络响应等,这样的能力可以使运
维、开发和业务人员实时掌握软件运行情况,并结合多个维度的数据指标,获得前所未有的关联分析能力,不断对业务健康度和用户体验进行数字化衡量和持续优化。
- 4 韧性原则
韧性从多个维度诠释了软件持续提供业务服务的能力,核心目标是提升软件的平均无故障时间(Mean Time Between Failure,MTBF)。
从架构设计上,韧性包括服务异步化能力、重试/限流/降级/熔断/反压、主从模式、集群模式、AZ内的高可用、单元化、跨region容灾、异地多活容灾等。
- 5 过程自动化原则
自动化是指通过IaC(Infrastructure as Code)、GitOps、OAM(Open Application Model)、Kubermetes Operator和大量自动化交付工具在CI/CD流水线中的实践。
一方面标准化企业内部的软件交付过程,另一方面在标准化的基础上进行自动化,通过配置数据自描述和面向终态的交付过程,让自动化工具理解交付目标和环境差异,实现整个软件交付和运维的自动化。
- 6 零信任原则
零信任第一个核心问题就是身份(Identity),赋予不同的实体不同的身份,解决是谁在什么环境下访问某个具体的资源的问题。
在研发、测试和运维微服务场景下,身份及其相关策略,不仅是安全的基础,更是众多(资源、服务、环境)隔离机制的基础;在员工访问企业内部应用的场景下,身份及其相关策略提供了即时的接入服务。
- 7 架构持续演进原则
现代架构总是需要在生命周期内进行一定范围重构,技术上通过微服务/应用网关、应用集成、适配器、服务网格、数据迁移、在线灰度等应用和流量进行细颗粒度控制。
3 云原生的的模式和特点
1、服务化架构模式:典型代表微服务和小服务模式, 服务拆分使维护压力大增。
2、Mesh化架构模式:把中间件框架(RPC、 缓存、异步消息)从业务进程中分离,由Mesh进程完成。
3、Serverless模式: 非常适合于事件驱动的数据计算任务。
4、存储计算分离模式:各类暂态数据(如session) 用云服务保存。
5、分布式事务模式:解决微服务模式中多数据源事务问题。
6、可观测架构:包括Logging、Tracing、 Metrics三 个方面。
7、事件驱动架构:本质.上是一种应用/组件间的集成架构模式。
- 云原生应用程序
云计算时代,公司不必为昂贵的服务器付费并进行维护。
他们使用云提供商提供的按需云原生服务,例如存储、数据库和分析,使用多少就付费多少。
- 云计算与云原生的对比
云计算是云供应商按需提供的资源、基础设施和工具。而云原生是一种使用云计算模型构建和运行软件程序的方法。
云原生应用程序是由多个称为微服务的相互依赖的小型服务组成的软件程序。
一般地,开发人员使用包含所有必需功能的单块结构构建整体式应用程序。
通过使用云原生方法,软件开发人员将功能分解为更小的微服务。
传统的企业应用程序是使用不太灵活的软件开发方法构建的。开发人员通常在发布大量软件功能以供测试之前进行工作。因此,传统的企业应用程序需要更长的部署时间,而且无法扩展。
然而云原生应用程序使用协作方法,并且在不同平台上具有高度可扩展性。
开发人员使用软件工具在云原生应用程序中大幅度实现构建、测试和部署过程的自动化。
这样可以立即设置、部署或复制微服务,这是传统应用程序无法实现的操作。
云原生应用程序通过提高应用性能、灵活性和可扩展性来满足用户需求。
4 优势和弊端
组织在构建云原生软件应用程序时以各种方式获得竞争优势。
- 提高效率
云原生开发带来了 DevOps 和持续交付(CD)等敏捷实践。开发人员使用自动化工具、云服务和现代设计文化来快速构建可扩展的应用程序。
- 降低成本
通过采用云原生方法,公司不必投资于昂贵的物理基础设施的采购和维护。这样可以长期节省运营支出。构建云原生解决方案所节省的成本也可能使您的客户受益。
- 确保可用性
云原生技术使公司能够构建弹性强且高度可用的应用程序。功能更新不会导致停机,公司可以在旺季纵向扩展应用程序资源,以提供积极的客户体验。
与传统的整体式应用相比,云原生应用更易于管理,因为使用敏捷和 DevOps 流程进行迭代改进。
云原生应用程序由单个微服务组成,可以逐步自动改进,以不断添加新的和改进的应用程序功能。
可以非侵入式方式进行改进,不会造成停机或最终用户体验中断。
事实证明,借助支持云原生应用的弹性基础架构,可以更轻松地进行扩展或缩减。
云原生开发流程更符合当今业务环境所需的速度和创新。
- 弊端
尽管微服务支持迭代方法来改进应用程序,但它们也创造了管理更多元素的必要性。与其管理一个大型应用程序,不如管理更多小型、离散的服务。
云原生应用需要额外的工具集来管理 DevOps 管道、取代传统的监视结构和控制微服务架构。
云原生应用程序允许快速开发和部署,但它们也需要一种能够应对创新步伐的商业文化。
- 云原生的发展路径
创建新的云原生应用程序还是对现有应用程序进行现代化改造,开发人员都遵循一组一致的原则:
遵循微服务架构方法:将应用程序分解为称为微服务的单功能服务。微服务是松散耦合的,但保持独立,允许对应用程序进行增量、自动化和持续改进,而不会造成停机。
依靠容器实现最大的灵活性和可扩展性:容器将软件及其所有代码和依赖项打包在一个地方,允许软件在任何地方运行。这在多云环境中实现了最大的灵活性和可移植性。容器还允许使用用户定义的 Kubernetes 编排策略快速扩展或缩减。
采用敏捷方法:敏捷方法加快了创建和改进过程。开发人员可以根据用户反馈快速迭代更新,使工作应用程序版本尽可能符合最终用户的期望。
5 小结
云原生多指应用程序的构建和部署方式。
云原生应用程序由称为微服务的离散、可重用组件组成,旨在集成到任何云环境中。
这些微服务充当构建基块,通常打包在容器中。
微服务作为一个整体协同工作以构成一个应用程序,但每个微服务都可以通过自动化和编排过程独立缩放、持续改进和快速迭代。
每个微服务的灵活性都增加了云原生应用程序的敏捷性和持续改进。
- 点赞
- 收藏
- 关注作者
评论(0)