前言
大型网站一般具备9个特点:
- 高并发
- 高可用
- 大数据
- 迭代周期短
- 用户量庞大
- 可持续发展
- 安全级别高
- 可弹性、可伸缩
- 吞吐量高
网站架构演变历程:单体→集群→分布式→微服务→容器化。大型网站具备高可用、高并发、高性能的架构体系。
架构师需要具备的能力:单体→集群→缓存、搜索→分布式、中间件→微服务、容器化→性能优化。

文章目录
一、大型网站的特点与设计宗旨
1.1 大型网站的9大特点
说起大型网站,很多人会存在一个误区,认为网站访问量大,那就是一个大型网站,其实这只说对了一半。为什么呢?给大家举个例子:
百度旗下的上网导航网站: hao123。这个网站的用户访问量是非常巨大的,那么它是一个大型网站吗?其实不是。为什么呢?类似 hao123 这样的网站,它们都是提供一个静态网页(可以通过模板技术生成静态页面),用户点击是跳转到其他的网站,它们是根据用户的访问需求提供了一站分类推荐服务。这些网站本身是不具有庞大的数据量的。可以说他们和用户的交互都是单向的,网站通过自身编辑内容对用户提供访问内容,用户只需要点击浏当于 Web1.0时代 的小型网站。
那么我们再来看一下天猫和京东,这两个网站无疑都是大型网站,首先他们都具有庞大的访问量,不论是天猫双11或是京东618,用户的请求量都是十分巨大的。再者,不仅仅访问量大,网站的数据体量也是非常庞大的,拥有海量数据,并且可以支持大数据分析。像每年年底都能通过大数据分析为你提供当年你花了多少钱,预计明年会买什么等等,这些都是大型网站的基本特征。当然,大型互联网站的特点细分下来有很多,接下来我们一起来看一下:
- 高并发,流量大: 一个网站从小做到大,业务越来越大,积累的用户也越来越多,那么网站的请求量就势必越来越大。举个例子:
百度日均访问达到50亿+(据说已经超过谷歌)。
腾讯QQ早就突破1亿用户同时在线 。
淘宝双11交易金额达到2000多亿人民币。 - 高可用:大型网站有一个必须达到的标准,就是高可用。什么是高可用,就是假设服务器宕机了,这个时候用户就无法访问,我们必须保证网站稳定地向用户提供7*24小时不间断的服务,哪怕有服务器节点宕机了,这个时候备用机也会替换当前不可用的服务器节点,确保服务正常访问。
- 大数据:通过大量服务器以及存储系统管理海量数据,比如阿里在全国各地有上千甚至上万台服务节点。数据多了,那么就可以做大数据分析了,比如为每个画像,不论是用户购买习惯,还是用户未来预计会购买的商品,都能做到一步步的分析。当然图片数据也是数据,当你上传了图片,网站会通过人工智能来分析你的图片。无论是人物图,风景图还是宠物图,都会做到精确的分析。
- 敏捷开发,迭代快:大型网站的用户量必然是会很多的,为了提高用户体验,优化用户各类操作,形形色色的需求都会被产品人员提出,通过头脑风暴、研讨会等方式角逐出一些非常好用的功能模块,与此同时,开发人员根据需求快速迭代,当然测试与运维也会跟进。一般来说1~2周会快速迭代一次。
- 用户体系庞大:既然一个大型网站的用户量是非常大的,那么这些用户不可能都分布在同一个地区,他们都是分散的个体,分布在全国各地,甚至全球各地。比如通过淘宝和物流,你可以把商品卖到很偏远的农村或者山区,当然这些偏远地也能通过网站把自家的特产,卖向全国各地。
- 可持续升级:任何大型网站都不是一蹴而就的,都是从最初最简单的版本一步一步迭代出来的,很多初创公司都会有这样的误区,一上来就搞一个高大上的架构,目标tps达到千万。淘宝初期,是从马云老师家里诞生的;苹果公司诞生于车库;谷歌诞生于斯坦福大学宿舍,随后搬入车库。他们刚推出的时候都是非常简单的网站。
- 安全防范:正所谓树大招风,你越牛叉,就愈会有黑客或者同行来攻击你,所以这对运维来说也有相当大的挑战,之前就存在网站被黑客攻击勒索比特币,出现这样的问题是因为服务器漏洞,比如上传图片,没有做到限制文件类型,只在前端判断,却没有在后端判断,导致黑客可以直接攻击API接口,把PHP或者其他可植入脚本上传到服务器运行,这是非常危险的。
- 弹性扩展:淘宝双11在并发量剧增的时候,可以通过增加服务器来扩容,从而引导剧增的流量;微博里若某明星结婚,流量也会剧增,这个时候服务器都是可以动态地增加,来实现动态扩容。不需要的时候适当减少服务器就行。
- 吞吐量高,响应速度快:一个系统数据量一旦大了,那么它的响应速度会比较慢,这会影响用户体验。所以一个大型网站也必须保证用户每次的请求响应是很快的,虽然这个网站背后可能有上百上千台服务器,但是对于用户来说是透明的,他是不知道的。
二、大型网站架构演变历程
2.1 静态网站
静态页面网站,web1.0里常见的模式,服务器和用户无交互,单向访问。

2.2 引入数据库
引入数据库:web2.0时代,用户与服务器进行双向交互。用户可以编辑数据。

2.3 单体架构模式
早期传统Java Web开发模式:应用程序,数据库,文件服务器都部署在一台服务器中。流量不大,无压力。应用程序采用MVC架构。

2.4 节点分离
流量增多,服务器和数据库乏力。将文件服务器和数据库服务器和应用程序分离。不同的服务器充当不同的角色,增加并发能力。

2.5 引入缓存
用户查询量增多,占用数据库资源。引入缓存中间件,用户绝大多数的查询请求缓存中间件,保护数据库,请求响应速率加快。

2.6 引入集群,负载均衡
单节点部署在用户访问量增加的情况下可能存在宕机的情况,引入集群:应用集群、文件服务器集群、缓存集群。负载均衡:采用算法进行负载均衡访问节点服务器。

2.7 数据库读写分离
用户达到百万,千万级别。大约有80%数据读操作。数据库采用读写分离进行数据库集群部署。数据同步:主库定时同步数据至从库。

2.8 分布式数据库
分库分表阶段,数据库做了集群,需要用分布式主键进行数据同步。

2.9 引入搜索引擎技术
满足用户的多样化检索需求,引入搜素引擎技术,屏蔽掉与数据库的连接,保护数据库。

2.10 微服务阶段:业务拆分
将不同的业务线进行拆分,采用分布式部署。

三、架构师需要具备的技术栈和能力
3.1 架构师需要具备的技术栈

3.2 架构师需要具备的能力
- 技术全面、有广度
- 关注前言技术
- 全局观、预判
- 把控团队、忙而不乱
- 系统分解与模块拆分
- 指导与培训
- 沟通与协调能力
- 抽象、举例、画图
- 软技能
四、前后端技术选型
4.1 后端技术选型
技术选型 SpingBoot vs SpringMVC
- SpringMVC是框架,SpringBoot是工具
- 从配置繁琐(xml)到零配置(yml)
- SpringBoot集成了多样化中间件[*-stater]
- 从外置tomcat变为内置tomcat
Struts
- 安全漏洞
- 请求变量共享
- Filter拦截
- 非Spring官方自产自销
4.2 前端技术选型
- MVVM开发模式
- Jquery、VUE.JS
- html
- css
4.3 技术选型需要考虑的要素
- 切合业务
- 社区活跃度
- 团队技术水平
- 版本更新迭代周期
- 试错精神
- 安全性
- 成功案例
- 开源精神
4.4 前后端分离开发模式


总结
架构师需要具备工程化思维模式,了解大型网站的架构体系,微服务的由来。
本文探讨了大型网站的特点,如高并发、高可用和大数据,并详细介绍了其架构从静态网站到微服务的演变过程。架构师需要掌握的技术栈包括数据库、缓存、集群等,并具备全局观、预判能力和软技能。文章还讨论了前后端技术选型的重要因素和常见模式。

被折叠的 条评论
为什么被折叠?



