开发公司【云原生架构】阿里云 —— 主要架构模式

🔎这里是【阿里云·云原生·白皮书】,开发公司关注我学习云原生不迷路
👍开发公司如果对你有帮助,开发公司给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

👀专栏介绍

【阿里云·开发公司云原生架构·白皮书】 开发公司主要更新一些在学习云开发公司原生架构时的一些总结,开发公司以及对白皮书内容的解读。

👀本期介绍

开发公司主要介绍开发公司主要架构模式

文章目录

主要架构模式

开发公司云原生架构有非常多的架构模式,开发公司这里选取一些对应用收开发公司益更大的主要架构模式进行讨论。

开发公司服务化架构模式

开发公司服务化架构是云时代构开发公司建云原生应用的标准架构模式,开发公司要求以应用模块为颗粒开发公司度划分一个软件,开发公司以接口契约(例如IDL)开发公司定义彼此业务关系,开发公司以标准协议(HTTP、gRPC等)开发公司确保彼此的互联互通,结合DDD(开发公司领域模型驱动)、TDD(开发公司测试驱动开发)、开发公司容器化部署提升每个接开发公司口的代码质量和迭代速度。开发公司服务化架构的典型模式开发公司是微服务和小服务(Mini Service)模式,开发公司其中小服务可以看做是开发公司一组关系非常密切的服务的组合,开发公司这组服务会共享数据,开发公司小服务模式通常适用于开发公司非常大型的软件系统,开发公司避免接口的颗粒度太细开发公司而导致过多的调用损耗(开发公司特别是服务间调用和数开发公司据一致性处理)和治理复杂度。

通过服务化架构,把代码模块关系和部署关系进行分离,每个接口可以部署不同数量的实例,单独扩缩容,从而使得整体的部署更经济。此外,由于在进程级实现了模块的分离,每个接口都可以单独升级,从而提升了整体的迭代效率。但也需要注意,服务拆分导致要维护的模块数量增多,如果缺乏服务的自动化能力和治理能力,会让模块管理和组织技能不匹配,反而导致开发和运维效率的降低。

SBA网络架构具备三大特征:
1、松耦合的微服务
2、轻量高效的服务调用接口
3、自动化、智能化的服务管理框架

Mesh 化架构模式

Mesh 化架构是把中间件框架(比如RPC、缓存、异步消息等)从业务进程中分离,让中间件SDK与业务代码进一步解耦,从而使得中间件升级对业务进程没有影响,甚至迁移到另外一个平台的中间件也对业务透明。分离后在业务进程中只保留很“薄”的Client部分,Client通常很少变化,只负责与Mesh进程通讯,原来需要在SDK中处理的流量控制、安全等逻辑由Mesh进程完成。整个架构如下图所示。


实施Mesh 化架构后,大量分布式架构模式(熔断、限流、降级、重试、反压、隔仓……)都由Mesh进程完成,即使在业务代码的制品中并没有使用这些三方软件包;同时获得更好的安全性(比如零信任架构能力)、按流量进行动态环境隔离、基于流量做冒烟/回归测试等。

Mesh网络有其自身的特点:

1、平衡负载,Mesh网络可以提供更大的冗余度以利负载平衡。在比较繁忙的网络,例如有两台设备进行大数据量的通讯,每台设备附近都有许多节点可供选择,创建多条路径来平衡负载。而单跳网络则没有动态调整的能力。

2、健壮性,因为Mesh网络不像单跳网络,仅仅依靠一个节点,一旦某个节点出现故障或者有冲突发生,Mesh网络可以继续工作,数据也可选择替代路径继续传递。

3、空间的复用性,Mesh网络可以充分地利用带宽。在一个单跳环境中,所有设备不得不共享一个节点,如果多台设备同时要求接入网络,那么必然导致速度变慢;而Mesh网络,多设备可以同时接入网络,却通过不同的节点。

Serverless模式

和大部分计算模式不同,Serverless 将“部署”这个动作从运维中“收走”,使开发者不用关心应用在哪里运行,更不用关心装什么OS、怎么配置网络、需要多少CPU……从架构抽象上看,当业务流量到来/业务事件发生时,云会启动或调度一个已启动的业务进程进行处理,处理完成后云自动会关闭/调度业务进程,等待下一次触发,也就是把应用的整个运行时都委托给云。

今天Serverless 还没有达到任何类型的应用都适用的地步,因此架构决策者需要关心应用类型是否适合于Serverless运算。如果应用是有状态的,云在进行调度时可能导致上下文丢失,毕竟Serverless 的调度不会帮助应用做状态同步;如果应用是长时间后台运行的密集型计算任务,会得不到太多Serverless的优势;如果应用涉及到频繁的外部VO(网络或者存储,以及服务间调用),也因为繁重的IO负担、时延大而不适合。Serverless非常适合于事件驱动的数据计算任务、计算时间短的请求/响应应用、没有复杂相互调用的长周期任务。

Serverless 架构的 Traits 特质:

入门门槛低(Low barrier-to-entry)
无主机(Hostless)
无状态(Stateless)
弹性(Elasticity)
分布式(Distributed)
事件驱动(Event-driven)

存储计算分离模式

分布式环境中的CAP困难主要是针对有状态应用,因为无状态应用不存在C(一致性)这个维度,因此可以获得很好的A(可用性)和P(分区容错性),因而获得更好的弹性。在云环境中,推荐把各类暂态数据(如session )、结构化和非结构化持久数据都采用云服务来保存,从而实现存储计算分离。但仍然有一些状态如果保存到远端缓存,会造成交易性能的明显下降,比如交易会话数据太大、需要不断根据上下文重新获取等,则可以考虑通过采用Event Log +快照(或 Check Point)的方式,实现重启后快速增量恢复服务,减少不可用对业务的影响时长。

分离架构有以下优势:

  1. 对于不同类型的集群,可以针对性地部署更加合适的服务器;

  2. 计算和存储可以分别按需进行扩展,而不是一起扩展;

  3. 不同集群可以有不同的升级周期;

  4. 划分了运维职责,更加便于管理;

  5. 提高了资源利用率,降低了能耗开销。

分布式事务模式

微服务模式提倡每个服务使用私有的数据源,而不是像单体这样共享数据源,但往往大颗粒度的业务需要访问多个微服务,必然带来分布式事务问题,否则数据就会出现不一致。架构师需要根据不同的场景选择合适的分布式事务模式。

  • 传统采用XA模式,虽然具备很强的一致性,但是性能差;
  • 基于消息的最终一致性(BASE)通常有很高的性能,但是通用性有限,且消息端只能成功而不能触发消息生产端的事务回滚;
  • TCC模式完全由应用层来控制事务,事务隔离性可控,也可以做到比较高效;但是对业务的侵入性非常强,设计开发维护等成本很高;
  • SAGA模式与TCC模式的优缺点类似但没有try这个阶段,而是每个正向事务都对应一个补偿事务,也是开发维护成本高;
  • 开源项目SEATA的AT模式非常高性能且无代码开发工作量,且可以自动执行回滚操作,同时也存在一些使用场景限制。

可观测架构

可观测架构包括Logging、Tracing、Metrics三个方面,其中Logging提供多个级别( verboseldebuglwarning/errorlfatal)的详细信息跟踪,由应用开发者主动提供;Tracing 提供一个请求从前端到后端的完整调用链路跟踪,对于分布式场景尤其有用;Metrics则提供对系统量化的多维度度量。

架构决策者需要选择合适的、支持可观测的开源框架(比如OpenTracing、OpenTelemetry ) ,并规范上下文的可观测数据规范(例如方法名、用户信息、地理位置、请求参数等),规划这些可观测数据在哪些服务和技术组件中传播,利用日志和tracing 信息中的span id/trace id,确保进行分布式链路分析时有足够的信息进行快速关联分析。

由于建立可观测性的主要目标是对服务SLO ( Service Level Objective)进行度量,从而优化SLA,因此架构设计上需要为各个组件定义清晰的SLO,包括并发度、耗时、可用时长、容量等。

事件驱动架构

事件驱动架构(EDA,Event Driven Architecture)本质上是一种应用/组件间的集成架构模式,典型的事件驱动架构如下图:在这里插入图片描述

事件和传统的消息不同,事件具有schema,所以可以校验event的有效性,同时EDA具备QoS保障机制,也能够对事件处理失败进行响应。事件驱动架构不仅用于(微)服务解耦,还可应用于下面的场景中:

  • 增强服务韧性:由于服务间是异步集成的,也就是下游的任何处理失败甚至宕机都不会被上游感知,自然也就不会对上游带来影响;
  • cQRs(Command Query Responsibility Segregation):把对服务状态有影响的命令用事件来发起,而对服务状态没有影响的查询才使用同步调用的API接口;结合EDA中的Event Sourcing可以用于维护数据变更的一致性,当需要重新构建服务状态时,把 EDA中的事件重新“播放”一遍即可;
  • 数据变化通知:在服务架构下,往往一个服务中的数据发生变化,另外的服务会感兴趣,比如用户订单完成后,积分服务、信用服务等都需要得到事件通知并更新用户积分和信用等级;
  • 构建开放式接口:在 EDA下,事件的提供者并不用关心有哪些订阅者,不像服务调用的场景―一数据的产生者需要知道数据的消费者在哪里并调用它,因此保持了接口的开放性;
  • 事件流处理:应用于大量事件流(而非离散事件)的数据分析场景,典型应用是基于Kafka的日志处理;·基于事件触发的响应:在loT时代大量传感器产生的数据,不会像人机交互一样需要等待处理结果的返回,天然适合用EDA来构建数据处理应用。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发