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

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

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用户等。

相关文章
|
1月前
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
2月前
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
177 5
|
19天前
|
消息中间件 关系型数据库 Java
‘分布式事务‘ 圣经:从入门到精通,架构师尼恩最新、最全详解 (50+图文4万字全面总结 )
本文 是 基于尼恩之前写的一篇 分布式事务的文章 升级而来 , 尼恩之前写的 分布式事务的文章, 在全网阅读量 100万次以上 , 被很多培训机构 作为 顶级教程。 此文修改了 老版本的 一个大bug , 大家不要再看老版本啦。
|
23天前
|
存储 安全 API
单元化架构,分布式系统的新王!
【10月更文挑战第9天】
88 0
单元化架构,分布式系统的新王!
|
30天前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
43 0
|
3月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
3月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
121 2
|
3月前
|
监控 Java 开发者
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流。本文探讨Java微服务架构的设计原则与实践。核心思想是将应用拆分为独立服务单元,增强模块化与扩展性。Java开发者可利用Spring Boot等框架简化开发流程。设计时需遵循单一职责、自治性和面向接口编程的原则。以电商系统为例,将订单处理、商品管理和用户认证等拆分为独立服务,提高可维护性和容错能力。还需考虑服务间通信、数据一致性及监控等高级话题。掌握这些原则和工具,开发者能构建高效、可维护的微服务应用,更好地应对未来挑战。
85 1

热门文章

最新文章