典型的大型互联网应用系统的技术方案
从架构五大要素展开分析:性能、可用性、伸缩性、拓展性、安全,为解决这五大问题,系统会采用一系列的解决方案。
性能
了解性能:性能测试
性能测试是一个总称,具体可细分为:性能测试、负载测试、压力测试、稳定性测试。
性能测试:以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。
负载测试:对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值,如某种资源已经呈饱和状态,这时继续对系统施加压力,系统的处理能力不但不能提高,反而会下降。
压力测试:超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。
稳定性测试:被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。
优化方案
web前端优化
浏览器访问优化
减少HTTP请求(合并CSS、合并JavaScript、合并图片);
使用浏览器缓存;
启用压缩;
减少cookie传输等
CDN加速
CDN能够缓存的一般是静态资源,如图片、文件、CSS、Script脚本、静态网页等,但是这些文件访问频度很高,将其缓存在CDN可极大改善网页的打开速度。
反向代理
当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速Web请求响应速度,减轻Web服务器负载压力。
常见的反向代理有:Nginx、HAProxy、iis等。
应用服务器优化
本地缓存
Google guava、Caffeine。
分布式缓存
缓存的本质是一个内存Hash表。
不适合使用缓存的情况:
频繁修改的数据(缓存需读写比在2:1以上)
没有热点的访问
使用缓存需注意的几个问题:数据不一致与脏读、缓存可用性、缓存预热、缓存穿透。
分布式缓存指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务,其架构方式有两种,一种是以JBoss Cache为代表的需要更新同步的分布式缓存,一种是以Memcached为代表的不互相通信的分布式缓存。
使用集群
集群会用到负载均衡技术,如Nginx等。
代码优化
包括:多线程、资源复用(单例、对象池)、数据结构、垃圾回收。
存储优化
机械硬盘vs. 固态硬盘
B+树vs.LSM树
RAID vs.HDFS
高可用
应用高可用:集群:负载均衡、session管理;
服务高可用:分级管理、超时设置、异步调用、服务降级、幂等性设计;
数据高可用:冗余备份、失效转移。
需要建立一套监控系统。
伸缩性
涉及技术有:容器化、云计算。
可拓展
消息队列
安全
加密、信息过滤和反垃圾、风险识别等。
版权声明: 本文为 InfoQ 作者【林昱榕】的原创文章。
原文链接:【http://xie.infoq.cn/article/0c216e5f061aab1864c68b0a1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论