大型网站核心架构要素

1.性能——响应时间决定用户html

问题本质——用户视角的网站性能:用户的感觉包括用户计算机和网站服务器通讯的时间网站服务器处理的时间用户计算机浏览器构造请求解析响应数据的时间linux

即影响用户体验的有用户计算机的性能网络运营商宽带服务的差别网站服务器性能(也跟网站代码实现有关)用户使用浏览器解析html的速度算法

开发人员视角的网站性能指标有:sql

(1)响应时间:从请求到收到最后响应数据的时间(若是测试的目标程序自己须要花费的时间极少,通常经过测试屡次执行须要的总响应时间除以次数)。数据库

(2)并发数:系统同时可以处理请求的数目 ,反映系统的负载特性(经过多线程模拟并发的方式,为了模拟实际用户,两次请求之间加入一个随机等等时间,这个时间间被称做思考时间)。浏览器

注:网站系统用户数>>网站在线用户数>>网站并发用户数缓存

(3)吞吐量:单位时间内系统处理的请求数,体现系统的总体处理能力。安全

注:对于网站,吞吐量的衡量能够用‘请求数/秒’,‘页面数/秒’,‘访问人数/天’,‘处理的业务数/小时’等,常量化指标有:TPS(每秒事务数),HPS(每秒HTTP请求数),QPS(每秒查询数)等。服务器

(4)性能计数器:描述服务器或操做系统性能的一些数据指标,包括System Load、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等,这些指标也是系统监控的重要参数,能够对这些指标设置报警阈值,当监控系统发现性能计数器超过阈值时,就会报警。网络

注:System Load,即系统负载,指当前被CPU执行和等待被执行的进程数总和,反映系统忙闲程度(多核CPU状况下,完美状况是全部CPU都在使用,没有进程在等待处理,因此Load的理想值是CPU数目,linux系统中用top命令查看,显示的三个浮点数分别表示最近1分钟,10分钟,15分钟的运行队列平均进程数)

性能测试方法:见性能测试

主要优化手段: 

(1)浏览器端: 

浏览器缓存

使用页面压缩

合理布局页面

减小Cookie传输

(2)CDN:将网站静态内容分发至离用户最近的网络服务商机房,让用户经过最短访问路径获取数据。

(3)反向代理服务器:缓存热点文件,加快请求响应速度,减轻应用服务器压力

(4)应用服务器端:

服务器本地缓存

分布式缓存

③经过异步操做将请求发送至消息队列等待后续处理,加快请求响应及实现削峰;

集群

(5)代码层面:多线程改善内存管理等。

(6)数据库服务器端:索引缓存SQL优化,另外,方兴未艾的NoSQL数据库经过优化数据模型、存储结构、伸缩性等手段在性能方面的优点日趋明显

 

衡量网站性能的一些指标:响应时间TPS系统性能计数器等。经过测试这些指标以肯定系统设计是否达到目标。这些目标也是网站监控的重要参数,经过监控这些指标能够分析系统瓶颈,预测网站容量,并对异常指标进行报警,保障系统可用性

对于网站而言,性能符合预期仅仅是必要条件,由于没法预知网站可能会面临的访问压力,因此必需要考察系统在高并发访问状况下,超出负载设计能力的状况下可能会出现的性能问题

网站须要长时间持续运行,还必须保证系统在持续运行且访问压力不均匀的状况下保持稳定的性能特性

 

2.可用性——你能保证几个9?

网站高可用设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。

 

提升可用性的方法:

(1)主要手段——冗余:

①应用服务器:多台应用服务器经过负载均衡设备组成一个集群共同对外提供服务,任何一台服务器宕机,只需把请求切换便可(前提是应用服务器没保存会话信息)

②存储服务器:对数据进行实时备份,当服务器宕机时将数据访问转移到可用服务器上,并进行数据恢复,以保证其余服务器宕机时数据依然可用

除了上述,还须要软件开发过程的质量保证,经过预发布验证、自动化测试、自动化发布、灰度发布等手段,减小将故障引入线上环境的可能,避免故障范围扩大

 

3.伸缩性:经过不断向集群中添加服务器的手段来缓解不断上升的用户并发访问压力和不断增加的数据存储需求

 

(1)衡量标准:

  ①是否能够多台服务器构建集群?

  ②是否容易向集群中添加新服务器?

  ③加入服务器后是否能提供无差异服务?

       ④集群中可容纳的服务器数量是否有限制?

(2)主要手段:

  ①应用服务器:使用合适的负载均衡设备(应用服务器上不保存数据);

  ②缓存服务器:加入新服务器可能使缓存路由失效,对严重依赖缓存的应用可能会致使崩溃,因此须要改进缓存路由算法保证缓存数据的可访问性;

  ③数据库服务器:关系数据库支持数据复制,主从热备,可是很难作到大规模集群的可伸缩性。因此集群伸缩性方案必须在数据库以外实现,经过路由区分等手段将部署有多个数据库的服务器组成一个集群;nosql对伸缩性的支持一般都很好。

 

4.扩展性——不痛不痒新业务就上线了

衡量标准:增长新业务时是否对现有产品透明无影响,不须要任何改动或者不多改动既有业务功能就能够上线新产品。

主要手段:

(1)事件驱动架构:一般利用消息队列实现,将消息产生和消息处理分开,能够透明地增长生产者任务或消费者任务

(2)分布式服务:将业务和可复用服务分离,经过分布式服务框架调用。

5.安全性

安全架构:保护网站不受恶意访问和攻击,保护网站重要数据不被窃取

衡量标准:针对现存和潜在的各类攻击与窃密手段,是否有可靠的应对策略。

相关文章
相关标签/搜索