一. 云原生架构内涵
云原生架构:基于云原生技术的一组架构原则和设计模式的集合。
目的:将云应用中的非业务代码部分进行最大化的剥离,让云设施接管应用中原有的大量非功能特性,使业务不再有非功能性业务中断困扰的同时,具备轻量级、敏捷、高度自动化的特点。
本质:从业务代码中剥离大量的非功能特性到IaaS和PaaS中。
特点:非功能特性大量委托、高度自动化的软件交付、代码结构发生巨大变化
云原生的代码通常包括三部分:业务代码、三方软件、处理非功能特性的代码
主要架构模式:
-
服务化架构:拆分为微服务,把代码模块关系和部署关系进行分离。
-
Mesh化架构:服务网格化,把中间件框架从业务进程中分离,让中间件SDK与业务代码进一步解耦,使得中间件升级对业务进程没有影响。
-
Serverless:将“部署”这个动作从运维中“收走”,使开发者不用关心应用运行地点、操作系统、网络配置等,把应用的整个运行都委托给云。
-
存储计算分离:把各类暂态数据(如session)、结构化、非结构化持久数据都采用云服务来保存,实现存储计算分离。
-
分布式事务:大粒度的业务需要访问多个微服务,必然带来分布式事务问题,否则数据就会出现不一致。
-
可观测架构:可观测三个方面 (1) Logging 提供多个级别的详细信息跟踪,由应用开发者主动提供;(2) Tracing 提供一个请求从前端到后端的完整调用链路跟踪,对于分布式场景尤其有用;(3) Metrics 提供对系统量化的多维度度量。
-
事件驱动架构:隐式调用、事件触发、耦合度低。
二. 云原生架构相关技术
容器技术:容器作为标准化软件单元,将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间快速、可靠的运行。
Kubernetes(k8s):容器编排平台,用于自动化部署、扩展和管理容器化应用程序。提供一个强大的基础设施来管理跨多个主机的容器化应用程序。它提供了一组丰富的功能,包括自动化部署、自动扩展、自我修复、负载均衡、故障隔离、滚动升级等。Kubernetes使用一组称为Pod的基本部署单元来组织应用程序。每个Pod都是一个包含一个或多个容器的逻辑主机。Kubernetes负责在集群中的各个节点上调度和管理Pod的运行,可以根据资源需求和优先级等因素来自动调度和平衡Pod的分布。
云原生微服务:将单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能称为“微服务”。这些微服务相对独立、解耦研发、测试与部署流程。
微服务个体约束:功能在业务域划分上应是相互独立、低耦合、单一职责
服务的发现、注册:服务注册中心
微服务与数据层:数据存储隔离原则,即数据是微服务的私有资产,对于该数据的访问都必须通过当前微服务提供的API来访问。
Dubbo是一款Java RPC(Remote Rrocedure Call 远程过程调用)框架。在Dubbo中,应用程序被划分为提供者和消费者,通过网络传输和序列化技术来实现远程方法调用。
提供者:将服务注册到服务中心,并监听来自消费者的调用请求。
消费者:从注册中心获取提供者的地址,并通过代理对象来调用远程服务。
远程过程调用 RPC(Remote Rrocedure Call)是一种通信机制,用于在分布式系统中实现不同计算节点之间的远程方法调用。在远程过程调用中,通常使用一种序列化机制,将参数和返回值进行编码和解码,以便在网络上进行传输。
无服务器技术Serverless:屏蔽了服务器的各种运维复杂度。具备以下特征:
全托管的计算服务:无需关心运行、部署,专注于业务代码编写。
通用性:能过够支持云上所有类型的应用。
自动弹性伸缩:用户无需为资源使用提前进行容量规划。
按量计费:无需为闲置资源付费。
服务网格ServiceMesh:将微服务之间的连接、安全、流量控制、可观测等通用功能下沉为平台基础设施,实现应用与平台基础设施的解耦。
如图,服务A调用服务B的所有请求,都被其下的服务代理截获。服务的发现、熔断、限流等策略的总控在控制平面(Contral plane)上配置。
三. 云原生架构案例分析
云计算
云计算的概念内涵:平台和应用。
云计算的服务方式
- 软件即服务SaaS
软件应用程序通过互联网提供给客户,客户通过订阅的方式使用这些程序。
多租户架构:多个用户共享同一个应用程序实例,但彼此之间的数据和配置是隔离的。
网络访问:用户通过互联网访问SaaS应用程序,无需在本地安装软件。
实时更新和维护
按需付费:用户根据使用情况和需要来支付费用。
- 平台即服务PaaS
将分布式开发环境与平台作为一种服务来提供,这是一种分布式平台服务,厂商提供开发环境,客户在这个平台上定制开发自己的应用程序。PaaS提供了一个快速、便捷、可靠的开发环境,适用于各种规模和类型的应用开发,提供开发工具、编程语言、数据库、中间件等,帮助开发者轻松构建应用程序。PaaS提供商负责应用程序的托管和部署,开发者只需关注应用程序本身的开发和功能。一些知名的PaaS平台包括阿里云、腾讯云等。
- 基础设施即服务IaaS
将多台服务器组成的“云端”基础设施作为计量服务提供给客户。具体来说,服务提供商将内存、I/O设备、存储和计算能力等整合为一个虚拟的资源池,为客户提供所需要的存储资源、虚拟化服务器等服务。
云服务提供商:负责维护和管理底层的硬件设施(服务器、网络设备、数据中心)
用户:通过自助服务界面来管理和配置这些基础设施,按需付费。
灵活性:SaaS > PaaS > IaaS
方便性:IaaS > PaaS >SaaS
云计算的部署模式
公有云:云基础设施是公开的
社区云:社区组织所专有
私有云:多种用户组成的单个组织
混合云:以上几种的混合