架构:通俗的说法是“最高层次的规划,难以改变的决定”

    一般来说,除了当前的系统功能需求外,软件架构还需要关注性能,可用性,伸缩性,扩展性和安全性这5大要素。

一.性能:

    浏览器端:可通过浏览器缓存,使用页面压缩,合理布局页面,减少cookie传输等手段改善性能;还可使用CDN,是用户通过最短路劲获取数据;还可在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度。

    

    应用服务器端:可使用服务器本地缓存和分布式缓存,加快热点数据的请求速度,减轻数据库夫在压力;还可通过异步操作将用户请求发送至消息队列等待后续任务处理,当前请求直接返回响应;还可构建多台服务器的集群,提高整体处理能力。


    代码层面:使用多线程,改善内存管理。


    数据库服务器端:索引,缓存,SQL优化;NoSQL数据库通过优化数据模型,存储结构,伸缩特性等手段提高性能。


二:可用性:

    高可用的设计目标:服务器宕机时,服务或者应用依然可用!

    高可用的主要手段是冗余:

        1.应用部署在多台服务器上同时对外提供服务:通过负载均衡设备组成集群,任何一台宕机,            只需把请求切换到其他服务器,前提条件是服务器上不保留请求的会话信息。

        2.数据存储在多台服务器上互相备份:服务器宕机时,将数据访问转移到可用服务器上,并进            行数据恢复


    软件开发过程的质量保证:通过预发布验证,自动化测试,自动化发布,灰度发布等手段,减少将      故障引入线上环境的可能。


三:伸缩性:

    指通过不断向集群中加入服务器来缓解用户并发访问压力和不断增长的数据存储需求。

    应用服务器集群:只要服务器上不保存数据,所有服务器就是对等的,通过负载均衡设备可向集群                     中加入服务器。

    缓存服务器集群:新加入的服务器可能导致缓存路由时效,需要改进缓存路由算法保证缓存数据的                     可访问性。

    关系型数据库:虽支持数据复制,主从备份,但很难做到大规模集群的伸缩性,可通过路由分区等                   手段将多个服务器组成一个集群。

    NoSQL:先天为还销量数据处理而生,对伸缩性支持较好。


四.扩展性:

    目的:使网站架构能快速响应需求变化。


    主要手段:事件驱动架构和分布式服务。

    事件驱动通常利用消息队列实现,将用户请求和其他业务构成消息发布到消息队列,将消息产生和处理分离开,可透明的增加新的消息生产者任务或消费者任务。

    分布式服务:将业务和可复用服务分离开,通过分布书服务框架调用,新增业务可调用可复用服务。


五:安全性:

    保护网站不受恶意访问和***,保护网站重要数据不被窃取。