架构设计笔记_04_高性能问题

随着互联网时代的到来,单机服务无法满足大规模数据处理需求,导致了对高性能服务的追求。提高性能可通过升级硬件、优化操作系统(如多线程、多进程),但这会增加编程复杂性。当转向服务器集群,虽然能分散负载,但任务分配、协调和负载均衡等复杂性也随之增加。负载均衡的选择、算法以及保证服务稳定性的机制都带来了新的挑战。因此,在架构设计时,需要平衡性能与复杂性的增加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统的复杂程度是由很多原因引起的,高性能问题是其中之一,那高性能问题又是什么引起的呢?严格意义上说高性能不是问题,而是一个需求,随着互联网时代到来,特别是移动互联网,人们随时随地都在产生数据,对于单机服务来说已经无法承受大量的计算和网络请求了,所以提出了对于高性能服务的需求。在两种场景下,即单机和服务器集群,都有提高性能的解决方案,下面聊聊这两种方式对于我们软件而言带来的复杂性。

  • 单机服务

单机提供服务时,如果想提高性能,可以通过增加内存,增加核数,改用SSD,增加网卡吞吐量,这是通过改进硬件的形式提高性能,但是目前硬件发展是有瓶颈的,总会有个上限值,无法无限量的增加内存和硬盘容量。

再者通过操作系统来进行提升,比如通过使用多线程方式来提升并行速度,使用多进程来提高吞吐量。但是多进程本身也存在很多问题,因为进程数据是独立的,进程之间数据无法共享,只有通过存储机制来进行数据共享,或者引入管道,消息队列,信号量等新的机制,增加了编程的复杂度;而线程机制虽然是进程内部的,可以共享进程的数据,但是同样也引入了复杂度,如为了保证多个线程共享数据的一致性,需要考虑同步机制,互斥锁机制等,编程复杂度提高。

  • 集群方案

单机硬件性能是有上限的,所以引入了集群,即通过多台机器提供服务,但是任务的分配形式复杂性提高了。百度的春晚红包,后面由几十万台服务器提供服务,那么任务在这些机器之间如何分配,如何汇总,如何协调,这些是通过一系列的机制来保证的。没有这些保证,机器的数量增长和提供的服务性能提升之间并不是正向的。

我们举一个简单的场景,服务器由一台增加到2台,如何让这2台服务器均匀的提供服务,那么就需要增加负载均衡服务,负载均衡服务是通过硬件还是软件,都需要进行判断和选择,F5,LVS,Nginx,HAProxy,每一种机制都要判断是否适应当前你的业务环境和成本;如果你选择了Nginx来做负载均衡,那么分配算法是轮循还是负载权重?如何保证负载均衡服务器和业务服务器之间的连接,以及业务服务器的负载数据上报等,再者,如何保证负载均衡服务器本身不会出现问题?这些复杂度是集群带来的。

为了解决高性能的需求,我们引入进程线程,甚至协程,我们引入了集群方案,这种复杂性提升往往随着机器数量的增加,越发变得不能控制。所以在我们架构设计时需要通过各种手段,甚至妥协来解决遇到的所有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huichangg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值