单体架构,分布式系统的差别在哪里?

简介: 随着技术日新月异的发展,最近几年微服务和分布式技术成为主流。每一个好的解决方案不一定是直接设计出来的,但每一个优秀的架构都必须承受得住业务的考验和需求驱动的积累。最初我们开发系统都是在单个的应用上进行开发、测试、部署和运维等。

01前言


随着技术日新月异的发展,最近几年微服务和分布式技术成为主流。每一个好的解决方案不一定是直接设计出来的,但每一个优秀的架构都必须承受得住业务的考验和需求驱动的积累。最初我们开发系统都是在单个的应用上进行开发、测试、部署和运维等。每次新的需求迭代都将可能涉及到整个系统的修改,尤其是庞大而臃肿的业务系统需要进行大量的数据增删改查操作,开发起来变得非常麻烦。为了应对更高的并发和业务需求,解决单个应用的缺点,把庞大复杂的单体应用按照业务拆分成多个子业务模块,可进行垂直拆分或水平拆分,从而达到更高效的开发、更好的管理和维护的目的,这就是所谓的分布式系统。



02单体架构


2.1 定义

一个归档包(可以是JAR、WAR、EAR或其它归档格式)包含所有功能的应用程序,通常称为单体应用。而架构单体应用的方法论,就是单体应用架构。

2.2 单体应用举例

单体应用集成了前端页面和后端接口服务及业务逻辑和数据操作于一体的单个完整系统,Struts1、Struts2及SSH、SSM架构的系统等,单个应用囊括了所有业务模块。

2.3 单体架构示意图


d4bdc56804d42a06eb0a84edd7eb7ba5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2.4 单体应用优缺点

2.4.1 优点

  • 易于集中式开发、测试、管理、部署。
  • 无需考虑跨语言。
  • 能避免功能重复开发(相对分布式)。

2.4.2 缺点

  • 团队合作困难
  • 代码的维护、重构、部署都比较难。
  • 稳定性、可用性(停机维护)、扩展性不高。

当用户规模越来越大时,单体应用可以通过集群来应对。如通过DNS、Nginx或硬件F5分配集群中的服务器来提供服务。它的缺点(开发效率低、可维护差稳定性查)导致需要对单体应用进行拆分,垂直拆分或水平拆分。



03分布式架构


3.1 微服务定义

微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

3.2 微服务举例

市面上目前典型主流的微服务架构有SpringBoot、SpringCloud、Dubbo,微服务兴起的时代,除了官方几个代表的框架外,各大厂商也开始了各自开源的分布式框架。除了上面说的Dubbo外,还有腾讯的Tars,京东的JSF,新浪的Motan等。

3.3 示意图

74a1d28daed48f1916e1d06c1e71b757_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3.4 优缺点

3.4.1 优点

  • 每个业务模块独立开发、测试、部署和管理。
  • 每个业务模块之间相互的影响小,按需分配资源。
  • 所有业务模块既是独立,又组成一个完整整体。
  • 可通过配置进行上游调用的升级或降级。
  • 支持高并发、高扩展、高可用等大型系统。

3.4.2 缺点

  • 资源耗用相对单体应用增大,每个业务模块需单独部署。
  • 分布式数据一致性问题(CAP)。
  • 系统维护成本加大,需要更多的人工介入。
  • 业务间耦合度变高,调用关系错综复杂。

尽管分布式微服务给开发人员带来极大的使用便利性和系统性能上的优越性。但也暴露了分布式难以解决的一些问题,著名的CAP理论就是其中的一个典型。不过整体来说还是利大于弊,选择分布式微服务架构是未来的趋势,也是淘汰旧技术的必经之路。


04总结


从单体架构到分布式微服务架构,我们可以把单体应用简单分为水平拆分或垂直拆分两种方式。如一个电商系统,包含:商品模块、会员模块、物流模块、支付模块、订单模块几个核心模块。水平拆分,单体应用把所有这些模块集中在一个电商系统里面,水平拆分后分为:商品系统、会员系统、物流系统、支付系统、订单系统。垂直拆分,会员系统可按会员等级分为:普通用户、VIP用户、超级VIP用户等。

相关文章
|
2月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
34 0
|
2月前
|
设计模式 负载均衡 网络协议
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
50 0
|
2月前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(一)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
42 0
|
1月前
|
负载均衡 监控 Dubbo
Java微服务架构设计与实践:构建可伸缩的分布式系统
【4月更文挑战第2天】微服务架构响应现代业务需求,通过拆分大型应用为独立服务实现模块化和可扩展性。Java中的Spring Boot和Dubbo等框架支持服务注册、负载均衡等功能。遵循单一职责、自治性和面向接口原则,每个服务专注特定逻辑,独立部署运行。实际项目中,如电商系统,服务按功能拆分,提升可维护性和扩展性。还需考虑服务通信、数据一致性和监控等复杂话题。Java微服务架构助力构建高效、灵活的应用,应对未来挑战。
Java微服务架构设计与实践:构建可伸缩的分布式系统
|
11天前
|
存储 关系型数据库 分布式数据库
电子好书发您分享《PolarDB分布式版架构介绍PolarDB分布式版架构介绍》
**《PolarDB分布式版架构介绍》电子书分享:** 探索阿里云PolarDB分布式设计,采用计算存储分离,借助GMS、CN组件实现大规模扩展。[阅读更多](https://developer.aliyun.com/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.3b3b2ccbVVjjt0)
15 3
|
6天前
|
存储 分布式计算 分布式数据库
【专栏】云计算与分布式系统架构:驱动数字化时代的创新引擎
【4月更文挑战第27天】本文探讨了云计算与分布式系统架构在数字化时代的关键作用。云计算,凭借弹性、可扩展性和高可用性,提供便捷的计算环境;分布式系统架构则通过多计算机协同工作,实现任务并行和容错。两者相互依存,共同推动企业数字化转型、科技创新、公共服务升级及数字经济发展。虚拟化、分布式存储和计算、网络技术是其核心技术。未来,深化研究与应用这些技术将促进数字化时代的持续进步。
|
2月前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
15 0
|
2天前
|
运维 Cloud Native 持续交付
构建未来:以云原生为基石的分布式系统架构深入理解操作系统的内存管理机制
【4月更文挑战第30天】 随着企业数字化转型的不断深入,传统的IT架构已难以满足市场对于敏捷性、可扩展性和成本效益的需求。云原生技术作为推动这一变革的关键因素,其设计理念和实现方式正在重塑软件开发和运维模式。本文将探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)、以及无服务器计算等,并分析其在构建分布式系统中的作用与挑战。通过实际案例,我们将展示如何利用云原生技术构建高效、弹性和可维护的分布式系统。
|
3天前
|
负载均衡 应用服务中间件 nginx
服务器架构、分布式系统、负载均衡、微服务、高可用性
**分布式系统取代单体架构,以微服务实现高扩展性和灵活性。通过负载均衡技术增强性能,防止单点故障,结合冗余备份与故障切换保障高可用性,这种架构是支撑大规模在线业务的关键。**
32 3
|
9天前
|
关系型数据库 分布式数据库 数据库
电子好书发您分享《PolarDB分布式版架构介绍》
阅读阿里云电子书《PolarDB分布式版架构介绍》,深入理解这款高性能数据库的分布式架构设计。书中通过图文并茂的方式揭示了PolarDB在分布式场景下的核心特性和技术优势,适合数据库爱好者和云计算从业者学习。[阅读链接](https://developer.aliyun.com/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.4ab72ccbIzDq2Q)