单体应用、SOA架构、微服务架构的对比

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 单体应用、SOA架构、微服务架构的对比

目录

前言:

单体架构

SOA架构

微服务架构


前言:

随着近年来云技术的发展,越来越多的用户选择使用云技术来代替传统的IT基础设施。在云技术发展的早期,业界的关注点集中在虚拟化、分布式、存储等laas方面的技术。但随着“云原生”概念的提出,大家的注意力开始转移到如何构建更加合适环境运行的应用上来。

“什么样的架构才是适合在云环境中运行”是一个非常大的问题,在此先不展开讨论,而是到CNCF对云原生的定义中寻找答案:

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网络、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统,结合可靠的自动化手段,云原生技术使工程师能够轻松地系统作出频繁和可预测的重大变更。

从上文的定义中可以发现“微服务”在云原生技术中占有非常重要的位置。在Jakarta.ee 2019年的调研报告中也印证了这一点,超过40%公司选择采用微服务架构来构件云上系统

在Java语言下,Pivoal强大的标准制定能力与影响力,Spring Cloud拥有一个强大的国际化社区,阿里巴巴作为整个社区里面的重要成员,也贡献出Spring Cloud Alibaba这套优秀的实现,这也是目前整个Spring Cloud体系下最完善并且在持续更新的实现方案。

需要掌握的知识点:

    1. 微服务的发展历程
    2. 微服务的基本形式
    3. Spring、Spring Boot、Spring Cloud的职责与关系
    4. Spring Cloud Alibaba的功能与定位
    5. Java工程脚手架的使用方法
    6. 沙箱环境的使用方法

    概念:

    通常业界所说的,没有最好的架构,只有最合适的架构。微服务架构也是随着信息产业的发展而出现的最有普遍适用性的一套架构模式。通常来说,架构的发展历程分为以下几种:单体架构、SOA面向服务架构、微服务架构

    单体架构

    很久以前,计算机发展的早期,创建的绝大部分的应用都属于单体应用,通常一个应用分为数据库连接、业务逻辑处理、展示逻辑等放到了一起,甚至于处理用户请求的地方也直接连接数据库。

    后来,学习使用了MVC的架构,由此开启了应用的拆分之旅,多层架构的本质,是按照技术职责将应用做水平拆分,每一层解决的技术问题相对集中,层与层之间做单向依赖。可以更好的管理代码,大大提升了后期的维护效率,但是此时还是单体应用,部署也是按照一个整体运行。

    优点有以下几点:开发简单、开发迅速、部署简单但是随着业务的越来越多,导致的应用的规模越来越大,逻辑越来越复杂,导致的这个应用也越来越难以维护。于是出现了SOA。面向服务的架构

    SOA架构

    SOA是Service-Oriented Architecture的简写,面向服务的架构,从名称来看是服务是SOA架构中非常重要的概念。SOA的核心思想是将系统的功能分为一系列的服务。

    面向服务的架构SOA是一个组件模型,将应用的不同功能单元(称服务)进行拆分,并通过这些服务之间定义好的接口和协议联系起来。接口是采用中立的方式定义的,独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以统一的方式进行交互

    与单体架构不同的是SOA是粗粒度的拆分,具体的标准参考康威定理,应用从单体应用做了垂直拆分之后,就会变成一些相对独立的应用。此时,应用之间的依赖、调用等相关问题。

    相关协议的介绍:

      1. xml一种标记语言,用于以文档格式描述消息中的数据
      2. SOAP(Simple Object Access Protocal),在计算机网络上交换基于xml的消息协议,通常是HTTP
      3. WSDL(Web Services Description Language ,Web服务描述语言)基于xml的描述语言,用于描述与服务交互所需的服务的公共接口,协议绑定,消息格式
      4. UDDI(Universal Description ,Discovery .and Integration,是统一描述、发现与集成)基于xml的注册协议,用于发布WSDL并允许第三方发现这些服务
      5. ESB(Enterprise Service Bus,企业服务总线)--支持异构环境中的服务,消息以及基于事件的交互,并且具有服务级别和管理性

      image.gif编辑

      但是存在以下的缺点:高门槛,需要不同的协议以及厂家不同参与的,很多服务可能导致通信的协议无法进行统一;不适合云环境,不同的协议导致的上线以及集成都不一致导致的部署通信的问题;中心化,虽然实现了水平的扩展,但是ESB却成了系统的中心

      微服务架构

      image.gif编辑

      微服务具有以下几种特点:

        1. 一套小服务
        2. 独立进程
        3. 轻量级通信协议
        4. 可独立部署
        5. 多语言不同存储技术

        微服务可以说是一个庞大且复杂的概念集合,它既是一种架构模式,也是实现这种架构模式所使用的技术方案集合

        需要解决的问题:

          1. 分布式的使用难点:原本在单体应用中,很多简单的问题都会在分布式环境下呗几何级的放大,例如分布式事务,分布式锁、远程调用。
          2. 协调代价:一个项目有几十个应用,这些应用又是不同的团队开发的,导致协调这些应用是一个很难的事情
          3. 服务拆分需要很强的设计能力,如果拆分不合理会导致服务不能很好的实现高内聚低耦合的要求
          相关文章
          |
          4天前
          |
          设计模式 Java API
          Java 可扩展 API 设计:打造灵活的应用架构
          【4月更文挑战第27天】设计可扩展的 API 是构建灵活、易于维护的应用程序架构的关键。Java 提供了丰富的工具和技术来实现这一目标,使开发者能够构建具有高度可扩展性的应用程序。
          20 4
          |
          22小时前
          |
          Cloud Native Devops 持续交付
          构建未来:云原生架构在企业数字化转型中的关键作用构建高效微服务架构:后端开发的新范式
          【4月更文挑战第30天】 随着企业加速其数字化进程,云原生架构已成为支撑复杂、可伸缩和灵活应用的骨干。本文探讨了云原生技术的崛起,重点分析了其在促进业务敏捷性、提高运营效率及推动创新方面的核心价值。通过深入剖析云原生生态系统的关键技术组件,如容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,揭示了企业如何利用这些技术来构建和维护高度可用且动态的IT环境。文章还提出了一个多维度的采纳框架,帮助企业评估和实施云原生解决方案,以实现真正的业务价值。 【4月更文挑战第30天】在现代软件开发的快速演变中,微服务架构已经成为一种领先的设计模式,用于构建可扩展、灵活且容错的应用程序。与传
          |
          1天前
          |
          前端开发 JavaScript 安全
          【TypeScript技术专栏】TypeScript在微前端架构中的应用
          【4月更文挑战第30天】微前端架构通过拆分应用提升开发效率和降低维护成本,TypeScript作为静态类型语言,以其类型安全、代码智能提示和重构支持强化这一架构。在实践中,TypeScript定义公共接口确保跨微前端通信一致性,用于编写微前端以保证代码质量,且能无缝集成到构建流程中。在微前端架构中,TypeScript是保障正确性和可维护性的有力工具。
          |
          1天前
          |
          运维 监控 负载均衡
          探索微服务架构下的服务网格(Service Mesh)实践之路
          【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
          |
          1天前
          |
          运维 Kubernetes Cloud Native
          构建未来:云原生架构下的微服务治理
          【4月更文挑战第30天】 在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和容错性成为企业IT战略的核心。本文深入探讨了如何通过云原生架构实现微服务的高效治理,包括服务发现、配置管理、流量控制和故障处理等关键方面。我们将展示一系列最佳实践和工具选择,以帮助企业构建一个既可靠又灵活的服务网格,确保业务连续性并加速创新步伐。
          |
          2天前
          |
          消息中间件 敏捷开发 监控
          构建高效微服务架构的实践指南
          【4月更文挑战第29天】 在当今快速迭代的软件发展环境中,微服务架构以其灵活性、可扩展性成为了众多企业转型的首选模式。然而,随着服务的不断拆分和细化,如何保持系统的高效运行成为一大挑战。本文将深入探讨一系列实用的策略和技术,以指导读者构建和维护一个高效的微服务系统。我们将从服务划分原则、通信机制优化、数据一致性保障以及持续集成与部署等方面展开讨论,并结合实际案例分析,帮助读者把握微服务架构的精髓,提升系统性能。
          |
          2天前
          |
          Cloud Native Devops 持续交付
          构建未来应用:云原生架构在现代企业中的实践与挑战
          【4月更文挑战第29天】 随着数字化转型的加速,企业正迅速转向云计算以支撑其业务敏捷性和创新。云原生技术,作为推动这一转型的关键因素,正在重新定义软件开发和运维模式。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps文化,并分析这些技术如何帮助企业实现弹性、可扩展和高效的应用部署。同时,我们将讨论在采纳云原生实践中所面临的挑战,包括安全性、治理和人才缺口等问题。
          |
          2天前
          |
          运维 Cloud Native Devops
          构建未来应用:云原生架构的演进与实践
          【4月更文挑战第29天】在数字化转型的浪潮中,企业亟需灵活、高效的技术支撑来应对市场的快速变化。云原生架构以其独特的设计理念和技术栈,成为推动这一变革的关键力量。本文深入探讨了云原生的核心概念、关键技术和实施策略,旨在为企业提供一个清晰的云原生转型蓝图,助力其构建更加动态、可扩展的应用系统。
          |
          3天前
          |
          运维 监控 负载均衡
          探索微服务架构下的服务网格(Service Mesh)实践
          【4月更文挑战第28天】 在现代云原生应用的后端开发领域,微服务架构已成为一种广泛采用的设计模式。随着分布式系统的复杂性增加,服务之间的通信变得愈加关键。本文将深入探讨服务网格这一创新技术,它旨在提供一种透明且高效的方式来管理、监控和保护微服务间的交互。我们将从服务网格的基本概念出发,分析其在实际应用中的优势与挑战,并通过一个案例研究来展示如何在现有的后端系统中集成服务网格。
          |
          4天前
          |
          Kubernetes 负载均衡 Docker
          【专栏】构建高效微服务架构:Docker与Kubernetes的完美搭档
          【4月更文挑战第27天】本文介绍了Docker和Kubernetes在构建微服务架构中的应用。Docker是开源容器引擎,用于打包和分发应用,实现隔离和封装,提升可扩展性和可维护性。Kubernetes是容器编排平台,自动化部署、扩展和管理容器,提供负载均衡和故障转移。二者结合,能高效支持微服务架构。文中通过实例展示了如何将用户、商品和订单服务用Docker打包,再用Kubernetes部署和管理,确保微服务稳定运行。