【杂谈】关于常见架构的整理,单应用、微服务、SOA、分布式和集群

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【杂谈】关于常见架构的整理,单应用、微服务、SOA、分布式和集群

架构相关的知识,不知道大家平时的关注度会有多少?基于我自己来讲的话,之前对此的注意力还是比较少的。


不过这些东西在我看来还是挺重要的,我们做测试的时候不能一头就扎进业务里面,如果能对整个系统架构有一个宏观上的理解,我相信,对于你后面的业务测试、性能测试,或者面试(别问我怎么知道,吃过亏o(╥﹏╥)o),都是会有帮助的。


1268169-20210702090707424-906738042.png


今天先来梳理下架构的演进。


一、单体应用


单体应用,其实就是不管啥功能都写在一个应用里,比如电商系统里常见的用户功能、商品功能、订单功能等等。


现在回想起刚入行的时候,测试的系统就属于这种单体应用。


那是给ZF做的一个“大”项目,名头是真的大,费用应该在大几千万吧,啧啧。


项目虽然“大”,但是工期紧张、人力有限。因为公司属于国企性质,正式坑巨少,我机缘巧合的成为了其中一份子,也是唯一的测试人员。实在需要人的时候,雇佣了外包人员来一起开发和测试。


所以在这种情况下,单体应用的优点就体现出来了:


  • 简单粗暴,所有功能一起打包,直接部署。
  • 本地调试方便,直接启动整个项目,调试都在一个进程内,没有冗长的调用链,方便快速定位bug。
  • 本地函数调用,没有网络调用的开销。
  • 有问题了可以快速回滚,因为只有这一个应用。

但是现在回过头去看,这种单体应用的缺点也很明显:

  • 系统耦合性高,当后面增加的功能越来越多,代码量巨增的时候,之前某个主程脑海中划分好的模块边界可能越来越模糊,导致调用关系混乱。
  • 改一赠二出现越来越多,经常存在开发修改了某个功能,而导致其他的功能有问题。
  • 某个功能有问题,整个一起回滚。
  • 语言单一,不能根据场景选择更合适的语言。比如其中有个模块系统主要是大数据分析,用 python 自然更加合适,因为它有丰富的类库。
  • 系统整体可用性不高,其中某个功能出现问题,很有可能影响到整个系统的运行。
  • 系统不易于拓展部署,比如系统中有一个功能流量很大,顶不住了就要加机器,那么在新机器上还是部署整个应用,不能单独的部署这个大流量的服务,会造成一定的资源浪费。


注意


单体应用,并不是指应用只部署在一台线上服务器,通常会有多台,不然只有一台服务器,真挂了就彻底完犊子了。


1268169-20210702161145304-1843446045.png


二、微服务架构


随着业务的发展,单应用已经不能满足当前需求了,于是就把之前揉在一起的功能根据业务拆出来,成为一个个独立的服务。


1268169-20210702161829190-1264839658.png


优点是什么?


  • 降低了耦合度,模块作用边界清晰,按照业务物理隔离。
  • 技术选型多样化,可以选择最合适的方案
  • 可根据服务单独扩展,其他不需要的依旧保持原样,资源合理化利用。

看起来很完美啊,解决了单体的痛点。但是,新的缺点来了:

  • 涉及到多个服务的改动,会比较复杂,需要多方考虑影响面。上线之前也要确定好上线顺序,确定好每个服务的回滚方案。
  • 出现问题,可能会涉及多个服务的回滚,互相之间会有影响。
  • 从之前的单应用调用,现在变成了多个应用直接的交互,调用链路变长,带来了网络开销,同时也给定位问题增加了难度。
  • 另外,为了让你的应用更可靠,还有考虑其他的异常情况,比如调用失败、因某些问题导致的高频调用,对此还得做些 限流、熔断之类的措施。
  • 还有很多......


三、SOA


提到微服务,还得再提一下SOA。


SOA 是面向服务的架构思想,其实微服务也同样,只是两者的侧重点有些差别:


  • 微服务架构更多是指把系统里的公共服务抽取出来单独运维管理的思想。
  • SOA 架构则是指一种拆分服务并使服务接口访问变得统一的架构思想。

SOA架构中包含了微服务的思想。


四、分布式和集群


这2个只要明确好概念就自然的记住了。


  • 分布式:两种不同的组件合作对外提供服务。其实我们常说的前后端分离就是这样的,前端的js代码在浏览器运行,后端的代码在服务器上运行。那对于我们的系统来说,同样如此。
  • 集群:通常指同一个组件存在多个实例,构成一个逻辑上的整体。比如我有个用户服务,但是我有多个服务器都跑这个用户服务,这就是一个集群。


通常,分布式会包含集群。

相关文章
|
1月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
167 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
6天前
|
存储 Prometheus Cloud Native
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
57 41
|
1月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
197 36
微服务架构解析:跨越传统架构的技术革命
|
4天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
16天前
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
59 11
|
18天前
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
44 11
|
20天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
55 11
|
22天前
|
自然语言处理 负载均衡 Kubernetes
分布式系统架构2:服务发现
服务发现是分布式系统中服务实例动态注册和发现机制,确保服务间通信。主要由注册中心和服务消费者组成,支持客户端和服务端两种发现模式。注册中心需具备高可用性,常用框架有Eureka、Zookeeper、Consul等。服务注册方式包括主动注册和被动注册,核心流程涵盖服务注册、心跳检测、服务发现、服务调用和注销。
59 12