1、使用缓存减轻数据库的压力,提高网站性能。二八定律,80%的业务访问集中在20%的数据上。javascript
1.缓存在应用服务器上的本地缓存。(Session)css
2.缓存在专门的分布式缓存服务器上的远程缓存。能够采用集群的方式,理论上能够作到无限扩充。(Redis、memcached等)html
2、使用服务器集群改善网站的并发处理能力。java
1.单一服务器没法知足需求时,不要企图更换更大的服务器。更恰当的作法是增长服务器来分担原有服务器的压力。web
2.经过负载均衡调度服务器。算法
3.数据库读写分离。经过主从配置能够将一台数据库服务器的数据同步到另外一台服务器,网站利用数据库的这一功能,实现数据库的读写分离,从而改善数据的负载压力。(MySql数据主从配置,读写分离)sql
4.使用反向代理和CDN加速网站响应,其基本原理都是缓存,区别在于CDN部署在网络提供商的机房,用户能够从距离本身最近的网络提供商机房获取数据;而反向代理部署在网站的中心机房,用户请求到达后首先访问的是反向代理服务器,若是反向代理服务器缓存有用户请求的资源,则将其直接返回给用户。(Nginx等)mongodb
3、使用分布式文件系统和分布式数据库系统。数据库
1.分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模很是庞大的时候才去使用。不到不得已时,网站经常使用的数据库拆分手段是业务分库,将不一样业务的数据库部署在不一样的物理服务器上。浏览器
2.使用NoSql和搜索引擎。(经常使用的NoSql有mongodb等,经常使用的搜索引擎有:elasticsearch、solr等)
4、业务拆分
1.为了应对日益复杂的业务场景,经过分而治之的手段将整个网站拆分红不用的产品线,分归不一样的业务团队负责。每一个应用独立部署,应用之间能够经过超连接创建关系(在首页的导航连接每一个都指向不一样的应用地址),也能够经过消息队列进行数据分发,实际最多的仍是经过访问同一个数据存储系统来构成一个关联的完整系统。
5、分布式服务
1.随着业务拆分愈来愈细,系统部署愈来愈多,网站维护会愈来愈困难,在数万台服务器规模的网站中,链接数据太多,会致使数据库链接资源不足,拒绝服务。考虑都不少业务都会执行许多相同的操做,咱们能够把这些可复用的业务独立出来,单独部署,经过分布式服务调用共同业务完成具体业务操做。
2.随着云计算技术的日趋成熟,咱们能够考虑租用云计算平台,按需付费,弹性扩充。
6、网站架构模式
1.分层(横向切分)。三层分别部署在不一样的服务器上,这样可使网站拥有更多的计算资源应对愈来愈多的用户访问。分层结构对网站支持高并发向分布式方向发展相当重要。
2.分割(纵向切分)。同一业务内部,若是规模过于庞大,能够考虑继续分割。好比购物业务能够进一步分割成机票酒店业务、3C业务、小商品业务等更细的粒度。
3.分布式
分布式优势:能够解决网站高并发的问题。
分布式缺点:a.分布式意味着服务调用必须经过网络,可能对性能形成比较严重的影响。
b.服务器越多,宕机的几率越高,一台服务器宕机可能致使不少应用不可访问,使网站可用性下降。
c.数据在分布式的环境中保持数据一致性也很困难,分布式事物也难以保证。
d.分布式致使网站依赖错综复杂,开发管理维护困难。
综上所述,分布式设计要视具体状况,切莫为了分布式而分布式。
经常使用的分布式有如下几种:
a.分布式应用和服务:将分层和分割后的应用和服务模块分布式部署
b.分布式静态资源:网站的静态资源如js、css、logo图片等资源独立分布式部署,并采用独立域名,即江湖中传说的动静分离。
c.分布式数据和存储:关系型数据库分布式、nosql数据库分布式。
d.分布式计算:Hadoop、MapReduce、Spark。
此外还有分布式配置、分布式锁、分布式文件系统等。
4.集群
说白了就是春运买火车票的时候额外增长一些售票窗口。
如何实现多台服务器网站的同步更新?
5.缓存
经常使用的缓存有如下几种:
a.CDN
b.反向代理
c.本地缓存
d.分布式缓存
6.异步
在单一服务器内部可经过多线程共享内存队列的方式实现异步,处在业务操做前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理;在分布式系统中,多个服务器集群经过分布式消息队列实现异步,分布式消息队列能够看做内存队列的分布式部署。
异步架构是典型的生产者消费者模式,二者不存在直接调用。
优势:a.提升系统可用性。
b.加快网站响应速度。
c.消除并发访问高峰。
7.冗余
a.至少两台服务器部署网站,防止忽然的宕机。
b.数据库除了按期备份,存档保存,实现冷备份外,为了保证在线业务高可用,还须要对数据库进行主从分离,实时同步实现热备份。
c.为了抵御地震、海啸等不可抗拒的突发天然灾难致使的网站彻底瘫痪,能够进行全球范围内部署灾备数据中心。(固然是牛逼吊炸天的公司喽)
8.自动化
自动化失效转移,将失效的服务器从集群中隔离出去,再也不处理系统中的应用请求。
9.安全
a.经过密码和手机验证码进行身份认证。
b.登陆、交易等操做须要对网络通讯进行加密,服务器端存储的敏感数据也要进行加密处理。
c.使用验证码防止机器人程序滥用网络资源攻击网站。
d.对于常见的用于攻击网站的XSS攻击、SQL注入进行编码转换等相应处理。
e.对于垃圾信息、敏感信息进行过滤。
f.对于交易转帐等重要操做根据交易模式和交易信息进行风险控制。
7、大型网站核心架构要素
1.性能
a.在浏览器端,能够经过浏览器缓存、使用页面压缩、合理布局页面、减小Cookie传输等手段改善。
b.使用CDN缓存热点数据。
c.在服务端,可使用本地缓存和分布式缓存加快请求处理过程,减轻数据库负载压力。
d.经过异步操做将用户请求发至消息队列等待后续任务处理,而当前请求直接返回响应给用户。
e.能够将多台应用程序服务器组成一个集群共同对外服务,应对多用户高并发,提高总体 处理能力。
f.代码层面,可使用多线程、改善内存管理等手段优化性能。
g.在数据库服务器端,索引、缓存、SQL优化等系能优化手段都已经比较成熟。还能够考虑使用NoSQL数据库。
2.可用性
a.网站高可用的主要手段是冗余,应用程序部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份。
应用服务器上不能保存请求的会话信息,不然服务器宕机,会话丢失,即便用户请求转发到其余服务器上也没法完成业务处理。
3.伸缩性
衡量架构的伸缩性的主要标准就是是否能够用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器是否能够提供和原来的服务器无差异的服务。集群中可容纳的总的服务器的数量是否有限制。
4.扩展性
网站的可伸缩架构的主要手段是事件驱动架构和分布式服务。
事件驱动架构一般是利用消息队列实现;分布式服务则是将业务和可复用服务分离开来。
5.安全性
衡量网站是否安全的标准是针对现存的和潜在的各类攻击与窃密手段,是否有可靠的应对策略。
8、架构
1.浏览器访问优化
减小http请求。主要手段:合并CSS、合并javascript、合并图片(经过CSS偏移控制)。
2.使用浏览器缓存
a.经过设置http头中的Cache-Control和Expires的属性。
b.在某些时候,静态资源文件的变化须要及时应用到客户端浏览器,这种情概,能够经过改变文件名实现,及更新整个js文件并非只是更新js文件中的内容,而是生成一个新的js文件并更新html文件中的引用。
c.使用浏览器缓存策略的网站在更新静态资源时,应采用一个文件一个文件逐步更新,并有必定的时间间隔,以避免用户浏览器忽然大量缓存失效,集中更新缓存,形成服务器负载骤增、网络堵塞的状况。
3.启用压缩
html、css、javascript文件启用GZip压缩。压缩会对服务器和浏览器产生必定的压力,因此要权衡考虑。
4.css放在页面最上面、JavaScript放在页面最下面
若是页面解析时就须要用到JavaScript,这时放到底部就不合适了。
5.减小cookie传输
太大的cookie会严重影响数据传输,所以慎重考虑哪些数据要写入cookie。
6.CDN加速
CDN可以缓存的通常是静态资源,如图片、文件、css、script脚本、静态网页等。
7.反向代理
安全功能、缓存功能、负载均衡提高网站并发能力。
9、应用服务器性能优化
1.分布式缓存
a.网站性能优化第必定律:优先考虑使用缓存优化性能。缓存的本质是一个内存的Hsah表。
2.合理使用缓存
a.缓存预热
缓存系统启动时就把热点数据加载好。
b.缓存穿透
若是由于不恰当的业务或者恶意攻击持续高并发地请求某个不存在的数据,因为缓存没有保存该数据,全部的请求都会落到数据库上,会对数据库形成很大压力,甚至崩溃。一个简单的对策就是将不存在的数据也缓存起来(其value值为null)。
3.分布式缓存架构
a.两种架构:一种是以JBossCache为表明的须要更新同步的分布式缓存;一种是以Memcached为表明的不互相通讯的分布式缓存。
b.异步操做
10、万无一失:网站的高可用架构
1.Session服务器
2.网站发布
3.自动化测试
目前比较流行的web自动化测试工具是Selenium。
11、网站的伸缩性架构
1.不一样功能进行物理分离实现伸缩。
具体能够分为如下两种:
a.纵向分离:将业务处理流程上的不一样部分分离部署。
b.横向分离:将不一样的业务模块分离部署。
2.负载均衡
a.HTTP重定向负载均衡(缺点是浏览器须要两次请求服务器才能完成一次访问,性能差,因此此种方案不推荐使用)
b.DNS域名解析负载均衡
大型网站老是部分使用DNS域名解析,利用域名解析做为第一级负载均衡手段,即域名解析获得的一组服务器并非实际提供web服务器的物理服务器,而是一样提供负载均衡服务的内部服务器,这组内部负载均衡服务器进行负载均衡,将请求分发到真实的web服务器上。
c.反向代理负载均衡(反向代理服务器转发请求在HTTP协议层面。优势是和反向代理服务器功能集成在一块儿,部署简单。缺点是反向代理服务器是全部请求和响应的中转站,其性能可能会成为瓶颈)
d.IP负载均衡(在网络层经过修改请求地址进行负载均衡)
e.数据链路层负载均衡(使用三角传输模式的链路层负载均衡是目前大型网站普遍使用的手段,Linux平台上最好的链路层负载均衡开源产品是LVS(Linux Virtual Server))
3.负载均衡算法
a.轮询
b.加权轮询
c.随机
d.最少链接:记录每一个应用服务器正在处理的链接数,将新到的请求分发到最少链接的服务器。
e.源地址散列:根据请求来源的IP地址进行Hash计算,获得应用服务器,这样来自一个IP地址的请求总在同一个服务器上处理。
4.分布式缓存集群
a.Memcached分布式缓存
5.分布式缓存的一致性Hash算法
6.关系数据库集群
a.MySQL集群伸缩性方案:数据写操做都在主服务器上,有主服务器将数据同步到其余的从服务器,数据库读操做都在从服务器上进行。
b.除了数据库主从读写分离,也能够将不一样业务数据表部署在不一样的数据库集群上,即俗称的数据分库。这种方式的制约条件是垮裤表不能进行Join操做。
c.单表数据过大的时候,还须要进行分片,将一张表拆开分别存储在多个数据库中。目前比较成熟的支持数据分片的分布式关系数据库产品主要有开源的Amoeba和Cobar。
7.NoSQL
目前使用最普遍的是Apache HBase。
12、网站的可扩展架构
1.分布式消息队列
十3、网站的安全架构
1.XSS攻击
XSS攻击即跨站脚本攻击。分为另种:一种是反射型XSS攻击;一种是持久型XSS攻击。
主要有两种防攻击手段:
a.消毒--即对某些html危险字符转义。
b.HttpOnly--即浏览器禁止页面JavaScript访问带有HttpOnly属性的Cookie,对存放敏感信息的cookie,可经过对该cookie添加HttpOnly属性,避免被攻击脚本窃取。
2.注入攻击
注入攻击主要有两种形式:SQL注入攻击和OS注入攻击。
a.SQL注入攻击--攻击者须要对数据库结构有所了解才能进行,攻击者获取数据库表结构信息的手段有以下几种:开源(Discuz搭建的论坛,数据结构是公开的)、错误回显(内部错误500错误会显示到浏览器)、盲注(根据页面变化状况判断sql语句的执行状况,据此猜想数据库结构)。
防护手段:
a.首先要避免攻击者猜想到表名等数据库表结构信息。
b.消毒--经过正则匹配,过滤掉请求数据中可能注入的sql,如“drop table等”。
c.参数绑定--强力推荐使用参数化,此方法是最好的防sql注入的方法。
3.CSRF攻击
CSRF(Cross Site Request Forgery,跨站点请求伪造),其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。
防护手段主要是识别请求者身份。主要有一下几种方法:
a.表单Token--在页面表单中增长一个随机数做为Token,每次响应页面的Token都不相同,正常页面提交的请求会包含该Token值,而伪造的请求没法得到该值,服务器检查请求参数中Token的值是否存在而且正确以肯定请求提交者是否合法。
b.验证码--体验很差,因此在必要时使用,如支付交易等关键页面。
c.Referer check--http请求头的Referer域中记录着请求来源,可经过检查请求来源,验证其是否合法(使用此功能实现图片防盗链)。
4.其余攻击和漏洞
a.Error Code--也称做错误回显。防护手段很简单:经过配置web服务器参数,跳转500页面到专门的错误页面便可。
b.Html注释--删除注释而后再上线。
c.文件上传--用户可能会上传可执行的程序,最有效的防护手段:经过文件过滤,只容许上传可靠的文件类型。
d.路径遍历--攻击者在请求的URL中使用相对路径,遍历系统未开放的目录和文件。防护方法:将js、css订资源文件部署在独立的服务器,使用独立域名,其余文件不使用静态的URl访问,动态参数不包含文件路径信息。
5.web应用防火墙
ModSecurity是一个开源的web应用防火墙。
除了开源的ModeSecurity,还有一些商业产品的web应用防火墙,如NEC的SiteShell。
6.网站安全漏洞扫描
不按期对网站的服务器进行扫描,查漏补缺。
7.信息加密技术及密钥安全管理
a.信息加密技术可分为三类:
单项散列加密--MD五、SHA
对称加密--DES算法、RC算法等
和非对称加密--RSA算法
8.分类算法
a.贝叶斯分类算法(会存在误判)。
b.TAN算法。
c.ARCS算法。
十4、淘宝架构演变
1.2003年LAMP架构
.
2.2004年java+Oracle+MVC框架(本身开发的Webx)+ORM框架(IBatis)
3.2006年
4.如今回归到开源的MySQL及NoSQL系统。有些路,走事后,再回头,不过是一览众山小。
5.秒杀系统的应对策略
a.秒杀系统应独立部署--防止拖垮主网站。
b.秒杀商品页面静态化--将商品描述、商品参数、成交记录和用户评价所有写入一个静态页面,用户请求不须要通过应用服务器的业务逻辑处理,也无需访问数据库。
c.租借秒杀活动网络宽带
d.动态生成随机下单页面URL--避免用户直接访问下单URL。
十5、大型网站典型故障
1.写日志引起的故障
故障缘由:大量日志占满磁盘空间
解决办法:关闭没必要要的日志
2.高并发访问数据库引起的故障
故障缘由:首页频繁访问数据库
解决办法:首页访问频繁,首页须要的数据能够从缓存服务器或者搜索引擎服务器获取。首页最好是静态的。
3.高并发状况下锁引起的故障。
故障缘由:单例对象多处使用了独一的this。
经验教训:使用锁操做要谨慎。
十6、架构师
没有懒惰的员工,只有没被激发出来的热情。
互联网正在并将继续改变这个世界,一切才刚刚开始,你我正生逢其时!
.................................................................................................................................................................................................................................................................................
以上内容出自李智慧的《大型网站架构》一书,这些只是本人的读书笔记,不少地方记录的不够详尽,哪位大虾若有兴趣,可自行下载原书阅读。