系统架构设计师 SOA与微服务架构篇

embedded/2024/9/24 21:23:05/

一、引言 📖

在现代软件开发中,SOA 🟡 和 微服务 🟩是两种主要的架构风格。本文将深入探讨这两种架构

二、SOA与微服务的对比🆚

  • 微服务架构:灵活的去中心化架构

    • 特点 💡
      • 高度模块化:将应用程序分解为一组小型、独立的服务。
      • 独立进程:每个服务运行在其独立的进程中。
      • 轻量级通信:通过如HTTP RESTful API进行交互。
    • 使用场景 🌟
      • 快速迭代:适合需要快速迭代和部署的互联网业务场景。
      • 市场变化:如在线购物平台、社交媒体应用等。
  • SOA架构:企业级的集中式架构

    • 特点 🏢
      • 集成服务:通过企业服务总线(ESB)来集成不同的服务。
      • 复杂协议:涉及如UDDI、WSDL和SOAP等复杂协议和规范。
    • 使用场景 📈
      • 标准化集成:适用于需要严格标准化和集成的企业环境。
      • 复杂业务流程:如金融服务、电信行业等。

三、SOA的主要协议和规范 📜

  • UDDI:用于Web服务的发现和集成。
  • WSDL:用于描述Web服务接口的XML格式语言。
  • SOAP:基于XML的消息传输协议,用于Web服务之间的通信。

四、SOA设计的标准要求 📝

  • 文档标准化:使用WSDL等平台独立的自我描述XML文档。
  • 通信协议标准化:使用基于XML Schema的消息进行通信。
  • 应用程序统一登记与集成。
  • 服务质量(QoS)标准:包括安全性、可靠性、策略、控制和管理等方面的标准。

五、SOA的作用 🔧

  • 资源共享:通过将应用和资源转换为标准化的服务。
  • 业务与IT同步:实现业务流程与IT系统的同步。

六、SOA的设计原则 🏛️

  • 无状态。
  • 单一实例。
  • 明确定义的接口。
  • 自包含和模块化。
  • 粗粒度。
  • 服务之间的松耦合性。
  • 重用能力。
  • 互操作性、兼容和策略声明。

七、SOA的设计模式 🛠️

  • 服务注册表模式:包括服务注册、查找和绑定。
  • 企业服务总线(ESB)模式:提供消息路由、服务注册管理、多种消息传递模式和协议支持,以及数据格式转换和日志监控功能。

八、技术栈选型

C#
  • 适用场景
    • 企业级应用:.NET框架和相关技术如Webservice、WCF适合构建大型、复杂的企业级应用。
    • 系统集成:SOA的集中式特性适合需要集成多个遗留系统的场景。
  • 技术选型
    • SOA:使用WCF进行服务开发,结合Enterprise Service Bus (ESB) 进行服务集成。
    • 微服务技术栈:
      • 编程语言框架: .Net 8 Webapi, Grpc
      • 服务注册与发现: Apollo, Consul
      • 网关: Ocelot, Zuul, Traefik
      • 依赖注入: AutoFac
      • 缓存: Redis, 本地cache
      • 日志: Nlog (ELK), Serilog
      • 身份认证: JWT, Auth2, IdentityServer4
      • 对象映射: AutoMap
      • ORM: SqlSugar, EFCore
      • 任务调度: Quartz, Hangfire
      • 消息队列: RabbitMQ, Kafka
      • 分布式事务: CAP
      • 测试: 单元测试 (NUnit), 集成测试 (MSTest)
      • 应用性能监控: New Relic, AppDynamics
      • 部署和容器化: Docker, Kubernetes
      • CI/CD: Jenkins, Azure DevOps, GitHub Actions
Go
  • 适用场景
    • 高性能和高并发:Go的并发模型适合需要处理大量并发请求的系统。
    • 微服务架构:Go的简洁性和性能使其成为构建微服务的优选语言。
  • 微服务技术栈
    • 编程语言框架: Go标准库net/http, Gin, Echo
    • 服务注册与发现: Consul, Etcd
    • 网关: Ocelot, Traefik
    • 依赖注入: Wire
    • 缓存: Redis, BigCache
    • 日志: Zap, Logrus
    • 身份认证: JWT, OAuth2
    • 对象映射: Mapstructure
    • ORM: GORM
    • 任务调度: Cron
    • 消息队列: RabbitMQ, Kafka, NATS
    • 分布式事务: SAGA
    • 测试: 单元测试 (Testing package), 集成测试 (Testify)
    • 应用性能监控: Prometheus, Datadog
    • 部署和容器化: Docker, Kubernetes
    • CI/CD: Jenkins, GitLab CI
Python
  • 适用场景
    • 快速开发:Python的易用性适合快速开发和原型制作。
    • 数据密集型应用:Python在数据分析和机器学习领域有广泛的应用。
  • 技术选型
    • SOA:使用SOAP库如zeep或suds来创建和消费SOAP服务。
    • 微服务技术栈:
      • 编程语言框架: Django REST framework, Flask
      • 服务注册与发现: Consul, ZooKeeper
      • 网关: Kong
      • 依赖注入: injector
      • 缓存: Redis, Memcached
      • 日志: Loguru, Python logging
      • 身份认证: JWT, OAuth2
      • 对象映射: Marshmallow
      • ORM: SQLAlchemy, Django ORM
      • 任务调度: Celery, APScheduler
      • 消息队列: RabbitMQ, Kafka
      • 分布式事务: SAGA
      • 测试: 单元测试 (unittest), 集成测试 (pytest)
      • 应用性能监控: New Relic, Datadog
      • 部署和容器化: Docker, Kubernetes
      • CI/CD: Jenkins, GitLab CI
Java
  • 适用场景
    • 大型企业级应用:Java的稳定性和成熟的生态系统适合构建大型企业级应用。
    • 复杂的业务逻辑:Java的强类型和面向对象特性适合处理复杂的业务逻辑。
  • 技术选型
    • SOA:使用Apache CXF或JAX-WS等框架来实现SOAP服务。
    • 微服务技术栈:
      • 编程语言框架: Spring Boot, Quarkus
      • 服务注册与发现: Eureka, Consul
      • 网关: Zuul, Spring Cloud Gateway
      • 依赖注入: Spring DI, Guice
      • 缓存: Redis, Ehcache
      • 日志: Logback, Log4j2
      • 身份认证: OAuth2, Spring Security
      • 对象映射: MapStruct, Dozer
      • ORM: Hibernate, MyBatis
      • 任务调度: Quartz, Spring Task
      • 消息队列: RabbitMQ, Apache Kafka
      • 分布式事务: Seata, Spring Cloud Alibaba
      • 测试: 单元测试 (JUnit), 集成测试 (SpringBootTest)
      • 应用性能监控: New Relic, AppDynamics
      • 部署和容器化: Docker, Kubernetes
      • CI/CD: Jenkins, GitLab CI

九、结论 📑

SOA和微服务架构各有优势,选择哪种架构取决于具体的业务需求和技术环境。微服务架构更适合需要高度灵活性和可扩展性的互联网业务场景,而SOA则适用于需要严格标准化和集成的企业环境。

十、总结 🧐

  • SOA是企业级的集中式架构,适合需要标准化集成和复杂业务流程的场景。
  • 微服务是灵活的去中心化架构,适合快速迭代和市场变化的互联网业务。

十一、记忆口诀 🎓

  • SOA: “集中式,标准化,企业级”
  • 微服务: “去中心化,灵活性,互联网”

十二、趣味记忆互联网案例故事 🌐

想象一下,一个大型的在线购物平台,它需要快速响应市场变化,比如黑色星期五的促销活动。这个平台采用了微服务架构,每个服务负责不同的功能,如用户管理、库存管理、订单处理等。当促销活动开始时,只需更新相关的服务,而不需要重新部署整个系统。这种灵活性使得平台能够快速适应市场变化,保持竞争力。

相反,一个大型银行可能采用SOA架构,因为它需要确保所有服务的标准化和安全性。银行的每个服务,如账户管理、贷款处理、支付处理等,都通过企业服务总线(ESB)进行集成,确保数据的一致性和安全性。这种集中式的管理使得银行能够更好地控制风险和合规性。

参与点评
读者朋友们,如果您在阅读过程中,对文章的质量、易理解性有任何建议,欢迎在评论区指出,我会认真改进。


http://www.ppmy.cn/embedded/116267.html

相关文章

re题(27)BUUFCTF-[MRCTF2020]Transform

BUUCTF在线评测 (buuoj.cn) 先到ida,先看一下字符串 找到主函数 int __cdecl main(int argc, const char **argv, const char **envp) {char Str[104]; // [rsp20h] [rbp-70h] BYREFint j; // [rsp88h] [rbp-8h]int i; // [rsp8Ch] [rbp-4h]sub_402230(argc, argv…

mybatisplus介绍以及使用(下)

目录 一、mybatisplus扩展功能 1、代码生成 1.1 安装插件 1.2 使用 2、逻辑删除 二、插件功能 1、分页插件 2、示例 写在前面: 在上篇的mybatisplus中介绍到了其概念,其中包括了什么是mybatisplus以及已经有了mybatis但是我们为什么使用它&#x…

Java基础知识扫盲

目录 Arrays.sort的底层实现 BigDecimal(double)和BigDecimal(String)有什么区别 Char可以存储一个汉字吗 Java中的Timer定时调度任务是咋实现的 Java中的序列化机制是咋实现的 Java中的注解是干嘛的 Arrays.sort的底层实现 Arrays.sort是Java中提供的对数组进行排序的…

uniapp|微信小程序 实现输入四位数 空格隔开

<template><page-meta :page-style"cssVar"></page-meta><view class"container"><u-navbartitle"优惠券兑换"placeholderbgColor"#fff":autoBack"true":titleStyle"{fontFamily: SourceHa…

nginx基础篇(一)

文章目录 学习链接概图一、Nginx简介1.1 背景介绍名词解释 1.2 常见服务器对比IISTomcatApacheLighttpd其他的服务器 1.3 Nginx的优点(1)速度更快、并发更高(2)配置简单&#xff0c;扩展性强(3)高可靠性(4)热部署(5)成本低、BSD许可证 1.4 Nginx的功能特性及常用功能基本HTTP服…

Kotlin while 和 for 循环(九)

导读大纲 1.1 while 和 for 循环1.1.1 while 循环1.1.2 范围和级数&#xff1a;for循环 1.1 while 和 for 循环 Kotlin 中的迭代与 Java、C# 或其他语言中的迭代非常相似 while 循环与其他语言中的传统形式相同, 只需简单了解一下即可还会发现 for 循环,其写法为 for ( in ) 是…

【图像匹配】基于SIFT算法的图像匹配,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于基于SIFT算法的图像匹配&#xff0c;用matlab实现。 一、案例背景和算法介绍 本…

频率色散效应及其与时间选择性衰落信道的联系

频率色散效应&#xff08;Frequency Dispersion Effect&#xff09;是在无线通信中&#xff0c;由于信道中的多普勒效应引起的现象&#xff0c;它会导致接收信号频谱的扩展和频率上的变化。该效应与信道的时间变化有关&#xff0c;是时间选择性衰落信道&#xff08;time-select…