分布式服务器
- 什么是分布式?
- 分布式VS集中式VS并行
- 分布式的应用
- 分布式服务器特点
- 分布式服务器遇到的挑战
- 常见的分布式服务器
- 探索Nginx
- Docker中的Nginx
-
- 1. 准备C++服务器代码
- 2. 创建Dockerfile构建C++服务器容器镜像
- 3. 配置Nginx作为反向代理并创建相应的Dockerfile
- 4. 创建Docker网络并启动容器
- 常见的面试问题
什么是分布式?
-
定义:分布式系统是由多个相互独立的计算节点(计算机、服务器等)组成,这些节点通过网络通信协作,共同究成一个系统目标。分布式系统的关键特性是,整个系统对外表现为一个整体,而内部实际上由多个节点共同分担任务。
-
核心思想:
1.将任务拆分成多个部分,让多个节点分别处理。
2.节点间协作并通过通信保证任务的一致性。
分布式VS集中式VS并行
系统架构 | 由多个独立的计算机节点通过网络连接组成,这些节点协同工作来完成任务,节点之间地位相对平等。 | 系统资源(如数据存储、处理能力等)集中在一个或少数几个核心节点(如服务器)上,其他终端主要用于数据输入和输出等简单操作。 | 侧重于多个处理单元(可以是处理器核心、计算机等)同时处理任务的不同部分,这些处理单元紧密协作,共享内存或者通过高速通信机制连接。 |
数据存储 | 数据通常分散存储在各个节点上,可以采用多种分布式存储方案,如分布式文件系统(如Ceph等),每个节点存储部分数据。 | 数据集中存储在中心节点(如服务器的硬盘阵列),方便统一管理和维护,数据存储位置相对集中。 | 数据存储方式可以多样,在并行处理中,如果是共享内存模式,数据存储在共享内存空间;如果是分布式内存模式,数据可能分布存储,但重点在于并行处理单元对数据的并发访问。 |
任务处理 | 任务被分割并分配到多个节点上同时处理,各个节点处理一部分任务,最后汇总结果。例如大规模数据的分布式计算,像Map – Reduce框架下的数据处理。 | 任务主要在中心节点处理,其他节点将请求发送给中心节点,等待中心节点返回处理结果后再进行下一步操作。例如传统的客户 – 服务器模式下,服务器处理大部分业务逻辑。 | 任务被分解为多个子任务,多个处理单元同时对这些子任务进行处理,处理过程中各单元之间可能会有数据交换和同步操作。比如多线程并行处理一个大型数组的排序任务。 |
可扩展性 | 具有良好的可扩展性,可以方便地添加新的节点来增加系统的处理能力、存储容量等,以应对不断增长的业务需求。 | 可扩展性相对较差,因为中心节点的资源有限,当业务增长到一定程度,中心节点可能会成为性能瓶颈,添加新节点可能涉及复杂的架构调整。 | 可扩展性取决于并行架构的设计,在一定程度上可以通过增加并行处理单元来提升性能,但可能会受到通信开销、数据同步等因素的限制。 |
可靠性 | 具有较高的可靠性,因为数据和任务分布在多个节点上,单个节点故障一般不会导致整个系统崩溃。系统可以通过冗余备份和容错机制来确保服务的连续性。 | 可靠性主要依赖于中心节点,如果中心节点出现故障,可能会导致整个系统瘫痪。不过可以通过备份中心节点等方式来提高可靠性,但相对复杂。 | 可靠性依赖于并行处理单元和通信机制的稳定性。一个处理单元故障可能会影响整个任务的完成,需要有相应的错误检测和恢复机制。 |
通信开销 | 节点之间需要进行频繁的通信来协调任务和交换数据,通信开销相对较大,网络性能对系统整体性能影响较大。 | 主要是终端节点和中心节点之间的通信,相对简单,通信开销主要集中在请求 – 响应过程中。 | 处理单元之间需要进行数据交换和同步,通信开销根据并行架构(如共享内存或分布式内存)的不同而不同,对于紧密耦合的并行系统,通信开销可能是一个关键因素。 |
应用场景 | 适用于大规模数据处理(如大数据分析)、云计算、分布式存储系统等场景,这些场景需要处理海量数据或者高并发的请求。 | 适用于传统的企业管理系统、小型网络服务等场景,这些场景对数据集中管理和处理效率要求较高,规模相对较小。 | 适用于高性能计算(如科学计算中的数值模拟)、多任务实时处理(如实时视频处理)等场景,要求快速处理复杂任务。 |
分布式的应用
架构与原理 | 多个节点组成P2P网络,各节点保存账本副本。数据以区块形式链接存储,交易验证和记账由节点竞争完成,通过共识机制保证合法性。 | 多个客户端和中心服务器。数据存储在客户端本地,中心服务器发送模型参数,客户端训练后返回更新参数,采用加密技术保护隐私。 | 多个服务器节点通过高速网络连接。数据按策略分布存储,请求由负载均衡器分配,服务器间通过消息传递机制通信。 |
数据存储 | 账本数据分散在节点,每个区块包含交易记录等,以链式结构存储保证不可篡改。 | 数据在客户端本地存储,不轻易上传,中心服务器主要存储模型参数等。 | 数据根据文件大小、访问频率等因素分布在各服务器上,如分布式文件系统。 |
任务处理 | 节点竞争验证交易并打包进区块,涉及加密算法计算,达成共识完成记账。 | 中心服务器发送参数,客户端用本地数据训练模型并返回更新,涉及隐私保护机制。 | 负载均衡器分配请求到服务器节点处理,服务器间通过消息机制协调,如数据库更新后的同步。 |
应用优势 | 可靠性高,单节点故障不影响运行;可扩展性有新技术支持(如分片);保证数据安全透明,减少欺诈风险。 | 最大优势是保护数据隐私,适用于隐私要求高的领域;可扩展性好,新客户端加入可增加数据多样性。 | 可扩展性强,可通过加节点增能力和容量;可靠性高,服务器间可相互备份,故障时能接管工作。 |
应用场景 | 金融领域(数字货币、跨境支付等)、供应链管理(记录商品环节信息)。 | 医疗领域(疾病诊断、药物研发)、智能交通(优化自动驾驶模型)。 | 互联网服务提供商(网站托管、邮件服务)、企业级应用(ERP、CRM系统)。 |
分布式服务器特点
- 硬件扩展容易:可以方便地添加新的服务器节点来增加系统的处理能力、存储容量等。例如,在一个电商网站的分布式服务器架构中,随着业务的增长,尤其是在购物旺季,如“双十一”或“黑色星期五”,网站流量会大幅增加。通过添加新的Web服务器和存储服务器,可以轻松应对订单处理和用户访问的压力。新服务器可以与现有服务器协同工作,不需要对整个系统进行大规模的重新设计。
- 软件层面适应良好:分布式服务器系统在软件架构上也支持扩展。许多分布式计算框架和中间件能够自动识别新加入的节点,并将任务合理地分配到这些节点上。例如,在分布式数据库系统中,当添加新的数据库服务器节点时,数据库管理软件可以自动调整数据的分布和负载均衡策略,使新节点能够快速融入系统并发挥作用。
- 冗余备份机制:多个服务器节点之间可以相互备份。例如,在分布式存储系统中,采用数据冗余策略,如多副本存储。数据会被复制到多个服务器上,通常是3个或更多副本。当一个服务器出现故障,如硬盘损坏、网络故障或硬件故障导致服务器无法正常工作时,其他服务器上的副本仍然可以提供数据访问服务,确保数据的可用性。
- 故障自动转移:分布式服务器系统能够实现故障自动转移。当某个服务器节点发生故障时,系统会自动将原本分配到该故障节点的任务转移到其他正常节点上。例如,在一个分布式应用服务器集群中,通过负载均衡器和健康监测机制,一旦发现某个应用服务器出现问题,负载均衡器会停止将新的请求发送到该服务器,并将正在处理的请求重新分配到其他健康的服务器上,保证服务的连续性。
- 并行处理任务:分布式服务器能够同时处理多个任务。例如,在一个大规模数据处理的场景中,如处理海量的日志文件或进行复杂的数据分析,分布式服务器可以将任务分割成多个子任务,分配到不同的服务器节点上同时进行处理。每个节点都可以独立地处理一部分数据,然后将结果汇总,大大提高了任务的处理速度。
- 负载均衡优化:通过负载均衡器将用户请求均匀地分配到各个服务器节点上,避免某个节点负载过重而其他节点闲置的情况。例如,在一个提供在线视频服务的分布式服务器系统中,负载均衡器会根据服务器的当前负载、网络带宽等因素,将用户的视频播放请求合理地分配到不同的视频服务器上,确保每个服务器都能高效地工作,提高了整个系统的性能和响应速度。
- 数据分布策略灵活:数据可以根据不同的策略分布在各个服务器上。例如,在分布式文件系统中,可以按照文件的大小、类型、访问频率等因素来分配文件存储位置。对于经常访问的小文件,可以存储在性能较好的服务器上;对于大文件,可以分割存储在多个服务器上,提高数据的存储效率和访问速度。
- 数据一致性维护:分布式服务器系统需要维护数据在各个节点之间的一致性。这通常通过一些一致性协议来实现,如分布式数据库中的两阶段提交协议(2PC)或基于向量时钟的一致性协议。这些协议确保当数据在一个节点上发生更新时,其他节点能够及时、准确地获取更新后的信息,保证系统中数据的准确性和完整性。
评论前必须登录!
注册