1. 为什么需要云原生

云计算从工业化应用到如今,已走过十五个年头,然而大量应用使用云的方式仍停滞在传统 IDC 时代:

  • 虚拟机代替了原来的物理机
  • 使用文件保存应用数据
  • 没有经过架构改造(如微服务改造)的应用上云
  • 传统的应用打包与发布方式等

现代应用对云有更高的要求:

  • 业务迭代加快
  • 业务不中断
  • 降低运营成本

云的时代需要新的技术架构,来帮助企业应用能够更好地利用云计算优势,充分释放云计算的技术红利,让业务更敏捷、成本更低的同时又可伸缩性更灵活,而这些正好就是云原生架构专注解决的技术点。

从技术的角度,云原生架构旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。

2. 云原生开发模型

云原生架构产生的最大影响就是让开发人员的编程模型发生了巨大变化。

今天大部分的编程语言中,都有文件、网络、线程等元素,这些元素为充分利用单机资源带来好处的同时,也提升了分布式编程的复杂性;因此大量框架、产品涌现,来解决分布式环境中的网络调用问题、高可用问题、CPU 争用问题、分布式存储问题 ……

云产品在这些 OpenAPI 或者开源 SDK 背后把分布式场景中的高可用挑战、自动扩缩容挑战、安全挑战、运维升级挑战等都处理了。

2.1 分布式存储

在云的环境中,比如“如何获取存储”变成了若干服务,包括对象存储服务、块存储服务和没有随机访问的文件存储服务。

2.2 高可用

以大家最头疼的高可用为例,云产品在多个层面为应用提供了解决方案:

虚机:当虚机检测到底层硬件异常时,自动帮助应用做热迁移,迁移后的应用不需重新启动而仍然具备对外服务的能力,应用对整个迁移过程都不会有任何感知;

容器:有时应用所在的物理机是正常的,只是应用自身的问题(比如 bug、资源耗尽等)而无法正常对外提供服务。容器通过监控检查探测到进程状态异常,从而实施异常节点的下线、新节点上线和生产流量的切换等操作,整个过程自动完成而无需运维人员干预;

云服务:如果应用把“有状态”部分都交给了云服务(如缓存、数据库、对象存储等),加上全局对象的持有小型化或具备从磁盘快速重建能力,由于云服务本身是具备极强的高可用能力,那么应用本身会变成更薄的“无状态”应用,因为高可用故障带来的业务中断会降至分钟级;如果应用是 N-M 的对等架构架构模式,那么结合 Load Balancer 产品可获得几乎无损的高可用能力!

2.3 自动化软件交付

软件交付的困难在于开发环境到生产环境的差异(公司环境到客户环境之间的差异)以及软件交付和运维人员的技能差异,填补这些差异的是一大堆安装手册、运维手册和培训文档。

容器以一种标准的方式对软件打包,容器及相关技术则帮助屏蔽不同环境之间的差异,进而基于容器做标准化的软件交付。

对自动化交付而言,还需要一种能够描述不同环境的工具,让软件能够“理解”目标环境、交付内容、配置清单并通过代码去识别目标环境的差异,根据交付内容以“面向终态”的方式完成软件的安装、配置、
运行和变更。

3. 云原生架构原则

云原生架构本身作为一种架构,也有若干架构原则作为应用架构的核心架构控制面,通过遵从这些架构原则可以让技术主管和架构师在做技术选择时不会出现大的偏差。

3.1 服务化原则

当代码规模超出小团队的合作范围时,就有必要进行服务化拆分了,包括拆分为微服务架构、小服务(Mini Service)架构,通过服务化架构把不同生命周期的模块分离出来,分别进行业务迭代,避免迭代频繁模块被慢速模块拖慢,从而加快整体的进度和稳定性。

同时服务化架构以面向接口编程,服务内部的功能高度内聚,模块间通过公共功能模块的提取增加软件的复用程度。

分布式环境下的限流降级、熔断隔仓、灰度、反压、零信任安全等,本质上都是基于服务流量(而非网络流量)的控制策略,所以云原生架构强调使用服务化的目的还在于从架构层面抽象化业务模块之间的关系,标准化服务流量的传输,从而帮助业务模块进行基于服务流量的策略控制和治理,不管这些服务是基于什么语言开发的。

3.2 弹性原则

弹性则是指系统的部署规模可以随着业务量的变化自动伸缩,无须根据事先的容量规划准备固定的硬件和软件资源。

当业务规模面临海量突发性扩张的时候,不再因为平时软硬件资源储备不足而“说不”,保障了企业收益。

3.3 可观测原则

今天大部分企业的软件规模都在不断增长,原来单机可以对应用做完所有调试,但在分布式环境下需要对多个主机上的信息做关联,才可能回答清楚服务为什么宕机、哪些服务违反了其定义的 SLO、目前的故障影响哪些用户、最近这次变更对哪些服务指标带来了影响等等,这些都要求系统具备更强的可观测能力。

在云这样的分布式系统中,主动通过日志、链路跟踪和度量等手段,让一次 APP 点击背后的多次服务调用的耗时、返回值和参数都清晰可见,甚至可以下钻到每次三方软件调用、SQL 请求、节点拓扑、网络响应等,这样的能力可以使运维、开发和业务人员实时掌握软件运行情况,并结合多个维度的数据指标,获得前所未有的关联分析能力,不断对业务健康度和用户体验进行数字化衡量和持续优化。

3.4 所有过程自动化原则

技术往往是把“双刃剑”,容器、微服务、DevOps、大量第三方组件的使用,在降低分布式复杂性和提升迭代速度的同时,因为整体增大了软件技术栈的复杂度和组件规模,所以不可避免地带来了软件交付的复杂性,如果这里控制不当,应用就无法体会到云原生技术的优势。

通过 IaC(Infrastructure as Code)、GitOps、OAM(Open Application Model)、Kubernetes operator 和大量自动化交付工
具在 CI/CD 流水线中的实践,一方面标准化企业内部的软件交付过程,另一方面在标准化的基础上进行自动化,通过配置数据自描述和面向终态的交付过程,让自动化工具理解交付目标和环境差异,实现整个软件交付和运维的自动化。

3.5 零信任原则

零信任安全针对传统边界安全架构思想进行了重新评估和审视,并对安全架构思路给出了新建议。

其核心思想是,默认情况下不应该信任网络内部和外部的任何人 / 设备 / 系统,需要基于认证和授权重构访问控制的信任基础,诸如 IP 地址、主机、地理位置、所处网络等均不能作为可信的凭证。

零信任对访问控制进行了范式上的颠覆,引导安全体系架构从“网络中心化”走向“身份中心化”,其本质诉求是以身份为中心进行访问控制。

4. 主要云原生技术

4.1 容器技术

容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间快速、可靠地运行。

Docker 容器基于操作系统虚拟化技术,共享操作系统内核、轻量、没有资源损耗、秒级启动,极大提升了系统的应用部署密度和弹性。

更重要的是,Docker 提出了创新的应用打包规范 —— Docker 镜像,解耦了应用与运行环境,使应用可以在不同计算环境间一致、可靠地运行。

4.2 容器编排

Kubernetes 已经成为容器编排的事实标准,被广泛用于自动部署,扩展和管理容器化应用。

Kubernetes 提供了分布式应用管理的核心能力:

  • 资源调度:根据应用请求的资源量 CPU、Memory,或者 GPU 等设备资源,在集群中选择合适的节点来运行应用;
  • 应用部署与管理:支持应用的自动发布与应用的回滚,以及与应用相关的配置的管理;也可以自动化存储卷的编排,让存储卷与容器应用的生命周期相关联;
  • 自动修复:Kubernetes 可以会监测这个集群中所有的宿主机,当宿主机或者 OS 出现故障,节点健康检查会自动进行应用迁移;K8s 也支持应用的自愈,极大简化了运维管理的复杂性;
  • 服务发现与负载均衡:通过 Service 资源出现各种应用服务,结合 DNS 和多种负载均衡机制,支持容器化应用之间的相互通信;
  • 弹性伸缩:K8s 可以监测业务上所承担的负载,如果这个业务本身的 CPU 利用率过高,或者响应时间过长,它可以对这个业务进行自动扩容。

4.3 微服务

微服务模式将后端单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能。这些微服务相对独立,通过解耦研发、测试与部署流程,提高整体迭代效率。

但也要注意到,微服务架构的架构转变,在提升开发、部署等环节灵活性的同时,也提升了在运维、监控环节的复杂性:

  • 如何高效调用远程方法
  • 如何实现可靠的系统容量预估
  • 如何建立负载均衡体系
  • 如何面向松耦合系统进行集成测试
  • 如何面向大规模复杂关联应用的部署与运维等等

4.4 服务网格

服务网格引入Sidecar,Sidecar接管微服务应用之间的流量,并承载一些非业务功能:包括服务发现、调用容错,到丰富的服务治理功能,例如:权重路由、灰度路由、流量重放、服务伪装等。

理解云原生--开发模型、架构原则、主要技术相关推荐

  1. 最高效的七个云原生开发原则

    ​Cloud native是一种软件开发方法,利用云基础架构实现更快.更可扩展的部署.云原生应用程序旨在充分利用现代化的工程实践,如自动化.托管服务和自动扩展控制. 这种模式对组织文化和工作实践也有影 ...

  2. 一文带你理解云原生|云原生全景指南

    hi, 大家好,如今几乎所有大厂都将容器和K8s列入未来的战略重心,K8s可能将成为下一代分布式操作系统,今天分享一篇很经典云原生文章(万字雄文),希望可以帮大家彻底了解到底什么是云原生. 本文是一篇 ...

  3. 指数级暴增、复杂场景下,揭秘百度云原生湖仓架构等系列数据产品

    9月28日,百度智能云2021"云智技术论坛"智能大数据专场在上海举办.本次会议以"云智一体,让大数据发挥大价值"为主题,百度副总裁谢广军携百度多位资深技术专家 ...

  4. 你的开发好帮手:下一代云原生开发工具技术

    本文分享自华为云社区<下一代云原生开发工具技术揭秘>,原文作者:灰灰哒. 在华为开发者大会(Cloud)上,华为云发布了基于华为云CloudIDE的智能化编码工具和云原生应用调测工具.华为 ...

  5. 云原生开发环境初探 | CSDN 博文精选

    作者 | 倚天码农 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 此前,我们分享了云原生的引申含义(https://blog.csdn.net/weixin_38748858/arti ...

  6. 精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践

    11月18日,2022年第五届中国金融科技产业大会暨第四届中新(苏州)数字金融应用博览会"基础软件与云原生系统软件"分论坛成功举办.该论坛由由中国计算机学会CTO CLUB(苏州) ...

  7. 云原生大数据架构中实时计算维表和结果表的选型实践

    简介: 随着互联网技术的日渐发展.数据规模的扩大与复杂的需求场景的产生,传统的大数据架构无法承载. 作者 | 志羽 来源 | 阿里技术公众号 一 前言 传统的大数据技术起源于 Google 三架马车 ...

  8. 解析云原生2.0架构设计的8大关键趋势

    摘要:在云原生2.0阶段,我们到底需要构建一个什么样的架构?华为云首席架构师为你一一解答. 本文分享自华为云社区<华为云首席架构师独家分享:云原生2.0架构设计的8大关键趋势>,作者:技术 ...

  9. 什么是云原生中台业务架构?

    什么是云原生中台业务架构? 最近公司说要做中台架构,业务中台,技术中台,数据中台,很谦虚的请教一下,什么是业务中台?业务中台是什么样子的,它是一个什么样的产品,是一个个的业务系统吗,业务中台还有没有后 ...

最新文章

  1. bootstrap五星评分_星型打分插件 bootstrap-rating-input
  2. CentOS7 安装chrome浏览器和ChromeDriver 及 python脚本调用chrome浏览器
  3. Facebook推出人脸识别新功能,防止用户肖像遭滥用
  4. ReactiveCocoa核心元素与信号流
  5. HTML怎么让img 等比例缩放
  6. 行政区村界线_市政府批复!崇川区部分行政区划调整
  7. HDU 5895 Mathematician QSC
  8. Hive 使用SQL统计出每个用户的累积访问次数
  9. Android 10.0 PackageManagerService(四)APK安装流程-[Android取经之路]
  10. Endnote导出目标期刊的参考文献的格式
  11. 马来酰亚胺和琥珀酰亚胺交联剂Sulfo-SMCC,CAS:92921-24-9的溶解性介绍
  12. XBrowser增加Jslog日志对象接口
  13. TLD(Tracking-Learning-Detection)一种目标跟踪算法(相关资料很全)
  14. 显示隐藏图片html,JavaScript实现显示和隐藏图片
  15. WINCC做OPC UA服务器与第三方客户端连接测试
  16. 实用技巧(二)——文本工具、自由变换
  17. springboot+阿里云短信 找不到本地包 解决
  18. 利用Kuhn-Munkras算法求最小权值匹配
  19. LINUX内核编译选项-5
  20. inurl_inurl,intitle指令的含义、作用及用法

热门文章

  1. linux c++程序,阐述Linux下C++编程进行学习
  2. mysql 从库修改表结构_在mysql数据库中---修改表结构
  3. 配置V530交换机步骤
  4. php留言板翻页,php翻页函数 - 沐攸的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  5. log函数 oracle power_博主营地 | Unity3D 实用技巧 基础数学库函数学习
  6. 未能卸载该设备.启动计算机,未能卸载该设备。启动计算机时可能需要该设备...
  7. matlab 元胞调用方法你真的理解了么?
  8. python小数点进位小学数学_python小数的进位与舍去的介绍(附代码)
  9. 东莞华勤通讯软件测试怎么样,【社招】华勤通讯NBD测试验证部急聘岗位-东莞...
  10. Java 蓝桥杯 A+B problem