构架的演进|学习笔记

简介: 快速学习 构架的演进

开发者学堂课程【架构的演进:构架的演进】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/841/detail/14008


构架的演进


内容简介:

1. 应用架构的演进方式

2. 云原生


一、 应用架构的演进方式

为了能够更好的学习 serverless,我们首先来回顾一下应用架构的演进方式。

图片20.png

10 多年前,主流的应用架构都是单体架构,部署形式就是一台服务器加一台数据库,在这种情况下,运营人员小心翼翼的维护这台服务器。但单体架构存在一些问题:

l 可用性风险:当这台服务器出现问题时,整个服务都将无法使用;

l 业务增长后,服务量增大,单台服务器无法支撑。

这时通常会有两种做法:垂直伸缩和水平伸缩,根据过往经验,垂直伸缩代价相对比较高昂,且存在瓶颈,相比之下水平伸缩更好。架构此时会演进成下图所示的方式:

图片21.png

通常会在流量入口添加一个负载均衡,在负载均衡下挂更多的服务器,这时,当一台服务器出现问题时,还有其他服务器来完成,不会导致整个服务的不可用,服务量增大,加入更多的服务器来解决这个问题。上文的两个问题也就解决了。

因此,这样一种基于单体架构的水平伸缩能力会为整个架构提供更好的可用性保障。

其实,这种架构还有一些问题,在一个单体架构上做研发时,由于单体结构下代码没有明确的物理边界,随着研发人员数量的增加,人员之间的冲突会越来越严重,为了解决这个问题,通常会引入微服务架构。微服务架构在逻辑上可以帮助解决此问题。一般来说团队扩大后,为了可以更好地进行研发,开发、测试、部署、运维的工作,就会把一个大的单体应用拆分为一个与下图类似的微服务架构。在这种架构下会引入一些新的挑战。其中最明显的就是分布式问题,这也是微服务架构的默认问题。分布式会引入一些新的技术,为了在服务与服务之间进行通讯,会引入GRPC、Double 等协议进行通讯,还可以通过异步方式如 Kafka 来收发信息,还会引入像分布式缓存 Redis、分布式追踪服务 traceid。

图片22.png

其实分布式环境下的微服务架构的拆分,一般会基于一些比较好的方法论,例如领域驱动设计中的限定上下文(qualify context),这是比较推荐大家理解的内容,因为拆分好的微服务会大幅度的提升研发效率,但拆分如果出现问题,研发效率反而会下降。

从单体架构引进的微服务架构从物理角度来看,分布式成为了默认选项,上文提到的一些相关技术就需要我们去做。

 

二、 云原生

最简单的理解,一个架构是否是云原生,就看这个架构是否“长在云上”。这里的长在云上不能简单的以IaaS服务来理解,例如简单的 ECS 或 OSS 第三存储,应该理解为这个架构是否基于云尝试的分布式服务来架构的,因为只有这些分布式服务才会影响到业务的架构。

在云时代之前,大家会自己来搭建这样的服务,云时代到来后,大家都会默认的选择一些云服务来实现,因为这样更快,且能获得更好的保障。

另外两个不得不提的技术就是 docker 和 Hadoop,前者标准化了一个应用分发的标准,后者在前者的基础上,定义了应用生命周期的标准,一个应用从启动、上线、到健康检查都有了统一的标准。有了应用的分发标准和应用的生命周期标准后,一个云服务平台就可以很容易的做成一个生命周期托管的服务,包括应用的版本管理、发布上线、观测。对于无状态应用来说,一个底层物理结点的故障,通常不会对应用研发造成感知,因为应用托管服务可以识别出有故障的物理节点,并将应用容器从此节点下掉,在新节点扩出一个容器,整个过程对应用无感,这就是云原生和云原生托管服务为应用带来的好处。

还有一些可以证明云原生价值的例子。业务一般有高峰期和低峰期,由于应用托管到了一个云原生的平台上,那么这个应用的一些指标,如运行时期的CPU、内存、流量变化、并发度等数据,都可以从平台得到,用户只需要根据这些数据配置简单的规则,平台就可以在低峰期下线一些实例,高峰期扩充实例,从而降低业务成本,在高峰时及时响应流量的变化保证服务的可用性。

在架构演进的过程中,我们可以发现研发人员逐渐的把关注点从机器转移到业务,而平台则会更多的负责机器管理问题,这就是一个非常朴素的关于serverless的理解。

相关文章
|
6月前
|
监控 负载均衡 安全
构建高效微服务架构的五大核心技术实践
【4月更文挑战第2天】 在当今软件开发领域,微服务架构已成为构建复杂系统的首选模式。它通过将大型单体应用拆分成一系列小型、自治的服务来提高可维护性和扩展性。本文深入探讨了构建高效微服务架构的五大核心技术实践,包括服务拆分策略、API网关设计、服务发现与注册、熔断机制以及分布式追踪与监控。文章不仅分享了实践中的经验教训,还提供了实施这些技术时的具体建议和最佳实践。
|
运维 Cloud Native 架构师
【组装式架构设计】架构演进简史
一步一步从单体到 SOA,从微服务再到云原生的科普后端架构演进史
28045 12
【组装式架构设计】架构演进简史
|
3月前
|
Cloud Native 持续交付 开发者
云原生之旅:从传统到现代的架构演化
本文将通过一次虚拟的旅行,带领读者穿越回过去,探索软件架构的发展脉络。我们将从单体应用开始,一路经过服务化拆分,最终抵达云原生的乐土。这不仅是一段技术演进的历史,也是对如何在不断变化的技术浪潮中保持初心与创新的启示录。
41 2
|
5月前
|
运维 Cloud Native 开发者
云原生技术:构建未来软件架构的基石
【6月更文挑战第13天】随着云计算的不断演进,云原生技术已成为推动现代软件开发、部署和运维的关键力量。本文深入探讨了云原生的核心概念、优势以及它在企业中的应用,旨在揭示如何借助云原生技术实现更高效、灵活和可靠的软件解决方案。
313 2
|
消息中间件 缓存 前端开发
【架构设计】互联网架构项目架构演进以及三高设计概述
【架构设计】互联网架构项目架构演进以及三高设计概述
【架构设计】互联网架构项目架构演进以及三高设计概述
|
11月前
|
监控 Cloud Native 容灾
下一代软件架构该如何搭建微服务核心能力
随着数字化时代的来临,各种架构设计思想确实如雨后春笋般涌现,给软件开发领域带来了百家齐放的局面,但是软件开发领域也正面临着前所未有的挑战,比如微服务架构、云原生架构、Serverless架构、事件驱动架构、中台架构、容灾架构等,都在不同场景下展现出了独特的优势。尤其是从事云原生领域的开发者来说更有发言权,因为在裁员潮来临的时候,科技公司先要“下手”的就是云原生、容器化等领域。但是话又说回来,传统的单体应用架构已经无法满足现代软件需求的快速变化和高可靠性要求,在这种情况下,微服务架构作为一种分布式系统设计方法,逐渐受到技术圈的关注和应用。那么本文就来简单聊聊下一代软件架构如何搭建微服务的核心能力
77 2
下一代软件架构该如何搭建微服务核心能力
|
SQL 负载均衡 Java
高性能架构学习路线图-分布式架构演进
高性能架构学习路线图-分布式架构演进
451 0
|
存储 调度
架构:第五章:分布式架构的演进
架构:第五章:分布式架构的演进
389 0
架构:第五章:分布式架构的演进
|
Java 开发者 Spring
系统架构演变-中|学习笔记
快速学习系统架构演变-中
119 0
系统架构演变-中|学习笔记
|
Java 中间件 开发者
系统架构演变-上|学习笔记
快速学习系统架构演变-上
168 0
系统架构演变-上|学习笔记