这是《大型网站技术架构》的系列读书记录。
一,大型网站软件系统的特点
1,高并发, 大流量。
PV(Page View)访问量
,即页面浏览量或点击量,衡量网站用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录1次,是多次打开或刷新同一页面则浏览量累计。
UV(Unique Visitor)独立访客
,统计1天内访问某站点的用户数。网站通过cookies判断来访客户端身份,如果访问时cookies不相同,计数会加1。
IP(Internet Protocol)独立IP数
,是指1天内多少个独立的IP浏览了页面。不同的IP浏览页面,计数会加1。 IP是基于用户广域网IP地址来区分不同的访问者的,所以多个用户(多个局域网IP)在同一个路由器(同一个广域网IP)内上网可能被记录为一个独立IP访问者。如果用户不断更换IP,则有可能被多次统计。
Session次数
(网站访问量)Session会话是指在指定的时间段内在您的网站上发生的一系列互动,所以会话次数是一段时间内用户向您的网站发起的会话(Session)总数量。一次会话会浏览一个或多个页面。
2,高可用
7×24小时不间断服务。
3,海量数据
1 PB= 1024TB 1EB=1024PB
2017 How much data does google handle??
4,用户分布广泛, 网络情况复杂
用户分布范围广, 各地网络情况千差万别。
5,安全环境恶劣
由于互联网的开放性, 使得互联网站更容易受到攻击。
6,需求快速变更, 发布频繁
为满足用户需求, 其产品发布频率是极高的。
7,渐进式发展
不是一开始就开发好的, 这也正好与网站架构的发展演化过程对应。
二,大型网站架构演化发展历程
大型网站的技术挑战主要来自于庞大的用户, 高并发的访问和海量的数据。
1,初始阶段的网站架构
——单服务器。
- 比如使用LAMP架构。
2,应用服务和数据服务分离
——独立部署。
越来越多的用户访问导致性能越来越差, 越来越多的数据导致存储空间不足。 这时就需要将应用和数据分离。
- 应用服务器需要处理大量的业务逻辑, 因此需要更快更强大的CPU。
- 数据库服务器需要快速磁盘检索和数据缓存, 因此需要更快的硬盘和更大的内存。
- 文件服务器需要存储大量用户上传的文件, 因此需要更大的硬盘。
3,使用缓存改善网站性能
——使用缓存。
大部分的业务访问集中在一小部分数据上,遵循“二八定律”。把这一小部分数据缓存在内存中,可减少数据库的访问压力、提高整个网站的数据访问速度、改善数据库的写入性能。
- 缓存在应用服务器上的本地缓存:本地缓存的访问速度更快一些, 但是受应用服务器内存限制, 其缓存数据量有限, 而且会出现和应用程序争用内存的情况。
- 缓存在专门的分布式缓存服务器上的远程缓存:远程分布式缓存可以使用集群的方式, 部署大内存的服务器作为专门的缓存服务器, 可以在理论上做到不受内存容量限制的缓存服务。
数据访问压力得到有效缓解,但应用服务器成为整个网站的瓶颈。
4,使用应用服务器集群改善网站的并发处理能力
——使用集群与负载均衡。
对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样的方式持续增加服务器不断改善系统性能, 从而实现系统的可伸缩性。 应用服务器实现集群是网站可伸缩集群架构设计中较为简单成熟的一种。
- 通过负载均衡调度服务器, 可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上。
5,数据库读写分离
——数据读写分离。
虽然使用了缓存来改善网站性能,但是仍有一部分读操作(缓存访问不命中、 缓存过期) 和全部的写操作需要访问数据库,在网站的用户达到一定规模后, 数据库因为负载压力过高而成为网站的瓶颈。
通过配置两台数据库主从关系, 可以将一台数据库服务器的数据更新同步到另一台服务器上。 网站利用数据库的这一功能,实现数据库读写分离.从而改善数据库负载压力。
- 应用服务器在写数据的时候, 访问主数据库, 主数据库通过主从复制机制将数据更新同步到从数据库, 这样当应用服务器读数据的时候, 就可以通过从数据库获得数据。
- 为了便于应用程序访问读写分离后的数据库, 通常在应用服务器端使用专门的数据访问模块, 使数据库读写分离对应用透明。
6,使用反向代理和CDN加速网站响应
——代理加速。
在用户分布广泛、网络情况复杂的情况下,为了提供更好的用户体验, 留住用户, 网站需要加速网站访问速度。 主要手段有使用基本原理都是缓存技术的CDN和反向代理。
使用CDN和反向代理的目的都是尽早返回数据给用户, 一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。
- CDN部署在网络提供商的机房, 使用户在请求网站服务时, 可以从距离自己最近的网络提供商机房获取数据。
- 反向代理则部署在网站的中心机房, 当用户请求到达中心机房后, 首先访问的服务器是反向代理服务器, 如果反向代理服务器中缓存着用户请求的资源, 就将其直接返回给用户。
7,使用分布式文件系统和分布式数据库系统
——使用分布式存储系统。
虽然已经对应用服务端与数据服务端做出了优化,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库。文件系统也是一样,需要使用分布式文件系统。
分布式数据库是网站数据库拆分的最后手段, 只有在单表数据规模非常庞大的时候才使用。 不到不得已时, 网站更常用的数据库拆分手段是业务分库, 将不同业务的数据库部署在不同的物理服务器上。
8,使用NoSQL和搜索引擎
——优化存储与搜索。
随着网站业务越来越复杂, 对数据存储和检索的需求也越来越复杂, 网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。
- 应用服务器则通过一个统一数据访问模块访问各种数据, 减轻应用程序管理诸多数据源的麻烦。
NoSQL和搜索引擎都是源自互联网的技术手段, 对可伸缩的分布式特性具有更好的支持。
9,业务拆分
——业务拆分部署。
为了应对日益复杂的业务场景, 通过使用分而治之的手段将整个网站业务分成不同的产品线,如大型购物交易网站就会将首页、商铺、 订单、 买家、卖家等拆分成不同的产品线, 分归不同的业务团队负责。
具体到技术上, 也会根据产品线划分, 将一个网站拆分成许多不同的应用, 每个应用独立部署维护。
应用之间可以用以下方式建立联系:
- 通过超链接建立关系(在首页上的导航链接每个都指向不同的应用地址) 。
- 通过消息队列进行数据分发。
- 通过访问同一个数据存储系统来构成一个关联的完整系统,
10,分布式服务
——抽取公共服务。
随着业务越拆越小,存储系统越加越大,应用系统整体复杂度急剧增加, 部署维护越来越困难。 由于所有应用要和所有数据库系统连接,导致存数据库接资源不足。
将这些应用的共用业务提取出来,独立部署,由它们连接数据库, 提供共用业务服务。应用系统的其他业务服务只需通过分布式服务调用共用业务服务完成具体业务操作。
三,大型网站架构演化的价值观
网站的价值在于它能为用户提供什么价值, 在于网站能做什么, 而不在于它是怎么做的, 所以在网站还很小的时候就去追求网站的架构是舍本逐末, 得不偿失的。
1,核心价值
——随网站所需灵活应对。
不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站。
2,驱动力量
——网站的业务发展。
创新的业务发展模式对网站架构逐步提出更高要求, 才使得创新的网站架构得以发展成熟。
四,网站架构设计误区
1,一味追随大公司的解决方案。
经验值得借鉴,但不要盲从。
2,为了技术而技术。
技术应满足实际的业务,不要一昧追求新技术。
3,企图用技术解决所有问题。
技术架构服务于业务架构,当技术上解决不了问题时,考虑改变业务架构。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98111.html