大型网站技术架构-第一篇-大型网站架构演化

1周前 (2019-10-24)     作者:LG     分类:读书     阅读次数:     评论(0)    文章页统计代码

■ 前言

  偶然遇见一本书《大型网站技术架构·核心原理与案例分析》,由李智慧大神编写的,感觉介绍的蛮不错的,买回来读了一下,发现开卷有益就是指的这种书,买回9天已经读了一半了才想起把笔记整理一下,惭愧…


■ 正文


1.1.  大型网站软件系统的特点

1) 高并发,大流量:需要面对高并发用户,大流量访问

2) 高可用:系统7*24小时不间断服务

3) 海量数据:需要存储、管理海量数据,需要使用大量服务器

4) 用户广泛,网络情况复杂:面向全球互联网用户提供服务,用户分布范围广,各地网络情况千差万别

5) 安全环境恶劣:由于互联网开发性,使得互联网站更容易受到攻击,大型网站几乎每天都会黑客攻击

6) 需求快速变更,发布频繁:和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率是相当高。

7) 渐进式发展:与传统软件产品或企业应用系统一开始就规划好全部的功能和非功能需求不同,几乎所有的大型网站都是从一个小网站开始,渐进地发展起来的。

 

1.2. 大型网站架构是演化发展历程

1) 初始网站架构:大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐渐演化而来。小型网站最开始时没有太多人访问,只需要一台服务器就绰绰有余,这时候应用系统、数据库、文件等所有资源都放到一天服务器上。通常为linux+php+apache+mysql,各种开源软件及一台廉价服务器组成了第一个网站。

2) 应用服务和数据服务分离:随着网站业务的发展,一台服务器逐渐不能满足需求,越来越多的用户访问导致性能越来越差,数据导致存储空间不足,这时候进行应用程序跟数据分离,整个网站用三台服务器:应用服务器(CPU强大)+文件服务器(硬盘强大)+数据库服务器(硬盘速度快+大内存)

3) 使用缓存改善网站性能:网站访问特点遵循二八定律:80%的业务访问集中在20%的数据上,比如百度搜索关键词集中在少数热门词汇上;网站使用缓存有两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存的访问更快,但是容量有限,而且容易跟应用程序争用内存的情况,远程分布式缓存理论上可以做到不受容量限制

4) 使用应用服务器集群改善网站的并发处理能力:单一服务器能够处理的请求连接有限,在网站高峰期,应用服务器成为整个网站的瓶颈。使用集群是解决网站高并发,海量数据的常用手段,通过增加服务器分担原有服务器的访问压力和存储压力

5) 数据库读写分离:网站使用缓存后,绝大多数数据操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站用户达到一定规模后,数据库因为压力过高而成为网站的瓶颈。这时通过配置数据主从数据库,实现数据库的读写分离(应用程序写数据时,访问主数据库;应用读取数据时,访问从数据库),从而改善数据库的负载压力。

6) 使用反向代理和CDN加速网站响应:由于用户在物理上分布于全国各地,不同地方的网速差别极大,通过反向代理和CDN加速网站的访问速度,提升用户的使用体验;反向代理服务器和CDN的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,当用户请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理服务器则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就直接将其返回给用户。此时的访问流程为:CDN服务器 → 反向代理服务器 → 负责均衡服务器 → 应用服务器集群 → 分布式缓存服务器集群 → 数据库服务器/文件服务器

7) 使用分布式文件系统和分布式数据库系统:任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,仍然不能满足需求,这是需要使用分布式数据库,分布式数据时网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用,一般方式为业务分库,将不同的业务数据库部署在不同的物理服务器上

8) 使用NOSQL和搜索引擎:网站业务越来越复杂的时候,对数据存储和检索的需求也越来越复杂,网站需要一些非关系型数据库如:NOSQL和非数据查询技术如:搜索引擎。NOSQL和搜索引擎对可伸缩的分布式特性具有更好的支持

9) 业务拆分:网站按照业务分成不同的产品线,如:商品,订单,用户,仓库等,分拆不同的业务线,归属不同的业务团队负责;网站根据业务分成多个应用,各个应用间独立维护和部署,应用间通过消息队列进行数据分发

10) 分布式服务:业务越拆越小,存储系统越来越大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难,由于所有应用和所有数据库系统连接,在上万服务器规模级上,数据库连接容易出现连接资源不足,拒绝服务。这时需要把可复用的业务进行独立拆分,独立部署,这些可复用的业务连接数据库,提供公用业务服务,实现分布式服务调用(即现在流行的微服务)


追加 2019-11-04


1.3. 大型网站架构演化的价值观

1) 大型网站架构技术的核心价值是随网站所需灵活应对:大型网站架构技术的核心价值不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站

2)驱动大型网站技术发展的主要力量是网站的业务发展:业务成就了技术,事业成就了人,而不是相反。


1.4. 网站架构设计误区

1)一味追随大公司的解决方案:大公司的经验和成功模式固然重要,值得学习借鉴,但如果因此而变得盲从,就失去了坚持自我的勇气,在架构演化的道路上迟早会迷路。

2)为了技术而技术:网站技术是为了业务而存在的,除此毫无意义。在技术选型和架构设计中,脱离业务发展的实际,一味追求时髦的新技术,可能会将网站技术发展引入崎岖小道,架构之路也走越难。

3)企图用技术解决所有问题:技术是用来解决业务问题的,而业务的问题也可以通过业务的手段去解决

除非注明,发表在“石马人山的博客”的文章『大型网站技术架构-第一篇-大型网站架构演化』版权归LG所有。 转载请注明出处为“本文转载于『石马人山的博客』原地址http://longlonggo.com/html/1///150/178/458.html
文章页分享代码