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