架构/技术框架调研

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。


微服务间事务处理最优解决方案

      现状:无微服务间事务

      期望:其他更优解决方案,比如Seata?


Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,它由阿里巴巴开源。Seata 提供了 AT(自动事务)、TCC(尝试-确认/取消)、Saga 等事务模式,可以与Dubbo、Spring Cloud、gRPC等框架结合使用。


Dubbo 也不直接支持分布式事务,但可以通过以下方式实现:

Seata: Seata 支持 Dubbo,并提供了相应的集成插件。


阿里一般早期使用HSF, dubbo用的不如HSF多,近几年各自都有使用。



三种分布式事物模式介绍


AT 模式:

  • 是一种基于关系型数据库的分布式事务解决方案。它基于两阶段提交(2PC)协议的演变而来,但又有自己的特点。在 AT 模式中,事务协调器(TC)会记录事务的相关信息,包括分支事务的状态等
  • 适用于微服务架构下,各个服务主要基于关系型数据库进行数据操作,且事务相对简单,如电商系统中的订单创建与库存扣减等场景


TCC 模式(Try - Confirm - Cancel)

  • 相比 AT 模式,TCC 模式的灵活性更高。它可以适用于更复杂的业务场景,包括一些非数据库操作的事务,如调用外部服务、消息发送等。
  • 对业务代码的侵入性较大。开发人员需要手动编写 Try、Confirm 和 Cancel 三个阶段的具体业务逻辑,增加了开发的难度和工作量。
  • 实现难度较大,需要考虑很多复杂的情况,如幂等性(确保相同操作多次执行的结果相同)、空回滚(在没有执行 Try 阶段直接执行 Cancel 阶段的情况)、悬挂(Cancel 阶段在 Confirm 阶段之后执行)等问题
  • 适用于涉及复杂业务逻辑的分布式事务场景,如金融系统中的转账、支付结算等业务,或者需要对外部服务调用进行事务管理的场景。


SAGA 模式

  • 原理:SAGA 模式是一种将长事务拆分成多个短事务的模式。它通过一系列的本地事务来实现分布式事务。每个本地事务都有对应的补偿事务。
  • 应用场景:适用于工作流、业务流程编排等长事务场景,如电商系统中的订单全流程处理(包括下单、支付、发货、收货等多个环节)或者企业资源规划(ERP)系统中的复杂业务流程。



微服务间调用最优解决方案

现状:Feign调用、HttpURLConnection调用

期望:其他更优解决方案


dubbo框架,Dubbo 是一个 RPC(远程过程调用)框架,它的服务调用更像是本地方法调用的远程扩展。在内部通过代理等机制实现服务发现、调用和结果返回。这种调用方式相对 Feign 基于 HTTP 接口的调用来说,不太直观。在测试时,需要考虑更多的内部机制,如服务注册中心的状态、负载均衡策略、集群容错等对服务调用的影响。


Dubbo 框架本身对分布式事务有一定的支持:与 Seata 框架集成

  • Seata 是一款开源的分布式事务解决方案。Dubbo 可以与 Seata 集成来处理分布式事务。当一个 Dubbo 服务调用涉及多个数据库操作或者多个微服务的操作时,Seata 能够保证这些操作要么全部成功,要么全部失败。
  • 例如,在一个电商系统中,订单服务调用库存服务来扣减库存,这两个操作分布在不同的服务中。通过 Seata,会有一个全局事务来协调这两个分支事务(订单服务事务和库存服务事务)。Seata 采用了两阶段提交(2PC)的变种协议来实现事务的一致性。




大数据处理的解决方案(TB级就行)

现状:无系统,想做大数据处理展示系统,一部分实时性、一部分天、月、年数据写入读取

期望:一套大数据解决方案


内部使用 存储层odps、 计算层datastudio、展示层fbi报表


选型考虑的点:

1、易用性:使用要广泛,容易找到资料,上手成本。

2、可靠性:要靠谱,企业级大数据最怕的是不稳定

3、低成本:免费、开源、硬件成本



推荐的开源生态:Hadoop生态系统

Hadoop Distributed File System (HDFS)

功能: 分布式文件系统,用于存储大规模数据。 特点: 高容错性、高吞吐量、适合大规模数据存储。

YARN (Yet Another Resource Negotiator)

功能: 资源管理和调度框架,负责集群资源的分配和任务调度。 特点: 支持多种计算框架(如MapReduce、Spark、Flink等)在同一集群上运行。

MapReduce

功能: 用于大规模数据集的并行处理,支持批处理任务。 特点: 简单易用,但不适合实时或交互式查询。

Hive 功能: 数据仓库工具,提供SQL接口进行数据查询和分析。 特点: 适合大数据的批量处理和复杂查询,易于使用。

Pig 功能: 高级数据处理语言,使用Pig Latin编写脚本进行数据处理。 特点: 适合复杂的ETL操作,提供了丰富的数据处理操作符。

HBase 功能: 基于HDFS的分布式NoSQL数据库,支持实时读写访问。 特点: 高性能、可扩展性强,适合需要低延迟访问的应用。

ZooKeeper 功能: 分布式协调服务,用于维护配置信息、命名、分布式同步等。 特点: 提供高可用性和一致性保证。

Oozie 功能: 工作流调度系统,用于管理Hadoop作业的依赖关系和执行顺序。 特点: 支持复杂的作业调度和监控。

Sqoop 功能: 用于在Hadoop和关系型数据库之间传输数据。 特点: 支持导入和导出数据,简化数据迁移过程。

Flume 功能: 日志收集系统,用于高效地收集、聚合和移动大量日志数据。 特点: 可靠性高,支持多种数据源和目标。

Kafka 功能: 分布式消息队列系统,用于实时数据流的传输和处理。 特点: 高吞吐量、低延迟,支持发布/订阅模式。

Spark 功能: 大规模数据处理框架,支持批处理、流处理、机器学习和图计算。 特点: 性能优越,易于编程,支持多种语言(Scala、Java、Python、R)。

Flink 功能: 实时流处理和批处理框架,提供低延迟和高吞吐量的数据处理能力。 特点: 支持事件时间处理,适合复杂的流处理场景。


Hadoop生态的优点:

高可靠:HDPS 冗余存储

灵活:多种计算框架,与其他框架结合使用

低成本:对机器硬件配置要求不高




分库分表的必要前提,最优解决方案

现状:分库分表、数据库间dblink用连接,会造成system空间很大等问题

期望:其他什么好的方案


必要性评估:

  • 数据量和性能瓶颈:当单表的数据量达到一定规模,比如数百万行甚至更多,或者数据库的读写请求压力过大,导致查询性能下降、响应时间变长,影响到业务的正常运行时,才需要考虑分库分表。这是最主要的前提,如果当前数据库的性能和数据量在可接受范围内,分库分表可能会带来不必要的复杂性。
  • 业务可拆分性:业务逻辑上能够支持数据的拆分。如果业务紧密耦合,数据之间的关联关系非常复杂,分库分表可能会导致业务逻辑难以实现,或者需要大量的额外工作来处理跨库跨表的关联查询。因此,在考虑分库分表之前,需要对业务进行梳理和分析,确保业务能够适应数据的拆分。


数据库层面的解决方案

  • 垂直分库
  • 概念:按照业务的不同将一个数据库拆分成多个独立的数据库,每个数据库中包含相关业务的数据表。例如,将电商系统中的用户信息、商品信息、订单信息等分别存储在不同的数据库中。
  • 优点:可以降低业务之间的耦合度,使得每个业务模块都有自己独立的数据库,便于管理和维护;可以根据不同业务的特点进行针对性的优化,比如为用户模块的数据库配置更高的内存,为订单模块的数据库配置更高的磁盘 I/O 性能;提高了系统的安全性,不同业务的数据相互隔离,减少了数据泄露的风险。
  • 缺点:无法解决单表数据量过大的问题;跨库的业务关联查询会变得复杂,需要通过接口调用或者数据同步等方式来解决。
  • 垂直分表
  • 概念:基于数据库中的 “列” 进行拆分,将一个表中不经常使用或字段长度较大的字段拆分到扩展表中,原表只保留经常使用的核心字段。例如,对于用户表,可以将用户的基本信息(如用户名、密码、手机号等)保留在原表,而将用户的详细地址、个人简介等信息拆分到扩展表。
  • 优点:可以减少单个表的字段数量,提高查询性能,避免跨页问题;对于字段长度较大的字段,拆分后可以节省存储空间;使表的结构更加清晰,便于开发和维护。
  • 缺点:同样会增加业务逻辑的复杂性,对于需要同时查询多个字段的业务场景,需要进行表的关联操作。


研发态尝尝借助中间件进行数据操作,降低编码复杂度。

  • MyCat
  • MyCat 是一个较为知名的开源分布式数据库中间件,基于 Java 编写,支持 MySQL 协议,可以作为 MySQL 的代理服务器使用。它不仅支持 MySQL 数据库的分库分表、读写分离等功能,还可以通过 JDBC 协议与 Oracle 等主流数据库进行通信。对于 Oracle 数据库,MyCat 可在一定程度上实现对其数据的分片管理和访问控制。
  • 优点是易于部署和使用,对于项目来说相对透明,如果遇到升级等操作,只需要在中间件层面进行即可;具有跨语言、跨平台、跨数据库的通用性。
  • 缺点是 SQL 支持相对较弱,可能需要对 SQL 语句进行一定的改写和优化。
  • ShardingSphere
  • ShardingSphere 是一款开源的分布式数据库中间件,提供了分库分表、读写分离、分布式事务等功能。它支持多种数据库,包括 MySQL、Oracle、SQL Server、PostgreSQL 等,并且可以与现有的数据库系统无缝集成。
  • 该中间件由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar 三个主要组件组成,通过数据分片和路由来实现分库分表,原理是将数据划分为多个片段,每个片段存储在不同的数据库实例或数据表中,然后根据数据的分片规则将请求路由到对应的数据库实例或数据表上。
  • 优点是具有灵活的扩展性、高可用性,并且能够简化开发和维护。


使用数据仓库/大数据引擎查询

  • hive
  • presto
  • clickhouse



大文本的存储解决方案

现状:新系统产品想页面上输入纯文字会超过数据库字段最大值,用LOB类型处理会增加程序处理的复杂性

期望:大文本的存储取得方案


1、这很正常,根据业务需求

2、使用BLOB

3、对于特别大的文本,及时KB,几百KB,几MB。推荐使用对象存储服务(如AWS S3、Google Cloud Storage、阿里云OSS等)来存储大文本。这些服务提供了高可用性和可扩展性,并且可以通过API方便地进行管理和访问。

实现步骤:

上传文件:将大文本内容上传到对象存储服务。

获取URL:获取上传文件的URL。

存储URL:在数据库中存储文件的URL



Oracle统计信息设置优化方案

现状:数据量大了会造成统计信息过期,自动整理统计信息会失效

期望:如何防止自动整理统计信息会失效


能否尝试做个监控?


查询失效的统计信息 失效统计信息指数据已经变化显著,但统计信息未更新。这可以通过查询DBA_TAB_STATISTICS视图并结合DBA_TAB_MODIFICATIONS视图来检查。




数据缓存处理解决方案

现状:数据缓存基本没用

期望:推荐比较好的spring的缓存解决方案


注意事项:缓存中不要存储重要数据。


推荐redis,支持多种集群模式

不推荐memcache,可扩展性差


数据类型支持

  • Redis:支持丰富的数据类型,如字符串、哈希表、列表、集合、有序集合等。这使得开发者可以根据不同的业务需求选择合适的数据结构来存储和操作数据,例如可以使用列表实现队列、使用集合进行去重操作、使用有序集合实现排行榜等,大大提高了数据处理的灵活性和效率。
  • Memcache:主要支持简单的键值对存储,数据类型较为单一。对于复杂的数据结构,需要在应用层进行额外的处理和转换,增加了开发的复杂度。

数据持久化

  • Redis:提供了两种持久化方式,RDB(Redis Database)和 AOF(Append Only File)38。RDB 是定期将内存中的数据快照保存到磁盘上,AOF 则是将所有的写操作命令记录到日志文件中,以便在服务器重启时可以重新执行这些命令来恢复数据。这使得 Redis 在数据的可靠性和持久性方面有很大的优势,即使服务器发生故障,也可以恢复大部分的数据。
  • Memcache:数据仅存储在内存中,不支持持久化功能7。一旦服务器宕机或重启,所有的数据都会丢失,因此 Memcache 更适合用于缓存一些临时的、对数据丢失不敏感的数据。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
6天前
|
监控
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
通过引入稀疏化和角色多样性,SMoA为大语言模型多代理系统的发展开辟了新的方向。
21 6
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
|
3天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
17 7
|
1天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
15 4
|
2天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
9 3
|
4天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
23 5
|
2天前
|
运维 Kubernetes Cloud Native
云原生技术在现代应用架构中的实践与挑战####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在实际项目中的应用案例,分析了企业在向云原生转型过程中面临的主要挑战及应对策略。不同于传统摘要的概述性质,本摘要强调通过具体实例揭示云原生技术如何促进应用的灵活性、可扩展性和高效运维,同时指出实践中需注意的技术债务、安全合规等问题,为读者提供一幅云原生技术实践的全景视图。 ####
|
6天前
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####
|
3天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
1天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
10 1
服务架构的演进:从单体到微服务的探索之旅