不同介质IO速度

认识IO的问题才能更好的设计和开发出高并发和高性能的系统

转载: 认识IO的问题才能更好的设计和开发出高并发和高性能的系统_慕课手记

【IO的概述】

计算机中的IO,主要是本地磁盘IO和网络IO。

下面是关于IO速度的几个基本知识。

网络IO肯定是本地最快,局域网次之,跨机房、跨城市、跨运营商会变慢。

局域网的传输速度比SSD卡的随机读取速度快,比普通硬盘就快更多了。

【关于磁盘】

对于高并发和高性能的系统,什么时候会用磁盘呢?

毕竟磁盘速度相对来说太慢了。

磁盘的优点:

    空间大,价格低廉,持久化数据更安全。

磁盘的缺点:

    读取、写入速度都比较慢,并发能力弱。

我们看到上面的优点和缺点,系统各方面权衡考虑的话,如果对空间要求高(几百G),可能不得不用磁盘来做存储。

如果对持久稳定的要求更高的话,磁盘可靠性也比内存要好。

所以,当我们需要大量空间来做缓存,比如:

1 nginx缓存一个网站上万的页面,还是用磁盘缓存吧。

2 搜索结果缓存,可能32G、64G还是会不够用,那么也可以考虑用磁盘来做一个备用缓存,至少会比从数据库或者其他系统中检索要快。

或者我们需要有更大空间来保存或者持久化必须的数据,比如:

1 数据库索引,索引太多,还是需要用到磁盘来做保存。

2 长期的数据文件。

如果对性能要求高,尽量用SSD,至少在数据库服务器和缓存服务器,还是用SSD磁盘吧。

【关于网络】

下面是用户访问网站应用的一个典型的网络架构。

数据库服务器/缓存服务器/接口服务器

这里的几个网络速度会有明显差别。

1 “WIFI/4G”,因为用户可能在深圳,WEB服务器在北京,这样跨城市甚至跨运营商请求,速度是很慢的。

2 “跨机房”请求后端的数据库服务器/缓存服务器/接口服务器,网络相对于局域网就差了至少一个数量级。

关于第一种慢(用户到服务器),用户到WEB服务器,有几个方法可以优化:

1 CDN网络,让末端服务器节点离用户更近(缺点,实时性更新很难保证,数据一致性也就很难做到);

2 多机房部署,多城市、多线路的服务器部署和网络接入(缺点,部署和维护代价、要求高,系统的复杂度更高);

关于第二种慢(服务器跨机房请求),应用服务器跨机房请求,有几个方法可以优化:

1 同机房部署,避免跨机房请求(缺点,部署和维护代价、要求高,数据一致性和同步的难度更高);

2 跨机房之间的网络拉专线光纤(缺点,成本高);

从上面可以看到,对于中小型网站部署多机房还是不多,但是对于大型网站和应用,即使缺点也很明显,但也不得不投入去做。

【应用和程序优化】

上面的网络架构中,我们讲了网速慢的时候怎么优化网络架构,还有另外关于应用和系统的优化问题。

用户到WEB服务器的数量多,而且网络慢,意味着WEB服务器需要同时持有很多连接,要有更高的并发能力才行。

如果应用服务器以及后端的数据库、接口等性能跟不上,同样会造成请求拥堵

所以这里就有了对系统的高并发和高性能要求。

支持高并发的WEB服务器,现在大部分用nginx,原因就是它高效的网络处理,内存占用少,可以同时连接几十万上百万请求。

为什么nginx可以做到2.5M内存保持1万连接,简单说,就是它把请求放到操作系统的网络事件队列中(epoll模型),不会为每个请求开一个线程,也不会自己去轮询所有连接。

而到开发语言的层面,JAVA有netty,PHP有swoole,这些框架都是可以更好的支持IO密集型服务。

支持高性能,就需要每一个技术人员不断对系统做优化和改造了,而且,这是一个长期漫长的过程,也是一个需要不懈努力的过程。

但是很多时候,应用运行时间越长,性能反而越差了,因为业务不断改动需求,因为数据不断积累,所以,这也是对技术提出了更高的要求。

几个通用的优化思路:

1 多关注业务逻辑,能否减少计算次数,能否简化资源依赖?

2 数据结构是否更高效,避免过多的再次加工处理;

3 数据库使用效率是否高效,数据表设计,索引设计是否合理?

4 Web调优,PHP设置,JVM设置。

【总结】

1 为了高性能,尽量少用磁盘,一定要用的话就上SSD吧。

2 多机房部署,多线接入,应用、数据库等同机房部署,避免跨城市、跨运营商、跨机房请求。

3 对于IO密集型的WEB服务器,支持多路复用的网络模型(epoll)会是更优的选择。

4 性能优化是长期而且跟业务紧密相关的问题,也是技术成长的必经之路。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值