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

简介: 【杂谈】关于常见架构的整理,单应用、微服务、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代码在浏览器运行,后端的代码在服务器上运行。那对于我们的系统来说,同样如此。
  • 集群:通常指同一个组件存在多个实例,构成一个逻辑上的整体。比如我有个用户服务,但是我有多个服务器都跑这个用户服务,这就是一个集群。


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

相关文章
|
人工智能 Kubernetes 数据可视化
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
本文回顾了一次关键词监测任务在容器集群中失效的全过程,分析了中转IP复用、调度节奏和异常处理等隐性风险,并提出通过解耦架构、动态IP分发和行为模拟优化采集策略,最终实现稳定高效的数据抓取与分析。
297 2
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1571 3
|
存储 安全 Java
管理 Spring 微服务中的分布式会话
在微服务架构中,管理分布式会话是确保用户体验一致性和系统可扩展性的关键挑战。本文探讨了在 Spring 框架下实现分布式会话管理的多种方法,包括集中式会话存储和客户端会话存储(如 Cookie),并分析了它们的优缺点。同时,文章还涵盖了与分布式会话相关的安全考虑,如数据加密、令牌验证、安全 Cookie 政策以及服务间身份验证。此外,文中强调了分布式会话在提升系统可扩展性、增强可用性、实现数据一致性及优化资源利用方面的显著优势。通过合理选择会话管理策略,结合 Spring 提供的强大工具,开发人员可以在保证系统鲁棒性的同时,提供无缝的用户体验。
279 0
|
11月前
|
缓存 Cloud Native 中间件
《聊聊分布式》从单体到分布式:电商系统架构演进之路
本文系统阐述了电商平台从单体到分布式架构的演进历程,剖析了单体架构的局限性与分布式架构的优势,结合淘宝、京东等真实案例,深入探讨了服务拆分、数据库分片、中间件体系等关键技术实践,并总结了渐进式迁移策略与核心经验,为大型应用架构升级提供了全面参考。
|
11月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
监控 算法 关系型数据库
分布式事务难题终结:Seata+DRDS全局事务一致性架构设计
在分布式系统中,CAP定理限制了可用性、一致性与分区容错的三者兼得,尤其在网络分区时需做出取舍。为应对这一挑战,最终一致性方案成为常见选择。以电商订单系统为例,微服务化后,原本的本地事务演变为跨数据库的分布式事务,暴露出全局锁失效、事务边界模糊及协议差异等问题。本文深入探讨了基于 Seata 与 DRDS 的分布式事务解决方案,涵盖 AT 模式实践、分片策略优化、典型问题处理、性能调优及高级特性实现,结合实际业务场景提供可落地的技术路径与架构设计原则。通过压测验证,该方案在事务延迟、TPS 及失败率等方面均取得显著优化效果。
701 61
|
11月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
698 1
|
12月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
4323 57
|
消息中间件 缓存 算法
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
1638 0
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡