4.大型网站核心架构要素
2019-06-19 本文已影响0人
史小猿
-
性能
性能是一个网站的重要指标。因为性能问题几乎无所不在,所以优化性能的手段也非常多,从浏览器到数据库影响用户请求的所有环节都可以进行性能优化
- 浏览器端
- 浏览器缓存
- 页面压缩
- 合理布局
- 减少cookie传输
- 使用CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据。
- 使用反向代理,反向代理服务器可以在网站机房部署反向代理服务器,缓存热点文件,加快访问速度,减少服务器压力。
- 应用服务器端
- 缓存:本地或者分布式缓存,加快请求处理过程,减轻数据库压力。
- 异步:将用户请求发送到消息队列等待后续处理,而当前请求直接返回给用户。
- 代码层面,可以通过多线程、改善内存管理等手段优化性能
- 数据库端,可以通过索引、缓存、sql优化等优化性能
- jvm 根据业务特点优化垃圾收集器,减少gc停顿时间
- 网络编程使用nio(netty)提升性能
..............
-
可用性
网站高可用性的主要手段就是冗余,应用部署在多台服务器上同时提供访问,数据服务器在多台上相互备份,任何一台服务器宕机都不会影响使用,也不会导致数据丢失。
- 对于应用服务器来说,多台应用服务器通过一个负载均衡设备组成一个集群同时对外提供服务,任何一台服务器宕机,只需要把请求切换到其他服务器就能实现高可用,前提是宕机服务器不会保存会话信息,否则服务宕机,会话丢失,就算切到其他服务器也不能完成请求。所以应用服务器必须得是无状态的
- 对于存储服务器而言,服务器上存储着数据,需要对数据进行实时备份,当服务宕机时需要把请求转移到可用的数据服务器上。
-
伸缩性
所谓伸缩性,是指通过不断向集群中增加服务器,来缓解不断上升的用户访问压力和不断增长的数据存储和查询需求
- 对于应用服务器集群,只要服务器上不保存数据,所有服务都是对等的,那么可以通过使用合适的负载均衡策略就可以源源不断的往集群离增加服务器。
- 对于缓存服务器,加入新的服务器可能会导致缓存路由失效,进而缓存中大部分数据都无法访问。虽然缓存数据可以通过数据库重新加载,但是如果数据库压力太大,可能会导致整个应用崩溃,所以需要改进缓存路由算法来保证缓存数据的有效性。
- 关系型数据库虽然支持数据复制,主从热备等机制,但是很难做到可伸缩。因此数据库的可伸缩方案要在数据库外实现,通过路由分区等手段部署多个数据库的服务器组成一个集群
- 至于大部分NoSQL数据库产品,由于其天生就是为海量数据而生,因此其对可伸缩性的支持会非常好,只需要少量运维就能支持。
-
扩展性
衡量网站架构扩展性好坏的主要标准就是在网站增加新功能的时候,对现有功能透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。不同产品之间低耦合。
网站架构的可扩展的主要手段是事件驱动架构和分布式服务。
- 事件驱动架构通常利用消息队列实现,通过这种方式将消息生产和消息处理解耦。
- 分布式服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。新增产品通过调用可复用的服务实现自身业务逻辑,而对现有产品没有影响。可复用服务升级的时候,通过提供多版本服务对应用透明化,不需要强制应用同步变更。
大型网站为了保持市场地位,还会吸引第三方开发者,调用网站服务,使用网站数据开发周边产品,扩展网站业务。第三方开发者使用网站服务的主要途径是大型网站提供的开放平台接口。
-
安全性
互联网是开放的,任何人在任何地方都可以访问网站。网站的架构就是保护网站不受恶意攻击和访问,保护网站重要数据不被窃取。
衡量网站安全架构的标准就是针对现存和潜在的各种攻击与窃取手段,是否有成熟的应对方案