架构问题:技术选型

news2024/11/25 2:02:31

1. 几款数据库特性及如何选型

1.MySQL:一种常用的开源关系型数据库管理系统,可以快速访问大量数据,并支持多用户同时访问。其最大的优点在于成本低,易于安装和配置,因此被广泛应用于各种中小型企业和网站。支持读写分离、分库分表、事务、索引。
适用场景:Web网站系统、日志记录系统、数据仓库系统、嵌入式系统
2.Oracle:全球最大的商业数据库软件公司之一,提供各种可扩展的解决方案,适用于从小型应用到大型企业级应用。它具有很高的可靠性、安全性和性能优化能力,但价格较高。
3.SQL Server:微软推出的关系型数据库管理系统,具有高可用性和可扩展性,并集成了很多BI和分析工具。适用于大型企业和中小型企业。
4.MongoDB:一种NoSQL数据库,非常适合处理大量非结构化数据。具有高可扩展性、高性能和易于部署的优点,被广泛应用于互联网领域。MongoDB最大的特点是表结构灵活可变,字段类型可以随时修改,MongoDB不需要定义表结构这个特点给表结构的修改带来了极大的方便,但是也给多表查询、复杂事务等高级操作带来了阻碍。
使用场景:MongoDB很适合那些表结构经常改变,数据的逻辑结构没又没那么复杂不需要多表查询操作,数据量又比较大的应用场景。例如游戏中存储用户信息。
5.Redis:一种开源的NoSQL数据库,以其高速读写性能和卓越的可靠性而闻名。适用于实时数据处理和高速缓存。
6.PostgreSQL:一种开源的关系型数据库管理系统,具有丰富的功能和高度可靠性,被广泛应用于大型企业级应用。
7.Cassandra:一个开源分布式NoSQL数据库系统,被广泛应用于分布式环境中的大数据应用,具有高度可扩展性和高度可用性。
8.Amazon Redshift:AWS提供的云数据仓库,适用于大规模数据分析。具有高度可扩展性和高度可用性,并支持广泛的数据集成。
9.HBase:HBase继承了Hadoop项目的最大优点,那就是对海量数据的支持,以及极强的横向(存储容量)扩展能力。
使用场景:用于解决大数据场景的海量存储问题。HBase的列式存储特点带来了对海量数据的容纳能力,因此非常适合数据量极大,查询条件简单,列与列之间联系不大的轻查询应用场景。最典型的比如搜索引擎所使用的网页数据库。HBase不适合数据结构复杂,且需要复杂查询的应用场景
10.ES:ES的特点,正如其名,那就是搜索。严格的说,ES不是一个数据库,而是一个搜索引擎,ES的方方面面也都是围绕搜索设计的。 ES支持全文搜索。ES也有很多的短处,最明显的就是字段类型无法修改、写入性能较低延迟高和高硬件资源消耗。ES的全文搜索特性使它成为构建搜索引擎的利器。除此之外,ES很好的支持了复杂聚合查询这一特点还使得ES非常适合拿来作数据分析使用,配套ELK,可以提供从日志收集到数据可视化分析的一条龙服务。
总结:

  • 如果你是一家中小型企业,需要存放各种关系型数据,会有频繁的增删改查和聚合查询,需要事务的支持,那么首选MySql。
  • 如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;
  • 如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时 还需要做一些聚合查询,选MongoDB;
  • 如果你需要构造一个搜索引擎或者你想搞一个看着高大上的数据可视化平台,并且你的数据有一定的分析价值或者你的老板是土豪,选ElasticSearch;
  • 如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,那么选HBase。
    参考:大数据时代MongoDB、ES、Redis、HBase这四种数据库你应该懂

2. 几款缓存特性及如何选型

redis支持5种数据类型,支持持久化,支持m/s数据备份等。
memcache内容放在内存中,只支持简单k/v数据。
使用场景:

  • 如果有持久方面的需求或对数据类型和处理有要求的应该选择redis。
  • 如果简单的key/value 存储应该选择memcached。
    在这里插入图片描述

3. 几款消息中间件特性及如何选型

消息队列的选型主要侧重以下几点:
HA:自身的高可用性保障,避免消息队列的引入而影响整体服务的可用性
高吞吐:在面对海量数据写入能否保持一个相对稳定、高效的数据处理能力
功能丰富性:是否支持延迟消息、事务消息、死信队列、优先级队列等
消息广播:是否支持将消息广播给消费者组或者一组消费者
消息堆积能力:在数据量过大时,是否允许一定消息堆积到broker
数据持久性:数据持久化策略的采用,也决定着数据在宕机恢复后是否会丢失数据
重复消费:是否支持ack机制,在消费者未正确处理消息时,支持重新消费
消息顺序性:针对顺序消费的场景保证数据按写入时间的顺序性

(一)Kafka

优点:

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
  • 可扩展性:kafka集群支持热扩展;
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
  • 容错性:允许集群中节点故障,一个数据多个副本,少数机器宕机,不会丢失数据;
  • 高并发:支持数千个客户端同时读写。

缺点:

  • 分区有序:仅在同一分区内保证有序,无法实现全局有序;
  • 无延时消息:消费顺序是按照写入时的顺序,不支持延时消
  • 重复消费:消费系统宕机、重启导致offset未提交;
  • Rebalance:Rebalance的过程中consumer group下的所有消费者实例都会停止工作,等待Rebalance过程完成。

使用场景:

  • 日志收集:大量的日志消息先写入kafka,数据服务通过消费kafka消息将数据落地。
  • 消息系统:解耦生产者和消费者、缓存消息等。
  • 用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到数据库。
  • 运营指标:记录运营、监控数据,包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
  • 流式处理:比如spark streaming。

(二)RabbitMQ

优点:

  • 基于AMQP协议:除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器。
  • 健壮、稳定、易用。
  • 社区活跃,文档完善。
  • 支持定时消息。
  • 可插入的身份验证,授权,支持TLS和LDAP。
  • 支持根据消息标识查询消息,也支持根据消息内容查询消息。

缺点:

  • erlang开发源码难懂,不利于做二次开发和维护。
  • 接口和协议复杂,学习和维护成本较高。

使用场景:

  • erlang有并发优势,性能较好。虽然源码复杂,但是社区活跃度高,可以解决开发中遇到的问题。
  • 业务流量不大的话可以选择功能比较完备的RabbitMQ。

(三)RocketMQ

优点:

  • 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型。
  • 顺序队列:在一个队列中可靠的先进先出(FIFO)和严格的顺序传递。
  • 支持拉(pull)和推(push)两种消息模式。
  • 单一队列百万消息的堆积能力。
  • 支持多种消息协议,如JMS、MQTT等。
  • 分布式横向扩展架构
  • 满足至少一次消息传递语义。
  • 提供丰富的Dashboard,包含配置、指标和监控等。
  • 支持的客户端,目前是java、c++及golang。

缺点:

  • 社区活跃度一般。
  • 延时消息:开源版不支持任意时间精度,仅支持特定的level。

使用场景:

  • 为金融互联网领域而生,对于可靠性要求很高的场景。

(四)Pulsar

Apache Pulsar是Apache软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,被看作是云原生时代实时消息流传输、存储和计算最佳解决方案。Pulsar是一个pub-sub (发布-订阅)模型的消息队列系统。
优点:

  • 灵活扩容。
  • 无缝故障恢复。
  • 支持延时消息。
  • 内置的复制功能,用于跨地域复制,如灾备。
  • 支持两种消费模型:流(独享模式)、队列(共享模式)。

参考:带你玩转消息队列和相关选型!

4. 几款注册中心特性及如何选型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React 全栈体系(九)

第五章 React 路由 一、相关理解 1. SPA 的理解 单页 Web 应用(single page web application,SPA)。整个应用只有一个完整的页面。点击页面中的链接不会刷新页面,只会做页面的局部更新。数据都需要通过 ajax 请求获取, 并在前端…

软考 -- 计算机学习(2)

文章目录 一、安全性知识1.1 信息安全和信息系统安全1.2 信息安全技术1.3 网络安全技术 二、多媒体技术三、软件工程基础知识3.1 信息系统生命周期3.2 软件过程模型3.3 信息系统开发方法3.4 系统分析和设计概述3.5 结构化开发方法3.6 系统运行与维护 四、项目管理4.1 进度管理4…

(避开网上复制操作)最详细的树莓派刷机配置(含IP固定、更改国内源的避坑操作、SSH网络登录、VNC远程桌面登录)

一、准备工作 SD卡格式化 二、 树莓派系统环境搭建(官方) 官方镜像 1.1、 必备的配件 读卡器, 内存卡(强烈推荐 32GB 内存卡, #lite 命令行界面版本至少需要 8G, 图形化带桌面版镜像需要 16GB&#xf…

Java之异常的详细解析

1. 异常 1.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况,最…

web自动化jenkins+git+allure

jenkins -- 持续集成平台 -- 持续集成的场景 -- 【持续】【集成】自动执行你的任务 --- 定时任务 -- 结果通知 -- 报告展示安装jenkins --- http://testingpai.com/article/16092251322041、工作空间 - jenkins的工作空间job任务的工作空间 -- 给任务存放数据/资料 -- 生成的…

闭着眼睛安装Neoj4版本(5.12.0 Community windows)

1.安装 Java SE 17.0.5 (及以上,建议和我一样),安装完配置环境变量,成功标志(cmd输出java -version的内容) 1.上Neo4j Download Center - Graph Database & Analytics 3. 4.进入cmd &#…

tcpdump常用命令

需要安装 tcpdump wireshark ifconfig找到网卡名称 eth0, ens192... tcpdump需要root权限 网卡eth0 经过221.231.92.240:80的流量写入到http.cap tcpdump -i eth0 host 221.231.92.240 and port 80 -vvv -w http.cap ssh登录到主机查看排除ssh 22端口的报文 tcpdump -i …

Java拓展——常见数据结构(数组,栈,链表,树,图)

Java基础11——数据结构 文章目录 Java基础11——数据结构数据结构常见的数据结构数组栈栈简介如何创建一个类实现栈的功能?**栈使用场景**队列队列简介如何实现?**队列分类**链表**单链表****循环链表****双向链表****双向循环链表****链表使用场景****数组** **vs** **链表…

听GPT 讲Istio源代码--cni

在 Istio 项目中, cni: CNI 目录包含了 Istio CNI 插件的相关代码和配置文件。CNI(Container Network Interface)是一个用于配置容器网络的接口规范。Istio CNI 插件用于将 Istio 的网络功能集成到容器运行时环境中,以便实现对微服…

Nvidia计算卡扫盲

title: Nvidia计算卡扫盲 sidebarDepth: 4 layout: AtmLayout GPU 大的方面来讲, 由显存计算单元组成; 显存 GPU板卡上的DRAM容量大,速度慢,CPU和GPU都可以访问 计算单元 Streaming Multiprocessor,执行计算, 每个…

【FAQ】安防监控系统/视频云存储/监控平台EasyCVR服务器解释器出现变更该如何修改?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

开发高性能知识付费平台:关键技术策略

引言 在构建知识付费平台时,高性能是确保用户满意度和平台成功的关键因素之一。本文将探讨一些关键的技术策略,帮助开发者打造高性能的知识付费平台。 1. 前端性能优化 使用CDN加速资源加载 使用内容分发网络(CDN)来托管和加…

解决Office Word另存为PDF卡死的问题

今天突然间遇到这个问题,在网上找了好久都没有想要的答案。后来一步一步摸索终于找到了问题所在,希望这篇文章能帮助有同样问题的各位! 1.问题 当word文件点击另存为PDF格式时,下一刻光标变为加载状态,并且一直在转圈…

数据结构----链式栈

目录 前言 链式栈 操作方式 1.存储结构 2.初始化 3.创建节点 4.判断是否满栈 5.判断是否空栈 6.入栈 7.出栈 8.获取栈顶元素 9.遍历栈 10.清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法,(链接:线性表-----栈(栈…

【初阶数据结构】——堆的引入和实现二叉树

目录 前言 一、二叉树的顺序结构及实现 1.1二叉树的顺序结构 1.2堆的结构 二、堆的实现 2.1堆向上调整算法(堆的插入) 2.2堆向下调整算法(堆的删除) 2.3建堆的时间复杂度 2.4堆的创建 2.5堆的初始化和空间的销毁 2.6堆…

【数据结构】图的基本概念,图的存储结构(邻接矩阵;邻接表;十字链表;邻接多重表)

欢~迎~光~临~^_^ 目录 1、图的基本概念 2、图的存储结构 2.1邻接矩阵 2.2邻接表 2.3十字链表 2.4邻接多重表 2.5图的四种存储结构的对比 1、图的基本概念 图是由一组节点(通常称为顶点)和一组连接这些节点的边(通常称为边&#xff0…

注册中心的学习

一、什么是注册中心? 注册中心主要有三种角色: 1.1、服务提供者(RPC Server): 在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。 1.2、服务消费者(…

Qt5开发及实例V2.0-第七章-Qt图形视图框架

Qt5开发及实例V2.0-第七章-Qt图形视图框架 第7章 Qt 5图形视图框架7.1 图形视图体系结构7.1.1 Graphics View的特点7.1.2 Graphics View的三元素7.1.3 GraphicsView的坐标系统 7.2 【实例】:图形视图7.2.1 飞舞的蝴蝶7.2.2 地图浏览器7.2.3 图元创建7.2.4 图元的旋转…

大数据-kafka学习笔记

Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输…

Python 图形化界面基础篇:创建顶部菜单

Python 图形化界面基础篇:创建顶部菜单 引言 Tkinter 库简介步骤1:导入 Tkinter 模块步骤2:创建 Tkinter 窗口步骤3:创建顶部菜单栏步骤4:处理菜单项的点击事件步骤5:启动 Tkinter 主事件循环 完整示例代码…