让网站运营更简单
让搜索引擎更喜欢的网站
立即咨询
福利,定制网站送小程序, 名额有限,先到先得
早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转型,涉及到以下环节改造。
主要环节业务拆分:将整个网站业务拆分成不同的应用,每个应用独立部署维护,应用之间通过RPC或消息队列通信集群化(应用服务器;基于RPC的微服务应用等)LVS负载均衡,负责将请求转发给不同业务集群反向代理服务器,常用的如Nginx。
应用服务器,servlet容器,如tomcat应用和数据服务分离,分别部署在不同的服务器后端应用合理分层,通常分为表现层或网关层、业务逻辑层、数据持久层缓存分为两种:本地缓存;分布式缓存CDN化静态内容部署到CDN,就近获取,加速网站响应。
数据库读写分离数据库采用主从热备,应用服务器在写数据时访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库分库分表,引入分布式数据框架引入NoSQL,支持海量数据存储借助elastics search等开源搜索引擎。
异步化,系统解耦缩短业务流程,加快网站访问速度消除并发访问高峰架构五要素:高性能可用性(Availability)伸缩性(Scalability)扩展性(Extensibility)安全性1、高性能性能的测试指标主要有:
响应时间:指应用执行一个操作需要的时间并发数:指系统能够同时处理请求的数目QPS:指单位时间内系统处理的请求量系统性能计数器:描述服务器或者操作系统性能的一些数据指标性能优化,根据网站分层架构,可以分为三大类:
ript 放在页面最下面减少 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 劫持等手段。
攻击与防御Error Code表单 Token验证码jsonp请求的,Referer 校验SQL 注入html 危险字符转义XSS 攻击:跨站点脚本攻击(Cross Site Script)对js转义,使其失去执行功能,只作为纯字符串展示
校验;通过Referer识别。网站安全漏洞扫描
本文图文来源于网络,版权属于原作者或网站,内容为作者观点,内容版权归原作者所有、本站不对文章中的任何观点负责,内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容,请联系管理员,一经查实,将立刻删除、维护您的正当权益。
扫一扫,关注我们