大型服务端系统特征
一、高并发,大流量算法
须要面对大量用户亿级链接,Google日均PV35亿,日IP访问数3亿;腾讯QQ最大在线用户数2.6亿。数据库
二、高可用编程
服务端系统必须维持7*24小时不间隔服务。缓存
海量数据安全
三、用户维度复杂服务器
大型互联网站能够为全球用户提供服务能力,终端分布范围广,各个区域网络环境千奇百怪,各大运营商网络互通难,中间路由节点复杂微信
四、安全环境恶劣网络
因为互联网自身的开放性,网关系统极易受到攻击(DDOS、SYN洪水攻击等),黑客攻击无时无刻不存在。架构
五、需求迭代频繁,变动快速并发
这一点是互联网行业的经典性格。和传统软件产品版本发布频率不一样,互联网产品为适应市场变化,知足用户需求,产品发布频率极高。通常大型网站每周都有新版本发布上线,中小型网站变动发布更频繁,基本一天能够发布好几回。
六、渐进式发展
几乎全部大型互联网网站都是由小网站渐进式发展起来的。Facebook起源于哈佛大学宿舍;Google第一台服务器部署在斯坦福大学实验室;阿里巴巴诞生于马老师的客厅。优秀的互联网产品都是慢慢运营出来的,不是一开始就开发完成的,这也与网站架构的发展演化过程对应。
大型网站架构演化发展历程
大型网站的技术挑战主要来自于庞大的终端用户,高并发的访问和海量的数据,任何简单的业务逻辑一旦须要处理数以PB级的数据和面对数以亿计的用户,问题复杂度就直线上升。大型网站架构主要解决这类问题。
小型阶段的网站架构
大型网站都是由小型网站发展而来,网站架构也是同样,从小型网站架构逐步演化而来。小型网站在访问量比较小的时候,一台服务器足够,网站架构以下图所示:
数据处理程序、数据库、存储文件等全部资源都放在一台服务器上。
应用服务和数据服务分离
随着网站业务的发展,单服务器逐渐没法知足业务需求:愈来愈多的用户访问致使性能愈来愈差,愈来愈多的数据致使存储空间不足,这时候就须要将应用和数据分离。应用和数据分离后整个网站使用3台服务器:应用服务器、文件服务器和数据库服务器。这3台服务器对硬件资源要求各不相同:
应用服务器须要处理大量业务逻辑,所以须要更快更强大的CPU;数据库服务器须要快速磁盘检索和数据缓存,所以须要更快的磁盘和更大的内存;文件服务器须要存储大量用户上传的文件,所以须要更大的磁盘。
这个阶段网站架构以下图所示:
应用和数据分离后,不一样特性的服务器承担不一样的服务角色,网站的并发处理能力和数据存储空间获得了极大改善,支持网站业务进一步发展。可是随着用户逐渐增多,网站又一次面临挑战:数据库压力太大致使访问延迟,进而影响整个网站的性能,用户体验受到影响。这时须要对网站架构进一步优化。
使用缓存改善网站性能
网站访问的特色和现实世界的财富分配同样遵循二八定律:80%的业务访问集中在20%的数据上。所以能够把集中访问的一小部分数据缓存在内存中,就能够减小数据库的访问压力,提升整个网站的数据访问速度,改善数据库写入性能。网站使用的缓存能够分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。
注:本地缓存访问速度更快,可是受应用服务器内存限制,并且会出现竞争内存的现象;远程分布式缓存能够采用集群部署,部署大内存服务器做为专门的缓存服务器,理论上不受内存容量限制。
使用缓存后,数据访问压力获得有效缓解,可是单一应用服务器可以处理的请求链接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。
使用应用服务器集群改善网站的并发处理能力
使用集群是网站解决高并发、海量数据问题的经常使用手段。当一台服务器的处理能力、存储空间不足时,更换性能更强的服务器解决不了根本问题,知足不了业务增加。合适的解决办法是增长一台服务器分散原有服务器的访问及存储压力。对网站架构而言,能够经过持续增长服务器不断改善系统性能,实现系统的可伸缩性。应用服务器实现集群是网站可伸缩架构设计中较为简单成熟的一种,以下图所示:
经过负载均衡调度服务器(负载均衡算法网上介绍比较多,这里不展开),能够未来自用户的访问请求平衡分发到应用服务器上。
数据读写分离
网站在使用缓存后,使对大部分数据读操做访问均可以不经过数据库就能完成,可是仍有部分读操做(缓存击穿、缓存失效等)和写操做须要访问数据库。在用户增加到必定程度时,数据库由于负载压力太高而成为网站瓶颈。目前主流数据库都提供主从热备功能,经过配置两台数据库主从关系,能够将一台数据库服务器的数据更新同步到另外一台服务器上。网站利用数据库这一功能实现数据读写分离,从而改善数据库负载压力,以下图所示:
应用服务器写数据的时候会访问主数据库,主数据库经过主从复制机制将数据更新同步到从数据库。应用服务器读数据的时候,就能够从从数据库获取数据。为便于应用程序访问读写分离后的数据库,一般在应用服务器侧使用专门的数据访问模块,使数据库读写分离对应用服务透明。
下集
写了两个小时写不完了,后面更新:反向代理、CDN加速、分布式服务、查询技术等,还有缓存击穿穿透等场景,慢慢更新。
放一下历史文章方便查看:
本文分享自微信公众号 - 机械猿(on_ourway)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。