早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转型,涉及到以下环节改造。
主要环节
-
业务拆分:将整个网站业务拆分成不同的应用,每个应用独立部署维护,应用之间通过RPC或消息队列通信。
-
集群化(应用服务器;基于RPC的微服务应用等)
-
LVS负载均衡,负责将请求转发给不同业务集群
-
反向代理服务器,常用的如Nginx
-
应用服务器,servlet容器,如tomcat
-
应用和数据服务分离,分别部署在不同的服务器
-
后端应用合理分层,通常分为表现层或网关层、业务逻辑层、数据持久层
-
缓存。分为两种:本地缓存;分布式缓存
-
CDN化。静态内容部署到CDN,就近获取,加速网站响应。
-
数据库读写分离。数据库采用主从热备,应用服务器在写数据时访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。
-
分库分表,引入分布式数据框架
-
引入NoSQL,支持海量数据存储
-
借助elastics search等开源搜索引擎
-
异步化,系统解耦。
-
缩短业务流程,加快网站访问速度
-
消除并发访问高峰
架构五要素:
-
高性能
-
可用性(Availability)
-
伸缩性(Scalability)
-
扩展性(Extensibility)
-
安全性
1、高性能
性能的测试指标主要有:
-
响应时间:指应用执行一个操作需要的时间
-
并发数:指系统能够同时处理请求的数目
-
QPS:指单位时间内系统处理的请求量
-
系统性能计数器:描述服务器或者操作系统性能的一些数据指标
性能优化,根据网站分层架构,可以分为三大类:
-
Web 前端性能优化
-
减少 http 请求
-
使用浏览器缓存
-
启用压缩
-
CSS 放在页面最上面,JavaScript 放在页面最下面
-
减少 Cookie 传输
-
应用服务器性能优化:主要手段有 缓存、集群、异步
-
多线程(设计为无状态,使用局部对象,并发访问资源使用锁)
-
资源复用(单例,对象池)
-
数据结构
-
异步操作(消息队列,削峰作用)
-
多台应用服务器组成一个集群共同对外服务,提高整体处理能力。
-
使用 CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据。可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力
-
应用服务器端,可以使用服务器本地缓存和分布式缓存(网站性能优化第一定律:优化考虑使用缓存优化性能)
-
代码层面,也可以通过使用多线程、改善内存管理等手段优化性能。
-
数据库服务器端,索引、缓存、SQL 优化等性能优化手段
-
NoSQL 数据库通过优化数据模型、存储结构、伸缩特性等
-
存储服务器性能优化
-
机械硬盘 vs. 固态硬盘
-
B+ 树 vs. LSM 树
-
RAID vs. HDFS
2、高可用
高可用的网站架构:目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问,主要手段数据和服务的冗余备份及失效转移
-
高可用的应用:显著特点是应用的无状态性
-
通过负载均衡进行无状态服务的失效转移
-
应用服务器集群的 Session 管理
-
高可用的服务:无状态的服务,可使用类似负载均衡的失效转移策略,此外还有如下策略
-
超时设置
-
异步调用
-
服务降级
-
限流
-
高可用的数据:主要手段是数据备份和失效转移机制
-
失效确认
-
访问转移
-
数据恢复
-
冷备:缺点是不能保证数据最终一致和数据可用性
-
热备:分为异步热备和同步热备
-
数据一致性(Consisitency)
-
数据可用性(Availibility)
-
分区耐受性(Partition Tolerance)
-
CAP 原理
-
数据备份
-
软件质量保证
-
自动化测试
-
预发布验证
-
灰度发布
-
网站实时监控
-
警报系统
-
自动优雅降级
-
用户行为日志采集(服务器端和客户端)
-
服务器性能监控
-
监控数据采集
-
监控管理
3、伸缩性
大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只用一台服务器就处理全部用户请求,存储全部数据。网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中不断加入服务器。
对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,进而导致集群中大部分缓存数据都无法访问。虽然缓存的数据可以通过数据库重新预热,但是如果应用已经严重依赖缓存,可能会导致整个网站崩溃。需要改进缓存路由算法保证缓存数据的可访问性。
关系数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成一个集群。
至于大部分 NoSQL 数据库产品,由于其先天就是为海量数据而生,因此其对伸缩性的支持通常都非常好,可以做到在较少运维参与的情况下实现集群规模的线性伸缩。
概括起来伸缩性的分为如下几个方面:
-
应用服务器集群的伸缩性设计
-
轮询(Round Robin, RR)
-
加权轮询(Weighted Round Robin, WRR)
-
随机(Random)
-
最少链接(Least Connections)
-
源地址散列(Source Hashing)
-
DNS 域名解析负载均衡
-
反向代理负载均衡(在 HTTP 协议层面,应用层负载均衡)
-
IP 负载均衡(在内核进程完成数据分发)
-
数据链路层负载均衡(数据链路层修改 mac 地址,三角传输模式,LVS)
-
分布式缓存集群的伸缩性设计
-
Memcached 客户端(包括 API,路由算法,服务器列表,通信模块)
-
Memcached 服务器集群
-
分布式缓存的一致性 Hash 算法(一致性 Hash 环,虚拟层)
-
数据存储服务集群的伸缩性设计
-
关系数据库集群的伸缩性设计
-
NoSQL 数据库的伸缩性设计
4、可扩展
系统架构设计层面的“开闭原则”,构建可扩展的网站架构
-
利用分布式消息队列降低耦合性
-
分布式消息队列
-
事件驱动架构(Event Driven Architecture)
-
利用分布式服务打造可复用的业务平台
-
分布式服务框架设计(Thrift,Dubbo)
-
可扩展的数据结构(如 HBase的 ColumnFamily 设计)
-
利用开放平台建设网站生态圈
5、网站的安全架构
XSS 攻击和 SQL 注入攻击是构成网站应用攻击最主要的两种手段,此外还包括 CSRF,Session 劫持等手段。
-
攻击与防御
对js转义,使其失去执行功能,只作为纯字符串展示
防范:httpOnly;增加token校验;通过Referer识别。
-
网站安全漏洞扫描
-
CSRF 攻击:跨站点请求伪造(Cross Site Request Forgery)
-
Error Code
-
表单 Token
-
验证码
-
jsonp请求的,Referer 校验
-
SQL 注入
-
html 危险字符转义
-
XSS 攻击:跨站点脚本攻击(Cross Site Script)
http://mp.weixin.qq.com/s/LRU3wUtRjRWvCoIoyoU5uA
相关推荐
大型网站技术架构书籍大型网站技术架构书籍大型网站技术架构书籍大型网站技术架构书籍大型网站技术架构书籍
《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、...
本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web 安全、系统发布...
《大型网站技术架构演进与性能优化》这本书深入探讨了互联网行业中大型网站在技术架构上的发展路径和性能优化策略。随着互联网的飞速发展,大型网站的架构设计和性能优化成为了决定企业竞争力的关键因素。本篇文章将...
《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、...
大型网站技术架构:核心原理与案例分析 本书作者是阿里巴巴网站构建的亲历者,拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的...
《大型网站技术架构_核心原理与案例分析》是李智慧撰写的一本专著,主要针对Web开发领域的高级架构设计进行深入探讨。这本书旨在帮助读者理解并掌握构建大规模、高性能、高可用性的网站所需的关键技术与实践策略。...
《大型网站技术架构:核心原理与案例分析》是李智慧所著的一本关于构建和优化大规模网站架构的重要著作。这本书深入浅出地介绍了大型网站在应对高并发、大数据量、高可用性等挑战时所采用的技术策略和实践经验,是IT...
《大型网站技术架构:核心原理与案例分析》与《大型网站系统与JAVA中间件实践》这两本书是深入探讨现代互联网企业级应用开发的关键资源。它们涵盖了构建和优化大规模网站所需的诸多核心技术,包括分布式系统、Java...
《大型网站技术架构核心原理与案例分析》这本书深入探讨了构建和优化大型网站所需的关键技术和实践,对于希望成为或已经是架构师的专业人士来说,是一本不可或缺的参考书。书中不仅涵盖了理论知识,还通过实际案例...
由李智慧著作的《大型网站技术架构(核心原理与案例分析)》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅...
《大型网站技术架构》 大型网站技术架构是一个复杂的系统工程,它涵盖了从网站设计初期的架构规划,到后期的性能优化、扩展性考虑等多个方面。本资料主要通过深入讲解网站的发展历程,帮助读者理解大型网站架构的...
《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、...
大型网站技术架构:核心原理与案例分析+李智慧大型网站技术架构:核心原理与案例分析+李智慧大型网站技术架构:核心原理与案例分析+李智慧大型网站技术架构:核心原理与案例分析+李智慧大型网站技术架构:核心原理与...