#第三章 大型网站核心架构要素算法
软件架构:有关软件总体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计数据库
软件架构须要关注的几个方面:缓存
- 系统功能需求(最基本的)
- 性能
- 可用性
- 伸缩性
- 扩展性
- 安全性
##3.1 性能 ##3.2 可用性 对于大型知名网站,可用性要达到99.99%。安全
网站高可用架构的前提是:必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或应用依然可用。服务器
高可用的主要手段是冗余
,应用部署到多台服务器上同时提供访问,数据存储到多台服务器上互相备份。架构
其余:软件开发过程保证质量,自动化测试,自动化发布,灰度发布等。并发
如何衡量一个系统架构设计是否知足高可用的目标? 就是假设系统中任何一台或多台服务器宕机时,已经出现各类不可预期的问题时,系统总体是否依然可用。负载均衡
伸缩性:经过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增加的数据存储需求。框架
衡量伸缩性的主要指标:是否能够用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器以后是否能够提供和原来的服务器无差异的服务。集群中可容纳的总的服务器数量是否有限制。分布式
对于 应用服务器集群,只要服务器上不存数据,全部服务器都是对等的,经过使用合适的负载均衡设备就能够向集群中不断加入服务器。
对于 缓存服务器集群,新加入的服务器会致使缓存路由失效,进而致使集群中大部分缓存数据没法访问。虽然缓存数据能够从新加载,可是若是应用严重依赖缓存,可能会致使整个网站崩溃。 须要改进缓存路由算法保证缓存数据的可访问性。
关系数据库,虽然支持数据复制,主从热备等机制,可是很难作到大规模集群的但是伸缩性。 关系数据库的集群伸缩方案须要在数据库以外实现,经过路由分区等手段将部署有多个数据库的服务器组成一个集群。
对于NoSQL来说,天生就是为了海量数据而生,对于伸缩性的支持都很好。
如何设计网站的架构使其可以 快速响应需求变化,是网站可扩展架构的主要目的。
主要实现手段是:事件驱动架构和分布式服务。
事件驱动架构一般使用消息队列实现,将用户请求和其余业务事件形成的消息发布到消息队列,消息的处理者做为消费者从消息队列中获取消息进行处理。经过这种方式将消息的产生和消息处理分离开,能够透明的增长新的消息生产者任务和新的消费者任务。
分布式服务:将业务和可复用服务分离开,经过分布式服务框架调用。新增产品能够经过调用可复用的服务实现自身的业务逻辑,而对现有产品没有影响。可复用服务升级或变动的时候,能够经过提供多版本服务队应用实现透明升级。
安全架构,主要是保护网站不受恶意访问和攻击,保护网站的重要数据不被 窃取。 衡量标准:针对现存和潜在的各类攻击与窃密手段,是否有可靠的应对策略。