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

一、引言 📖

在现代软件开发中,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.rhkb.cn/news/428231.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dev c++输出中文乱码解决 printf乱码解决

把编码换成utf8就行 打开eiditor options

SpringBoot实现OAuth客户端

背景 5 月份的时候,我实践并整理了一篇博客:SpringBoot搭建OAuth2,该博客完成之后,本以为能对OAuth2的认证机制更加清晰,但我却觉得自己更“迷惘”了。 抛开我在项目中积累的浅薄经验不谈,单从在网…

生信初学者教程(八):数据收集

文章目录 数据分布表达谱数据最终数据分布自动下载GSE14520下载GSE149614下载其它数据在确定研究疾病为肝细胞癌**(Liver Hepatocellular Carcinoma: HCC)**后,系统地进行了文献回顾,专注于搜索与HCC相关的荟萃分析文章,以获取该领域的研究动态和已有成果。为了支持的研究…

【专题】2024新能源企业“出海”系列之驶向中东、东南亚报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p37698 在“双碳”目标引领下,中国新能源产业近年迅猛发展,新能源企业凭借技术革新、政策支持与市场驱动实现快速增长,在产业链完备、技术领先、生产效能及成本控制等方面优势显著。面对国内外环境…

2024年“华为杯”研赛第二十一届中国研究生数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

PowerBI-l5-CALENDAR创建日期表

CALENDAR创建日期表 方法1 Table CALENDARAUTO() 方法2 自定义日期 Table CALENDAR(date(2021,6.20),date(2021,6.24))

工作中遇到的问题总结(1)

文章目录 第一题问题描述解决思路 第二题问题描述解决思路核心大表如何优化数据迁移过程是怎么样的如何将流量从旧系统迁移到新系统上 第三题问题描述解决思路 第四题问题描述解决思路方案一:双写机制方案二:基于时间戳的分流机制方案三:灰度…

再次理解UDP协议

一、再谈端口号 在 TCP / IP 协议中,用 "源 IP", "源端口号", "目的 IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -n 查看) 我们需要端口号到进程的唯一性,所以一个…

李沐 过拟合和欠拟合【动手学深度学习v2】

模型容量 模型容量的影响 估计模型容量 难以在不同的种类算法之间比较,例如树模型和神经网络 给定一个模型种类,将有两个主要因素: 参数的个数参数值的选择范围 VC维 线性分类器的VC维 VC维的用处 数据复杂度 多个重要因素: 样…

Linux基础命令——账户简单管理

一.添加用户 命令:useradd username eg:useradd yy 添加用户名为yy的用户 注意: inux中如果新建用户的时候没有用-d参数指定家目录,那么用户的家目录是什么? 指定的默认/home下面,以username命名 二.修改账户口令/密码 命令&…

solidwork找不到曲面

如果找不到曲面 则右键找到选项卡,选择曲面

使用HTML和CSS制作网页的全面指南

目录 引言 一、理解HTML 1. 什么是HTML? 2. HTML文档的基本结构 3. 常用的HTML标签 4. 示例:创建一个简单的HTML页面 二、理解CSS 1. 什么是CSS? 2. CSS的使用方式 3. CSS选择器和属性 4. 常用的CSS属性 三、创建网页的步骤 1. 规…

YOLOv8改进系列,YOLOv8替换主干网络为PP-HGNetV2(百度飞桨视觉团队自研,助力涨点)

摘要 PP-HGNetV2(High Performance GPU Network V2) 是百度飞桨视觉团队自研的 PP-HGNet 的下一代版本,其在 PP-HGNet 的基础上,做了进一步优化和改进,最终在 NVIDIA GPU 设备上,将 “Accuracy-Latency Balance” 做到了极致,精度大幅超过了其他同样推理速度的模型。其在…

【有啥问啥】弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法

弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法 引言 在视觉大模型领域,如何有效利用海量无标签图像数据是一个亟待解决的问题。传统的深度学习模型依赖大量人工标注数据&…

LeetCode118:杨辉三角

题目链接&#xff1a;118. 杨辉三角 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution {public:vector<vector<int>> generate(int numRows) {vector<vector<int>> dp(numRows);vector<int> temp(numRows);for (int i 0; i &…

【PyTorch】autograd与逻辑回归

autograd – 自动求导系统 torch.autograd autograd torch.autograd.backward 功能&#xff1a;自动求取梯度 tensor&#xff1a;用于求导的张量&#xff0c;如lossretain_graph&#xff1a;保存计算图create_graph&#xff1a;创建导数计算图&#xff0c;用于高阶求导gra…

【计算机网络】TCP 协议——详解三次握手与四次挥手

文章目录 一、引言二、TCP1、TCP 的数据格式2、TCP 的三次握手3、TCP 的四次挥手4、TCP 的全双工通信 三、TCP 的状态转换1、TCP 连接的建立&#xff08;三次握手&#xff09;状态2、TCP 连接的终止&#xff08;四次挥手&#xff09;状态3、TCP 异常情况 一、引言 TCP与UDP的区…

外观模式详解:如何为复杂系统构建简洁的接口

&#x1f3af; 设计模式专栏&#xff0c;持续更新中 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 外观模式 外观模式&#xff08;Facade Pattern&#xff09;为子系统中的一组…

基于协同过滤算法+PHP的新闻推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤算法PHPMySQL的新…

Liveweb视频汇聚平台支持GB28181转RTMP、HLS、RTSP、FLV格式播放方案

GB28181协议凭借其在安防流媒体行业独有的大统一地位&#xff0c;目前已经在各种安防项目上使用。雪亮工程、幼儿园监控、智慧工地、物流监控等等项目上目前都需要接入安防摄像头或平台进行直播、回放。而GB28181协议作为国家推荐标准&#xff0c;目前基本所有厂家的安防摄像头…