构建高性能服务的考量

简介:

做一款互联网产品,人们往往立马就想到了海量用户、海量数据、高并发、高性能。所以起初做架构设计时就把性能提到了一个不得不做的地位。我个人是很反对这种“未雨绸缪”的方式的,因为对于一个新应用来说获取一个互联网用户的成本并不小,而且“海量”不是短期内就会面临的。所以请建议您最好先在基于投入产出比的考量下对快速实现 OR 性能重要程度做出权衡后再做考虑,最好先实现应用再做优化,过早优化是万恶之源这句话不是吓唬小孩子的。当然,本文讲的就是性能的考量,所以文章以下的讲解是在你已经决定要重点考虑性能的基础上。


性能无非就是为了通过缩短响应时间来获得良好的用户体验,通常我们会说起2/5/10法则:用户响应在2秒之内是很好的用户体验;用户响应在2-5秒之间是一般的用户体验,用户可以接受;但是用户响应在5-10秒之间是很糟糕的用户体验,已经接近了用户可接受的极限。所以我们为了减小用户响应时间必须要分析出可能出现的性能瓶颈在哪里。

wKiom1LVHBmg7S9IAABmGRpPCDM916.jpg

如图我们可以很清晰的看出用户在等待的过程中发生了什么:

  • 数据在网络上传输的时间;

  • 后台服务器处理请求并生成回应的时间;

  • 客户端处理回复并进行UI呈现的时间;

因为我们今天讲的是构建高性能服务,所以3我们暂时忽略。所以响应时间 = 发送时间 + 传播时间 + 处理时间。有些人要问了,发送时间是个什么东东,我们来分析下一次网络I/O的过程:

  1. 将要发送的数据写入进程的数据缓冲区;

  2. 调用系统API,这里涉及到用户态到内核态的转化,将数据存入系统内核缓冲区;

  3. 数据从内核缓冲区进入网卡;

  4. 数据从网卡传输到网络线路;

  5. 数据在线路中转换成相应的信号通过介质进行传输;

所以发送时间 = 数据量/带宽,带宽就是数据的发送速度,就是通常我们所说的Mb/s。那么传播时间又与什么有关呢?很容易想到的就是传输距离和传输速度,传输距离就是我们现实中的从北京到上海的距离(铺设网线的距离)。传输速度指的是信号的传输速度,通常接近于光速,我们将其约等于2x10^8m/s。所以传播时间 = 传输距离/传输速度

现在我们得出了响应时间 = 数据量/带宽 + 传输距离/传输速度 + 处理时间。到底是哪一个步骤最大的影响了我们的用户响应呢?我们举个例子,假如客户在兰州,网络出口带宽为4Mb/s(实际运营商提供的4Mb的网络上行带宽远远低于4);服务器在北京,网络出口带宽为100Mb/s;兰州距离北京约为2000km;发送回应均为10kB(0.08Mb)数据。

  • 客户端发送时间 = 0.08/4 = 0.02s

  • 服务端发送时间 = 0.08/100 = 0.0008s

  • 传播时间 = 2x10^6/2x10^8=0.01s

  • 那么响应时间 = (0.02+0.0008) + 2x0.01 + 处理时间;

除去处理时间发送时间+传播时间才为0.04秒,仿佛可以看出影响我们服务性能的仿佛是在处理时间上。其实不然,这里面哪一项都不能被完全忽略。比如刚才我们举得就是个很极端的例子,客户端上行带宽不低,而且服务端只给这一个用户提供服务,所以两端的发送时间都很小;在传输上我们忽略了信号的衰减,各级路由器的转发,甚至不同运营商的互联互通问题。但是这两个问题通常不是我们程序开发者能解决的,这需要科学合理的IDC的支持,而且这个成本是企业非常关注的。

所以我们还是把优化重点转移到最后一项服务器的处理时间,这里才是考验我们架构师,研发工程师,DBA能力的地方。如何实现服务灵活的扩展,部署;如何设计服务的并发策略;选择怎样的I/O处理模型;如何降低业务逻辑复杂度;如何处理负载;如何优化数据库......我们还有很长的路要走。

推荐书籍《构建高性能Web站点》,感谢作者 郭欣给大家提供了这么一本很优秀的国产书籍。

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/1351638如需转载请自行联系原作者


yaocoder


相关文章
|
存储 容灾 安全
云上架构和传统IT架构有什么区别及优势?
在云计算走向成熟之前,我们更应该关注系统云计算架构的细节,从传统的架构到云上大数据,实现了很多的转变。
3397 0
|
3天前
|
运维 监控 安全
高效运维管理:提升企业IT系统稳定性与性能
在当今信息化时代,高效的运维管理对于企业IT系统的稳定性和性能至关重要。本文将探讨如何通过优化运维流程、引入自动化工具和建立完善的监控体系等措施,实现高效运维管理,从而提升企业的核心竞争力。
|
28天前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
1月前
|
缓存 负载均衡 架构师
优化大型数据处理系统的性能:从设计到实施
在数据驱动的世界中,大型数据处理系统的性能对企业运营至关重要。本文将探讨如何通过优化设计、选择合适的技术栈以及实施高效的策略来提升数据处理系统的性能。我们将深入分析数据库设计优化、并发处理、数据缓存策略、和数据流管理等关键领域,提供实际案例和技术建议,以帮助开发人员和系统架构师构建高效、可扩展的数据处理系统。
|
1月前
|
监控 Java 开发者
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流。本文探讨Java微服务架构的设计原则与实践。核心思想是将应用拆分为独立服务单元,增强模块化与扩展性。Java开发者可利用Spring Boot等框架简化开发流程。设计时需遵循单一职责、自治性和面向接口编程的原则。以电商系统为例,将订单处理、商品管理和用户认证等拆分为独立服务,提高可维护性和容错能力。还需考虑服务间通信、数据一致性及监控等高级话题。掌握这些原则和工具,开发者能构建高效、可维护的微服务应用,更好地应对未来挑战。
66 1
|
4月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
1月前
|
边缘计算 Kubernetes 持续交付
构建高效后端系统:面向未来的架构设计原则
【8月更文挑战第8天】在技术飞速发展的今天,后端系统的架构设计显得尤为关键。本文将探讨如何通过采用微服务、容器化及自动化等现代技术手段,来构建一个可扩展、高可用且易于维护的后端系统。我们将深入分析这些技术背后的原理及其在实际场景中的应用,同时也会讨论如何在保障数据一致性和系统安全性的前提下,提升系统的响应速度和处理能力。
|
3月前
|
存储 负载均衡 关系型数据库
分布式架构|打造高效、稳定、灵活的现代IT基石
分布式架构|打造高效、稳定、灵活的现代IT基石
105 1
|
4月前
|
存储 缓存 前端开发
《构建高性能的前端应用:优化技巧与最佳实践》
本文探讨了构建高性能前端应用的关键技巧与最佳实践。从代码优化、资源压缩到网络请求管理,提供了一系列有效的解决方案,旨在帮助开发者提升前端应用的性能和用户体验。
|
4月前
|
监控 NoSQL 测试技术
构建高性能后端服务的关键因素与最佳实践
本文将介绍构建高性能后端服务的关键因素和最佳实践,包括服务器选型、数据库设计、代码优化等方面,帮助开发人员在后端开发中提升性能并满足高并发需求。
181 15