| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 不同介质IO速度 -> 正文阅读 |
|
[系统运维]不同介质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 性能优化是长期而且跟业务紧密相关的问题,也是技术成长的必经之路。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/30 1:54:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |