SOA架构概述及实践

作者:禅与计算机程序设计艺术

1.简介

随着互联网应用日益增长、分布式系统技术日渐成熟、云计算平台兴起、数据量不断上升等诸多原因,企业内部信息系统越来越复杂,单个应用系统越来越难以支撑公司业务快速发展和迭代。为了解决这一问题,2001年9月,国际标准化组织(ISO)发布了面向服务的架构(SOA)作为一种服务标准。

SOA架构的主要目的是通过将应用程序组件之间相互通信的服务集成到一个统一的平台上来提高效率、降低维护成本和降低系统部署风险,从而实现“信息系统的软化”。

SOA架构可以分为三个层次:

  1. 服务层:SOA架构中的最外层,提供功能性服务,包括业务规则、事务处理、安全保障、报表生成、查询和分析等;

  2. 消息层:中间层,用于管理服务间消息流,包括消息路由、编排、转换、编码、加密、签名等;

  3. 平台层:基础设施层,包括硬件资源、网络、数据存储、中间件、开发环境、测试环境、生产环境等;

基于SOA架构的应用系统中一般至少会包括如下几个方面的服务:

  1. 数据服务:对业务数据的管理,如订单管理、库存管理、供应商管理等;

  2. 应用服务:具体业务逻辑的实现,如出纳管理、收款管理、销售管理等;

  3. 接口服务:外部应用与服务系统之间的交互接口,包括WebService、RESTfulAPI、SOAP等;

  4. 集成服务:集成各类应用系统,包括ERP、CRM、HCM等;

  5. 认证授权服务:提供用户身份验证和访问控制机制;

  6. 管理服务:对整个系统运行情况进行监控、统计、报警等;

目前,SOA已经成为构建企业级应用系统的一种主流架构模式。很多大型公司都已采用或正在采用SOA架构。国内外也有众多的SOA相关培训课程、论坛、书籍和工具等资源可以供大家学习。下面我将对SOA架构做一个简单的介绍。

2.基本概念术语说明

2.1 什么是SOA?

SOA(Service-Oriented Architecture)即面向服务的架构。SOA是一种架构模式,它定义了一系列服务,这些服务涉及到企业IT系统的不同功能和需求,并按照业务流程或某种业务协议进行协同工作,彼此之间通过某些轻量级协议进行通信。这种通信可以使得不同服务之间的调用和数据共享变得简单而高效。SOA把企业的应用系统划分为不同的服务单元,每个服务单元负责完成特定的任务,然后将这些服务单元连接起来组成一个整体。在SOA架构下,应用系统由多个服务构成,服务之间通过定义明确的接口进行通信。这样就可以实现系统的模块化、健壮性和可伸缩性。

2.2 为什么需要SOA?

由于传统的单体应用模型存在以下问题:

  1. 系统耦合度高:一旦某个模块出现问题,整个系统都将无法运行;
  2. 可扩展性差:当应用系统的规模增长时,新模块的添加、替换或者修改会非常困难;
  3. 系统难于理解和维护:应用系统变得复杂,不易于理解和维护;
  4. 代码复用率低:系统中重复使用的代码较少;
  5. 模块过多,开发难度大:每增加一个模块,开发人员都要花费大量的时间和精力;
  6. 测试成本高:缺乏有效的测试方案,导致系统的质量难以保证;
  7. 上线效率低:应用系统改动频繁,上线周期长,影响产品和市场推广;
  8. 技术债务积累:应用系统架构、开发工具、编程技术等技术债务越积越多。

所以需要SOA来解决以上问题。

2.3 SOA架构的作用

SOA架构的作用包括:

  1. 降低系统的复杂度:通过SOA架构,可以把复杂的系统拆分成独立的服务,使其更加易于理解和维护;

  2. 提高系统的可靠性:通过SOA架构,可以对服务进行集中管理,提高系统的可靠性;

  3. 提高系统的可伸缩性:通过SOA架构,可以方便地对系统的容量进行扩充;

  4. 促进服务的重用:SOA架构能够促进服务的重用,避免了重复开发;

  5. 方便产品和项目的交流:SOA架构使得产品和项目的开发、测试、部署、运营等环节可以高度自动化,促进了信息系统之间的互通;

  6. 提升组织结构的灵活性:SOA架构允许多个部门独立开发和部署自己的应用系统,符合组织的实际需求。

2.4 SOA架构模型

SOA架构模型又称SOAM模型(Service-Oriented Architecture Model)。SOAM模型是对SOA架构的一种定义。它是一个多视图模型,包含五个视图:

  1. 服务视图:描述企业IT系统中的服务以及它们之间的关系;

  2. 消息视图:描述服务间通信方式以及消息流;

  3. 契约视图:定义服务间通信的详细规范;

  4. 架构视图:展示服务的内部结构,以及它们如何组合起来形成完整的系统;

  5. 运行视图:描述服务的生命周期,描述服务的性能、可用性、可靠性。

3.核心算法原理和具体操作步骤以及数学公式讲解

3.1 服务注册中心的作用

服务注册中心是SOA架构的重要组成部分之一。服务注册中心的作用就是用来存储服务的元数据信息,包括服务的名称、地址、端口、协议等,通常还包括服务的版本号、别名、权重、上下游依赖等。服务注册中心帮助服务消费者查找所需服务的信息,并获取到服务的地址列表,从而实现服务的远程调用。

服务注册中心通常包含两部分:

  1. 服务目录:存储服务的元数据信息,包括服务的名称、地址、端口、协议等;

  2. 服务实例:服务的真正运行实例,它向服务目录发送心跳包,保持服务的可用状态。

为了防止服务目录中信息过期失效,服务实例定期向服务目录发送心跳包,并定时更新服务的元数据信息。

服务注册中心提供了以下优点:

  1. 提高服务发现的效率:服务消费者通过服务注册中心即可找到所需服务的地址列表,不需要自己配置服务的位置和端口等信息;

  2. 解决一致性问题:服务注册中心可以减少服务消费者对服务目录的依赖,使得服务间的通信更加的稳定;

  3. 提高服务可用性:服务注册中心可以对服务进行集群部署,当其中一个节点故障时,其他节点仍然可以提供服务。

3.2 服务调用流程详解

假设有两个服务A和B,它们需要通信,因此它们需要建立联系,第一步需要在服务注册中心(比如Zookeeper)注册服务,将服务的元数据信息如服务名称、地址、端口、协议等注册到服务目录中,第二步就需要服务消费者(比如调用端)从服务注册中心查找相应的服务,并获取到服务的地址列表,再通过地址列表进行远程调用。下面是具体流程:

  1. 服务A向服务注册中心注册:

    • 服务A向服务注册中心发送心跳包,告知自己服务名称、地址、端口等信息;
    • 服务注册中心接收到心跳包后,将该服务的元数据信息注册到服务目录中。
  2. 服务B向服务注册中心注册:

    • 服务B向服务注册 Center发送心跳包,告知自己服务名称、地址、端口等信息;
    • 服务注册中心接收到心跳包后,将该服务的元数据信息注册到服务目录中。
  3. 服务消费者从服务注册中心查找服务A的地址列表:

    • 服务消费者向服务注册中心发送请求,请求搜索服务A的地址列表;
    • 服务注册中心查询服务目录中的服务元数据信息,并返回服务A的地址列表。
  4. 服务消费者根据服务A的地址列表远程调用服务A:

    • 服务消费者从服务A的地址列表中选择一个地址进行远程调用;
    • 服务消费者对服务A进行远程调用,完成服务A的功能。

3.3 分布式服务框架详解

SOA架构设计时,会带来新的复杂度,如何在分布式环境中简化SOA架构是一个值得研究的课题。目前比较流行的微服务架构,它将SOA架构分解为多个独立的服务,每个服务通过HTTP/RPC等协议暴露出来,并且使用服务注册中心进行服务治理,使得每个服务独立部署、扩容和弹性伸缩。但是,微服务架构并不是银弹,它也存在一些短板:

  1. 服务间通讯复杂:虽然微服务架构使用HTTP/RPC等协议,但它们还是有一定复杂度;

  2. 配置管理复杂:微服务架构下,各个服务的配置是需要手动管理的;

  3. 测试、监控、调度复杂:微服务架构下,各个服务的生命周期是复杂的,需要考虑测试、监控、调度等多方面的问题;

  4. 跨部门沟通复杂:微服务架构下,不同部门的研发人员可能无法直接沟通,需要搭建合作共赢的沟通渠道。

SOA架构的另一种实现方式是分布式服务框架(Distributed Service Framework),它的设计目标是简化分布式系统的开发过程。分布式服务框架通过模块化、服务粒度细化、消息驱动的方式来简化分布式系统的开发流程。它首先对分布式系统进行抽象,将分布式系统拆分为多个服务,每个服务都可以独立开发、部署、测试和运行。在分布式服务框架中,引入了消息总线来简化服务间通讯的复杂度。它将消息总线视为服务间通信的枢纽,所有服务都可以使用消息总线来进行通信。服务开发人员只需要关注自身的业务逻辑,不需要关心底层的网络、存储、计算等资源。消息总线负责传输消息,消息路由、编排、转换等工作都交给它来完成。最后,消息总线还负责分布式系统的监控、调试和调度等工作。因此,分布式服务框架可以极大地简化分布式系统的开发,提高开发效率。

分布式服务框架的基本架构如下图所示:

  1. 服务开发者:主要负责编写业务逻辑的代码,服务开发者只需要关注自身业务逻辑即可,不需要了解底层的网络、存储、计算等资源,也不需要关注服务间的通讯协议、消息队列等细节。

  2. 框架管理器:主要负责服务的注册和管理,包括服务的注册、发现、路由、熔断、配置管理等,同时负责服务的健康检查、流量控制、流量监控、容错恢复、日志记录等。

  3. 消息总线:主要负责服务间的通信,消息总线为所有服务提供了统一的消息传递接口,服务间可以通过消息总线进行消息的发布和订阅,使得服务间的通信更加的简单、统一。消息总线具备高性能、高吞吐量,可以在分布式环境下对服务进行横向扩展。

  4. 服务器集群:主要负责服务的运行环境,它通过多台物理机或虚拟机来部署服务,利用服务器集群提供的高可用、资源共享、弹性伸缩等特性,可以很好地解决服务的可用性问题。

  5. 监控中心:主要负责服务的监控,包括服务的请求延迟、错误率、吞吐量等,监控中心通过报警、日志、指标等形式,让开发者看到当前服务的运行状况,并及时发现和处理异常。

3.4 SOA架构下的微服务架构优劣势

SOA架构下微服务架构的优势:

  1. 聚焦业务:SOA架构能够聚焦业务,每一个业务都有特定的服务;

  2. 更容易理解:服务的粒度细化,使得服务间的关系更加清晰,更容易理解;

  3. 自动化程度高:微服务架构下的服务的开发、部署、测试、运维等都是自动化的,使得流程化和规范化程度更高;

  4. 降低耦合:微服务架构下,服务的粒度足够小,开发者只需要关注自身业务逻辑,降低了开发的复杂度。

SOA架构下微服务架构的劣势:

  1. 服务的沟通成本高:因为服务的粒度过细,开发者需要和不同的团队或者部门沟通才能确定需求和交付服务;

  2. 服务间的依赖性高:由于微服务架构下服务的数量庞大,服务间的依赖性也会增加,当一个服务发生变化时,会牵连到多个服务,影响系统的稳定性;

  3. 部署和运维的复杂度增加:微服务架构下,部署和运维的复杂度增加,服务的数量也增加,需要考虑大量的机器和工具;

  4. 服务的自治性较弱:由于服务的粒度过细,会导致服务的自治性较弱,不能满足多部门共同开发的需求;

猜你喜欢

转载自blog.csdn.net/universsky2015/article/details/133565628