系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是非功能的设计及决策,它们相互关联成一个整体,共同构成了软件系统的架构。
除了系统功能需求,软件架构还要关注性能、可用性、伸缩性、扩展性和安全性这 5 个架构要素,可以通过考察这些要素衡量一个软件架构设计的优劣。
1、性能:就是响应快慢。优化网站性能的手段很多,从浏览器到数据库,影响用户请求的所有环节都可进行性能优化。在浏览器端,通过浏览器缓存、页面压缩、合理布局页面、减少 Cookie 传输等手段改善性能。还可以使用 CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据。可以在网络机房部署方向代理服务器,缓存热点文件,加快请求响应过程,减轻数据库负载压力。在应用服务器端,可以使用本地缓存和分布式缓存,通过缓存内存中的热点数据处理用户请求,加快请求处理过程,减轻数据库负载压力。也可以通过异步操作将用户请求发送至消息队列等待后续任务处理,而将当前请求直接返回响应给用户。可以将多台服务器组成集群。在数据库服务器端,索引、缓存、SQL优化等手段都已比较成熟。NoSQL 优势也日趋明显。
2、可用性:不可用就是服务器宕机。网站高可用的主要手段就是冗余,应用部署在多台服务器上通过负载均衡设备组成集群共同对外提供服务,数据存储在多台服务器上互相备份。
3、伸缩性:主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新服务器,加入新服务器是否可以提供和原来的无差别服务。对于应用服务器,一般来说都是对等的,通过使用负载均衡设备就可以向集群不断加入服务器。对于缓存服务器,加入新服务器可能导致缓存路由失效,需改进缓存路由算法。关系数据库很难做到大规模集群可伸缩性,集群伸缩性方案须在数据库外实现,如通过路由分区将多个数据库服务器组成集群。NoSQL 产品先天就是为海量数据而生,其对伸缩性支持非常好。
4、扩展性:其它架构要素关注的是非功能需求,而扩展性架构直接关注网站的功能需求。衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以不需任何改动或少改动就能上线新产品。不同产品之间低耦合。网站可扩展架构的主要手段是事件驱动架构和分布式服务。
5、安全性
为实现以上的技术架构目标,大型互联网公司提出了许多解决方案,上面针对每个要素列举了一些,下面将系统列举一些共同模式。
1、分层:如应用层、服务层、数据层。
2、分割:将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。
3、分布式:在大型网站,分层分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。但分布式也带来了问题:网络性能、一个服务器宕机会导致很多应用不可用、数据一致性、分布式事务、网络依赖错综复杂、开发管理维护困难。在网站应用中,常见的分布式方案有:分布式应用和服务、分布式静态资源、分布式数据和存储、分布式计算、分布式配置、分布式锁和分布式文件。
4、集群:提高系统可用性。
5、缓存:CDN、反向代理、本地缓存、分布式缓存
6、异步:异步架构是典型的生产者消费者模式,两者不存在直接调用。在单一服务器内可通过多线程共享内存队列的方式实现异步,处在业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理;在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可看作内存队列的分布式部署。
7、冗余:服务器冗余运行,集群。数据冗余备份,冷备份热备份。
8、自动化:目前大型网站的自动化架构设计主要集中在发布运维方面。发布过程自动化包括:自动化代码管理,自动化测试,自动化安全检测,自动化部署。运维自动化包括:自动化监控,自动化报警,自动化失效转移,自动化失效恢复,自动化降级,自动化分配资源。
9、安全
参考资料:
1. 李智慧. 《大型网站技术架构》