性能是一个多方面综合的结果,遵循短板理论。系统中任何一个部分成为性能瓶颈,都会影响整个系统的性能表现
对于WEB应用,首先第一步是响应HTTP请求,即使后端的性能再好,如果在这里出现瓶颈,整个系统的性能也会很差,类似于一个很大的水瓶,但是入水口很小。在这个环节,可以通过DNS分流,负载均衡等方式改善。另外,现在高性能的HTTP服务器(Nginx、node.js等)本身,由于采用了事件通知等设计方式,单个线程可以响应多个HTTP请求,减少了线程创建和切换的开销(CPU与内存),也可以显著提升响应HTTP请求的性能
接受请求之后,则进入系统后端进行业务逻辑处理,在这里也会产生性能瓶颈。通过集群的方式,可以有效改善。因为单台服务器的硬件总是有限的,受限于CPU和内存,单台机器能够处理的负载终究是有限的,这时可以采用集群方案,将请求分摊到不同的服务器上处理。这对应用的实现本身是有要求的,基本上要求应用是“无状态”的。比如如果应用的业务逻辑依赖session,那么集群就无法简单地实现,还需要加入session同步的策略等。另外应用本身的代码也会有影响,比如在关键路径上使用了synchronized,那么就只能串行处理,对性能肯定有影响
集群不等于分布式。当应用的规模大到一定程度,简单的集群也无法支撑,这时候往往还需要考虑分布式,对系统进行拆分,充分利用硬件的性能,达到最大的扩展性。此外,即使不考虑性能,将系统拆分,实现“服务化”,对于功能的扩展也是很有帮助的。比如说,只有单个系统时,用户管理可以和业务系统放在一起;但是当应用规模不断增大,有100个系统,那么把用户管理拆分出来,就可以在100个系统中实现这部分功能的共享
最后到了持久层,这里往往会涉及到大量的IO读写,这是最容易产生性能瓶颈的地方。传统的RDBMS本质上是一个单机系统,并且需要遵循ACID的约束。所以传统的关系数据库的扩展性是很差的。比如说,我们用到了数据库集群,这可以解决服务可用性的问题(主备倒换),容灾的问题(数据冗余),对性能也有一定的帮助(同时响应更多的数据库连接请求)。但是仅仅这样还不够,因为前面说过RDBMS本质上是单机系统,即使用了集群亦然。什么意思呢?集群仅仅解决了多连接并发的问题,但是数据库本身插入、查询,涉及到大量的IO,就已经成为了瓶颈,尤其在数据量很大的情况就更加明显。所以仅仅是集群还不够,这时候就需要分表(水平拆分),这对系统的代码就有要求,什么样的数据,要到哪个表里查询,都需要遵循一定的规则。有一个办法是,将数据库路由的功能放在JDBC之下,数据库之上,这样应用就只需要连接到这个数据库路由层,不用关心表的实际位置。随着数据库复杂度的上升,本来很好用的ORM,也就越来越捉襟见肘了
数据规模越来越大,遇到即使拆表也无法解决问题的时候,就需要考虑RDBMS之外的方案。比如键值数据库(Redis、Tair)、文档数据库(MongoDB)等NOSQL技术,甚至还有文件系统(GFS、TFS),当然缓存也是很常见的重要方案
总的来说,性能是一个很大的话题。为了实现高性能,系统的架构是随着业务的发展,逐步演化的,从一开始就设计一个大规模的架构,绝非明智之举。“先实现功能,再按需优化”,才是比较好的策略。在这个过程中,既需要前瞻的眼光,也需要推倒重来的勇气
如同DOTA的路人和CW是2个不同的游戏一样;同样的应用,在小规模场景,和大规模场景(高并发、海量数据)下,也是完全不同的两回事,为了实现同样的功能,架构和实现上可能是千差万别的
分享到:
相关推荐
在对给定文件内容进行详细的知识点阐述时,我们需要聚焦于无人机(UAV)集群分布式协同性能分析,特别是基于态势感知一致性的方法。以下是对标题、描述、标签和部分内容中出现的关键知识点的详细说明: 1. 无人机...
本项目实战教程涵盖了高并发、集群以及分布式系统架构等关键知识点,旨在帮助Java架构师提升技能,实现高性能、高可用和可扩展的电商系统。 1. **Java基础与高级特性** - Java的基础语法、面向对象编程、异常处理...
数据库优化和集群分布式是IT行业中两个至关重要的领域,它们直接影响着系统的性能、稳定性和可扩展性。在2012年中国数据库技术大会上,这些主题得到了深入的探讨和分享。 首先,我们来关注“数据库优化”。数据库...
集群分布式系统设计及注意事项 在设计分布式集群系统时,需要注意以下几个关键问题: 1. HTTP Session:在集群环境中,使用 HTTP Session 会遇到许多限制。为了避免session 失效转移的影响,可以采用会话失效转移...
《Linux集群分布式安全研究》这篇文献探讨了在Linux集群环境下如何增强安全性的问题。随着网络的快速发展和对服务器访问需求的增长,Linux集群技术因其高可靠性、负载能力和计算能力而备受青睐。然而,现有的安全...
在分布式环境中,Quartz集群能够实现任务的高可用性和负载均衡。Spring Quartz则是将Quartz与Spring框架整合,使得任务调度变得更加方便。 一、Quartz集群原理 Quartz集群的基本思想是多个Quartz Scheduler实例...
除了小文件存储问题,文章还探讨了跨集群分布式文件系统在负载均衡方面的问题。负载均衡是分布式系统设计中的一个核心问题,它涉及到如何有效地分配系统资源,以确保系统的高效运转和资源的合理利用。针对这一点,...
在研究船舶自组网近海环境中的集群分布式协作频谱检测算法时,作者们关注的是认知无线电技术在船舶自组网中的应用,以及在近海环境中如何有效地进行频谱检测。认知无线电技术(Cognitive Radio, CR)是一种无线通信...
集群和分布式是两种常见的分布式系统形态。 集群是指将同一业务逻辑部署在多台服务器上,这些服务器运行相同的代码,共同处理请求,以分散负载并提供高可用性。当一台服务器出现故障时,其他服务器仍能继续提供服务...
【标题】"WebLogic集群与分布式" WebLogic集群是一种高可用性和可伸缩性的解决方案,由Oracle公司开发,用于在Java EE应用服务器环境中部署和管理应用程序。它通过将多个独立的WebLogic Server实例(称为节点)组织...
### Redis 3 分布式集群部署详解 #### 一、Redis 概述 Redis (Remote Dictionary Server) 是一款开源的高性能键值对数据库。它以其卓越的性能和灵活性,在多种应用场景中发挥着重要作用,比如缓存、消息队列等。...
分布式集群系统架构设计及应用部署 分布式集群系统架构设计及应用部署是指在高并发访问量和海量数据环境下,通过部署分布式集群环境系统来解决由于瞬间并发访问量过大造成网站崩溃、服务暂停的问题。该系统架构设计...
分布式集群存储的优势主要体现在成本、性能、可靠性、可扩展性和易用性等方面。 从成本方面考虑,分布式集群存储利用成本较低的标准硬件组件,能够大大降低总体成本。与使用少量昂贵高端服务器的传统存储方式相比,...
基于Linux集群的DRTO设计充分利用了Linux的开源特性、稳定性和可扩展性,以及集群技术的高可用性和高性能。 Linux集群是一种将多台独立的计算机连接在一起,以实现单一系统映像(Single System Image,SSI)或分布式...
本次实验的目的主要是搭建Redis Cluster和TwemProxy Redis两种集群,分别对其进行性能测试,测试出集群性能的拐点,找出性能的瓶颈有哪些,并对两套集群进行比较,以便于在不同业务场景下择优选择。
作为高性能的分布式缓存,Redis在电商项目中扮演着重要角色。这部分内容会讲解如何利用Redis来提高系统的响应速度和处理能力,可能会涵盖Redis的数据结构、主从复制、Sentinel哨兵系统或Cluster集群等概念。 通过...
集群划分对于优化整个配电网的性能非常重要,它可以帮助降低分布式储能系统对电网的冲击,并提高电网对可再生能源接入的适应能力。 在储能系统的充电策略上,提出了集群电压自治策略,这一策略能够对集群内部的...
本资源《Kafka集群调优实战+分布式集群搭建》是一部全面覆盖Kafka从基础到进阶、实战到调优的全方位教程。内容涵盖Kafka集群的核心组件讲解、集群架构设计、分布式集群搭建与伪集群配置,帮助读者快速上手Kafka环境...
3. **监控和管理**: 实现对Quartz集群的监控,如任务状态、运行时性能等,以便及时发现和解决问题。 总结,Quartz+Spring的分布式集群调度方案能够帮助开发者构建稳定且可扩展的定时任务系统。通过合理配置和实践,...
为了解决这些问题,本文提出了一种基于Hadoop的分布式集群大数据动态存储系统的设计方案。 首先,需要明确Hadoop在大数据处理中的地位和作用。Hadoop是一个开源的分布式存储和计算平台,它提供了一套完整的生态系统...