从可用性战术分析来看:
应用层主要处理网站应用的业务逻辑,显著特点是应用的无状态性。对于应用服务器集群,实现这种服务器可用状态实时监测、自动转移失败任务的机制是负载平衡。负载平衡主要是用在业务量和数据量较高的情况下,当单台服务器不足以承担所有压力时通过负载均衡将流量分摊到一个集群组成的多台服务器上,以提高整体的负载处理能力。Session管理:1)Session复制:在几台服务器之间同步session对象,使得每台服务器上都保存所有用户的session信息。2)Session绑定:负载均衡的源地址hash算法。负载均衡服务器总是将来源于同一IP的请求分发到同一台服务器上。又称作会话黏滞。3)利用cookie记录session:将session记录在客户端4)Session服务器:利用独立不熟的session服务器(集群)统一管理session。2,服务层的高可用1)分级管理:将服务器进行分级管理,核心应用和服务优先使用更好的硬件。2)超时设置:在应用程序中设置服务超时时间。3)异步调用:应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。4)服务降级:通过拒绝服务(拒绝低优先级应用的调用,减少服务调用并发数,或者随机拒绝部分请求调用)和关闭功能(关闭部分不重要的服务)5)幂等性设计:在服务层保证服务重复调用和调用一次产生的结果相同。3,数据层的高可用保证数据存储高可用的主要手段是数据备份和失效转移机制。数据备份是保证数据有多个副本,任意副本都不会导致数据的永久丢失,从而实现数据的持久化;而失效转移机制则保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。CAP原理:一个提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区耐受性这三个条件。数据备份:1)冷备份:简单廉价/不能保证数据最终一致和数据可用性。2)热备份:异步热备份/同步热备份。异步方式试制多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写操作成功响应时只写成功了一份,存储系统会异步的写其他副本。同步方式是指多分数据副本的写入操作同步完成,即应用程序收到数据服务系统的写成功响应时,多分数据都已经写操作成功。失效转移:1)失效确认:心跳检测和应用程序访问失败报告2)访问转移:对于完全对等存储的服务器,其中一台宕机后切换到对等服务器上;若是不对等的,就需要重新计算路由选择存储服务器3)数据恢复:系统需要从间看的服务器复制数据将数据副本数目恢复到设定值4,高可用的软件质量保证1)网站发布2)自动化检测3)预发布验证4)代码控制主干开发、分支发布分支开发、主干发布5)自动化发布6)灰度发布5,网站运行监控不允许没有监控的系统上线1)监控数据采集用户行为日志收集服务器端日志收集客户端浏览器日志收集(页面中嵌入JavaScript脚本)服务器性能监控运行数据报告2)监控管理系统报警失效转移自动优雅降级《河北省重大需求征集系统 》中就基本包括以上所存在的大部分要求,例如对于服务管理方面,存在多个审核员,具备不同权限,而且存在一个超级管理员来分配其权限。
从可修改形式战术方面分析:
扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。
伸缩性:指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力1,构建可扩展的网站架构
设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提高模块的复用性。模块分布式部署以后具体聚合方式主要由分布式消息队列和分布式服务。2,利用分布式消息队列降低系统耦合性
1)事件驱动架构通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助时间消息的通信完成模块间合作,典型的EDA架构就是操作系统中常见的生产者消费者模式。最常用的是分布式消息队列。2)分布式消息队列如erlang开发的rabbitmq和java开发的activemq3,利用分布式服务打造可复用的业务平台
如果说分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息;那么分布式服务则通过接口分解系统耦合性,不同子系统通过相同接口描述进行服务调用。巨无霸应用系统问题;编译部署困难代码分支管理困难数据库连接耗尽新增业务困难解决方案就是拆分,将模块独立部署,降低系统耦合性。拆分开分为:横向拆分和纵向拆分两种。1)Web Service与企业级分布式服务缺点:臃肿的注册与发现机制低效的XML序列化手段开销相对较高的HTTP远程通信复杂的部署与维护手段2)大型网站分布式服务的需求与特点负载均衡失效转移高效的远程通信整合异构系统对应用最少侵入版本管理实时监控3,可扩展的数据结构
例如:NoSQL中的列族《河北省重大需求征集系统》中我们将一零散的统计查询功能放在一起方便用户的使用,而且在数据库方面也可以随时添加行列,用于改变数据。而且在本身的大系统上也算是几个大的模块拼接起来,随时也可以拆分用于修改重写。