大型网站架构演化
概述
大型网站架构演化
大型网站软件系统的特点
-
高并发,大流量
-
高可用
-
海量数据
-
用户分布广泛,网络情况复杂
-
安全环境恶劣
-
需求快速变更,发布频繁
-
渐进式发展
大型网站架构演化发展历程
初始阶段的网站架构
应用程序,数据库,文件等所有资源都在一台服务器上,使用LAMP架构。
应用服务和数据服务分离
应用服务器,文件服务器和数据库服务器分离。
使用缓存改善网站性能
应用场景:二八定律,80%的业务访问集中在20%的数据上。
缓存分类:本地缓存和分布式缓存。
使用应用服务器集群改善网站的并发处理能力
单一应用服务器能够处理的请求连接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。
使用集群是网站解决高并发,海量数据问题的常用手段。
应用服务器实现集群是网站可伸缩性架构设计中较为简单成熟的一种。
通过负载均衡调度服务器,可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上。
数据库读写分离
应用服务器在写数据库的时候,访问主数据库,主数据库通过主从复制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。
使用反向代理和CDN加速网站响应
原理:缓存
目的:尽早返回数据给用户
- 加快用户访问速度
- 减轻后端服务器的负载压力
区别:
CDN部署在网络提供商的机房,反向代理部署在网站的中心机房。
使用分布式文件系统和分布式数据库系统
分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用。
一般使用的数据库拆分手段是业务分库。
业务分库:不同业务的数据库部署在不同的物理服务器上。
使用NoSQL和搜索引擎
随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂。
业务拆分
大型网站为了应对日益复杂的业务场景,通过分而治之的手段将整个网站业务分成不同的产品线,由不同的业务团队负责。
分布式服务
每一个应用系统都需要执行许多相同的业务操作,将这些共用的业务提取出来,独立部署。通过分布式服务调用共用业务服务完成具体业务操作。
分布式服务将工程分为两类:应用和服务。
大型网站架构演化的价值观
小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。
网站架构设计误区
- 一味追求大公司的解决方案
- 为了技术而技术
- 企图用技术解决所有问题
个人总结
其实很多没有实习经历的校招生,像我之前也是。
基本都是单机开发,没有接触过分布式,微服务这些概念。这本书的第一章是整本书的核心部分。这一章看完了,其实对大型分布式网站的架构会有整体了解。比如说,缓存,读写分离,数据库的分库分表,搜索引擎elasticsearch等。这些技术点都是网站开发的常用技术。
当时我在一家小公司实习时(导师派出去的,捂脸.gif),主要负责的就是高校研究生管理信息系统的开发。开发的架构就是应用程序,数据库,文件等所有资源在一台服务器。数据库使用还是oracle。
研究生毕业后,开始网易云课堂负责后端开发,开始接触大型网站的技术架构。我可以简单介绍一下网易云课堂的开发技术栈。
- 网易分布式数据库,ddb,distributed database。
- 缓存,redis,memcached
- nosql, mongodb
- 搜索引擎,elasticsearch,ndir
- dubbo,rpc框架
- spring cloud config,配置中心
- hystrix,熔断器
- zipkin,sleuth,链路追踪
- 文件,图片等,主要调用网易云的服务。
- spring
- 消息中间件,rabbitmq
工程主要分为两种,提供服务的工程Server,消费服务的工程Web。
Server工程的目录结构:
- xxx-server
- vip-service
- main
- constants
- dao
- domain
- helper
- listeners
- logic
- service
- impl
- test
- vip-service-share
- main
- constants
- service
- dto
- share
- xxx-web
- vip
- logic
- vo
- controller