科技颠覆者 发表于 2024-9-26 12:19:41

基于Linux和C++环境,实现RPC分布式集群聊天服务器(项目介绍)

MrChat(我取名字一向很可以

   项目源码GitHub地址:https://github.com/Ye2273/MrChat
开发环境:ubuntu20.04 linux环境
编程语言:C++
编译工具:CMake
序列化工具:Protocol Buffers
RPC框架:自研的MyRpc框架
数据库:MySQL、Redis
网络库:muduo库
负载均衡器:nginx
简介

该项目是通过应用之前写的Rpc框架完成的,可能另有很多内容须要完善,如今自己开了几个节点测试了一下,功能都正常。
如今打算先整理一下项目过程中的思路,和一些关键的技术栈知识,另有项目过程中遇到的问题。
还是捋一下好,不然写的东一块西一块~~
   后续可能还会参加一些模块,比方:参加redis的缓存机制,MySQL表结构的优化等
1、项目介绍

1.1、整个聊天系统的框架图

https://i-blog.csdnimg.cn/direct/56b72d8b4fc14403b5f26710dc7c2d49.png#pic_center
1.2、”分布式”,“集群”

整个项目想要表现的核心头脑和功能主要是这两个方面
分布式:

一个工程拆分了很多模块,每一个模块独立摆设运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节点的并发要求,对一个节点可以再做节点模块集群摆设。
https://i-blog.csdnimg.cn/direct/df8332ac8412422487e6f842c7d376c8.png#pic_center
业务服务器群

不同的业务逻辑(如注册登录、挚友管理、群组管理、聊天)被分布在不同的服务器上。
这种操持实现了业务的分离,使得每个服务器只专注于处理特定类型的任务,降低了单一服务器的负载压力,并提高了系统的可扩展性。
ZooKeeper

每个事务服务器在启动时都会将自身信息注册到ZooKeeper中。网关服务器通过ZooKeeper获取每个事务服务器的服务地址,从而实现服务的动态发现和调用。这一机制确保了系统能够在服务变更(如扩展或故障)时自动调整,从而保持系统的稳定性和可用性。
网关服务器

RPC远程调用的核心所在,在业务服务器这边扮演“client”的角色。而在客户端角度则扮演网关接口服务器的角色。
1. 客户端请求的入口



[*]同一接入点:网关服务器作为客户端与后端服务之间的桥梁,接收来自客户端的所有请求。客户端不须要直接与多个事务服务器交互,而是通过网关服务器来进行同一访问。这简化了客户端的逻辑,也增强了系统的安全性和可维护性。
2. 请求的分发和路由



[*]动态路由:当网关服务器接收到客户端的请求后,会根据请求的类型,动态选择合适的事务服务器来处理请求。这个选择过程依赖于从ZooKeeper获取的最新服务地址信息,从而实现请求的准确路由。这种动态路由机制可以应对事务服务器的增长或减少,保证了系统的机动性。
集群

集群的操持通过使用负载均衡、消息队列和集群数据库,使得系统在处理大量并发请求时能够保持高效和稳定的运行。
   https://i-blog.csdnimg.cn/direct/4c49d4c817dd43eab0fc2e16e991561e.png#pic_centerhttps://i-blog.csdnimg.cn/direct/d822aea2e50f43928797ea51d32a9405.png#pic_centerNginx负载均衡:

Nginx在项目中扮演了负载均衡器的角色,它可以将来自客户端的请求匀称地分发到后端的网关接口类服务器上。这种操持不仅提高了系统的并发处理本领,还增强了系统的可用性,因为单个接口类服务器的故障不会导致系统不可用。
Redis消息队列:

Redis被用于处理跨服务器的消息通报问题。通过Redis的发布/订阅机制,不同服务器上的用户可以实现及时通信,这在聊天服务中尤为关键。这种操持使得系统即使在多服务器分布的环境下,仍然能够保证消息的即时通报和处理。
MySQL集群:

数据的存储被会合在MySQL数据库中,而且通过合理的操持确保了数据的一致性和可靠性。事务服务器通过与数据库的交互,完成对用户数据和群组数据的长期化存储,这保证了数据的安全性和系统的可规复性。
   仅供学习之用~~
PS:这只是个人项目
知识点

集群

**集群(Cluster)**的概念在盘算机科学中指的是一组独立的盘算机(通常称为节点或服务器)通过网络毗连在一起,共同工作以完成特定任务。集群系统旨在通过协调这些盘算机的工作,提供更高的性能、可用性、可扩展性和容错本领。
主要特点:


[*]性能提升(Performance Enhancement):

[*]集群系统可以将任务分配给多个节点并行处理,从而显著提升盘算速率和处理本领,尤其在大规模数据处理和高性能盘算中表现突出。

[*]高可用性(High Availability):

[*]集群系统通过冗余操持,确保即使某些节点出现故障,系统仍然能够继续运行。其他节点可以接管失效节点的任务,从而提高系统的可靠性和连续运行本领。

[*]可扩展性(Scalability):

[*]集群的架构操持通常具有良好的可扩展性。通过增长更多的节点,可以线性或靠近线性地提升系统的整体性能,以应对不断增长的工作负载。

[*]容错性(Fault Tolerance):

[*]集群系统中的节点之间通常具有某种程度的冗余。这样,在一个或多个节点发生故障时,系统可以自动调整并重新分配任务,以确保服务的连续性。

集群的分类:


[*]负载均衡集群(Load Balancing Cluster):

[*]这种集群的主要目的是通过负载均衡技术将任务或请求匀称地分配到多个节点上,防止单个节点超载,提升整体系统的处理本领和相应速率。

[*]高可用性集群(High Availability Cluster):

[*]这种集群的操持重点在于保证系统的连续可用性。通常采取主从(active-passive)或双活(active-active)的方式,当主节点出现故障时,备用节点可以立即接管其工作。

[*]高性能盘算集群(High Performance Computing Cluster, HPC):

[*]HPC 集群旨在通过多个节点的并行盘算本领来处理大规模复杂盘算任务,常用于科学盘算、模拟、数据分析等范畴。

[*]存储集群(Storage Cluster):

[*]这种集群专注于数据的存储和管理,通过多个节点提供同一的存储服务,通常用于云存储、大数据处理等场景。

集群的应用场景:



[*]Web服务器集群:通过负载均衡和冗余操持,提升网站的并发处理本领和可靠性。
[*]数据库集群:通过数据复制和分片,提供高可用性和高性能的数据库服务。
[*]大数据处理集群:使用分布式盘算技术,如Hadoop集群,处理和分析海量数据。
总结:

集群是通过多台盘算机协同工作来增强系统的性能、可用性和可靠性的一种告急技术。它在现代盘算机系统中被广泛应用,特别是在须要处理大量并发请求、高性能盘算或保障服务稳定性和连续性的场景中。
分布式

**分布式(Distributed)**的概念在盘算机科学中指的是将盘算任务、数据存储或服务功能分散到多个独立的盘算节点(通常是服务器或盘算机)上,通过网络进行协调和合作来完成整体任务。分布式系统旨在通过资源的分散和任务的并行处理,提升系统的可扩展性、容错性和性能。
分布式系统的主要特点:


[*]资源分布性:

[*]在分布式系统中,盘算资源、数据存储和应用服务分布在多个物理或逻辑上分散的节点上。这些节点可以位于不同的地理位置,通过网络毗连在一起。

[*]并行处理:

[*]分布式系统将任务分解为多个子任务,并行地在不同节点上处理。这种并行处理可以显著提高任务处理的速率和服从。

[*]容错性和可靠性:

[*]由于系统资源是分散的,分布式系统具有较强的容错性。如果某个节点发生故障,其他节点可以继续工作,确保系统的整体稳定性和连续性。

[*]可扩展性:

[*]分布式系统可以通过增长新的节点来提升处理本领和存储容量,从而适应业务规模的增长。系统的扩展往往可以实现线性或靠近线性的性能提升。

[*]异构性:

[*]分布式系统中的节点可以是不同的硬件装备或运行不同操作系统的服务器。系统操持通常答应这种异构性,确保不同类型的资源能够协同工作。

分布式系统的类型:


[*]分布式盘算系统:

[*]这种系统将一个复杂的盘算任务分解为多个子任务,分配到不同的节点上并行盘算。常见的例子包罗MapReduce、Hadoop等大数据处理框架。

[*]分布式存储系统:

[*]这种系统将数据分布存储在多个节点上,通过冗余和分片技术来确保数据的安全性和可用性。常见的例子包罗分布式文件系统(如HDFS)、分布式数据库(如Cassandra)。

[*]分布式应用系统:

[*]这种系统将应用服务分布在不同的服务器上,通过服务之间的协作完成整体业务功能。微服务架构是典范的分布式应用系统,此中每个微服务负责特定的业务功能。

[*]分布式消息队列:

[*]这种系统用于在不同节点之间通报消息,确保消息的可靠传输和处理。常见的例子包罗Apache Kafka、RabbitMQ等。

分布式系统的应用场景:



[*]Web应用:通过分布式架构,将应用的不同模块(如用户管理、订单处理、付出系统)分布在不同的服务器上,提升系统的机动性和扩展性。
[*]大数据处理:通过分布式盘算框架处理海量数据,快速完成数据分析、机器学习模型训练等任务。
[*]云盘算:通过分布式架构提供弹性的盘算资源和存储本领,用户可以根据需求动态扩展资源。
分布式系统面临的挑衅:


[*]一致性问题:如安在多个节点之间保持数据的一致性,是分布式系统的核心挑衅之一。CAP理论(Consistency, Availability, Partition tolerance)形貌了在分布式系统中,如安在一致性、可用性和分区容忍性之间衡量。
[*]网络耽误和故障:分布式系统依赖网络进行通信,因此网络耽误、数据包丢失或节点间的网络分区都会对系统的性能和稳定性产生影响。
[*]数据复制和同步:在多个节点上分布存储数据时,须要考虑如何同步和复制数据,以确保所有节点上数据的一致性和完整性。
[*]负载均衡:如何将任务和数据匀称分配到各个节点,避免某些节点过载也是一个告急的操持问题。
总结:

分布式系统通过将盘算和数据分布在多个节点上,使用并行处理、资源共享和容错机制,来实现更高的性能、可用性和扩展性。它被广泛应用于现代盘算场景,尤其是在处理大规模数据、构建复杂应用系统以及提供云服务的范畴。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 基于Linux和C++环境,实现RPC分布式集群聊天服务器(项目介绍)