1.大型网站架构演化
诉求:高可用,高性能,易扩展,可伸缩,安全。
1.1大型网站软件系统的特点
- 高并发,大流量;
- 高可用;
- 海量数据;
- 用户分布广泛,网络情况复杂;
- 安全环境恶劣;
- 需求快速变更,发布频繁;
- 渐进式发展;
1.2大型网站架构演化发展历程
大型网站的问题:庞大用户,高并发访问,海量数据。
目标:解决以上问题
1.2.1初级阶段的网站架构
一台机器满足需求:数据库,应用服务器,文件服务器。
1.2.2应用服务器与数据库服务器分离
按服务特性不同拆分为多个服务器:应用服务器(计算型:高配置cpu);数据库服务器(存储计算型型:大硬盘大内存);文件服务器(存储型:大硬盘)
1.2.3使用缓存改善性能
2/8定律:关注或解决核心数据的性能。
本地缓存和集中式缓存-单机缓存。
1.2.4使用应用服务器集群改善网站的并发处理
高并发和海量数据问题解决手段:集群。
路由:负载均衡。
1.2.5数据库读写分离
缓存穿透(命不中,过期)以及写操作。
1.2.6使用反向代理和cdn加速网站响应
原因:网络环境复杂,不同地区差别很大。
目标:加速和减小后端负载。
手段:反向代理和cdn。
本质或原理:缓存(反向代理:本地缓存;cdn:用户最近的远程缓存)。
1.2.7使用分布式文件系统和分布式数据库系统
分布式数据库是数据库拆分的最后手段(按业务分库)。
1.2.8使用nosql和搜索引擎
可伸缩,分布式,高性能。
1.2.9业务拆分
微服务化。
1.2.10分布式
微服务化。
1.3大型网站架构演化的价值观
网站价值:能做什么而不是怎么做。
1.3.1大型网站架构技术的核心价值是随网站所需灵活应对
1.3.2驱动大型网站技术发展的主要力量是网站的业务发展
1.4网站架构设计误区
1.4.1一味追随大公司的解决方案
1.4.2为技术而技术
1.4.3企图用技术解决所有问题
技术是用来解决业务问题,业务应该通过业务手段去解决。
2. 大型网站架构模式
模式:重复发生的问题及解决方案。
2.1网站架构模式
问题:高并发,海量数据,高可靠。
目标:高性能,高可用,易伸缩,可扩展,安全。
解决方案:即网站架构模式。
2.1.1分层
横向切分。
2.1.2分割
垂直切分。
2.1.3分布式
切分基础上,不同机器上部署。
分布式方案:
分布式应用和服务:
分层和分割后的应用分布式部署。
好处:改善性能和并发,加快开发和发布速度,减少数据库连接耗尽,服务复用,业务可扩展。分布式静态资源:
动静分离- 分布式数据和存储:
读写分离,nosql - 分布式计算:
- 分布式配置:
- 分布式锁:
- 分布式文件:
2.1.4集群
横向扩展,灾备,可用性。
2.1.5缓存
提高性能的主要手段,也是减轻数据库压力的主要手段。
条件:数据热点不均匀,数据一段时间内不会很快过期
- 浏览器缓存
- cdn
- 反向代理
- 本地缓存
- 分布式缓存
2.1.6异步
软件发展一个目标和驱动力:松耦合。
松耦合手段:分层,分割,分布式,异步。
系统内线程间队列异步,系统间队列异步。
异步消息队列特性:
- 提高消息可用性:缓存,调节生产者和消费者速度不一致。
- 加快网站响应速度:异步
- 消除并发访问高峰:同一
缺点:用户体验,业务流程改造。
2.1.7冗余
互备容灾。
2.1.8自动化
主要集中在发布运维。
自动化发布:
- 自动化代码管理
- 自动化测试
- 自动化安全检测
- 自动化部署
自动化运维:
- 自动化监控
- 自动化报警
- 自动化失效转移
- 自动化失效恢复
- 自动化降级
- 自动化分配资源
2.1.9安全
身份认证:密码和手机验证码
网络:通信加密
机器人:验证码
xss,sql注入:转义
垃圾信息,敏感信息:过滤
交易信息和行为:风险监控
2.2架构模式在新浪微博的应用
2.3小结
3. 大型网站核心架构要素
架构:最高层次的规划,难以改变的决定。
软件架构:有关软件整体结构与组件的抽象描述,用于指导大型系统各个方面的设计。
关注:功能需求,架构要素(性能,可用性,伸缩性,扩展性,安全)。
3.1性能
- 浏览器:浏览器缓存,页面压缩,合理布局页面,减少cookie传输。动静分离
- 网络:
cdn - 网关:
反向代理缓存 - 应用服务器端:
分布式缓存和本地缓存 - 应用:
异步消息 - 部署:
集群,分布式 - 代码层:
多线程,内存优化 - 数据库层:
连接池,索引,缓存,sql优化,分库,分表,容器多硬盘,读写分离,nosql
3.2可用性
高可用:7*24可用
手段:冗余
应用服务器:集群
数据库:双击多机互备
其他质量保证:预发布验证,自动化测试,自动化发布,灰度发布。
衡量标准:出问题时系统整体是否可用
3.3伸缩
集群中服务器数量的增减
服务器伸缩:
数据库伸缩:分区
缓存服务器伸缩:一致性hash环
3.4扩展性
主要指功能扩展
衡量标准:增加新业务不影响原有功能
手段:
- 列表内容
事件驱动:消息队列 - 分布式服务:业务拆分和复用
3.5安全性
原因:公网公开
衡量标准:针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略
3.6小结
性能,可用性,伸缩性,扩展性,安全性是网站架构的核心元素