先来说说模式:
每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地用该方案而不必做重复工作。
先来说说常见的网站架构模式。这里没有涉及具体实现过程,只是简单介绍其思想和原理,方便日后有用到再深入了解。
分层分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。
分层 | 功能 |
应用层
| 负责具体业务和视图展示,如网站首页以及搜索输入和结果展示 |
服务层 | 为应用层提供服务支持,如用户管理服务,购物车服务 |
数据层 | 提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等 |
分层架构还可以细分下去,比如说应用层可以细分为视图层和业务逻辑层。服务层可以细分为数据接口层和逻辑处理层。
分层结构对网站支持高并发向分布式发展至关重要,所以在网站规模很小的时候就应该采用分层的架构,这样将来网站做大时才能有更好地应对。
所以说我们在设计一个新项目的架构时,就需要考虑到分层。不能等到日后项目做大了,再重构就耗时耗力了。
分割
上面的分层是将软件在横向方面进行切分,而分割是在纵向方面对软件进行切分。将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。
比如在应用层,将购物、论坛、搜索、广告分割成不同的应用,由独立的团队负责,部署在不同的服务器上;
在同一个应用内部,如果规模庞大业务负责,会继续进行分割,比如说购物业务,可以分割为机票酒店业务、3C业务、小商品业务等更细小的粒度。
分布式 对于大型网站,分层和分割的主要目的是为了切分后的模块便于分布式部署。
利用分布式解决网站高并发的问题的同时,会带来其他问题:
分布式意味着服务调用必须通过网络,这可能对性能造成比较严重的影响;
o 服务器越多,服务器宕机的概率就越大;
o 数据的一致性问题,分布式事务难以保证;
o 开发管理维护困难。
所以说要量力而行,不要为了分布式而分布式。
常用的分布式方案有以下几种:
o 分布式应用和服务:将分层和分割后的应用和服务模块分布式部署,使不同应用复用共同的服务,便于业务功能扩展。
o 分布式静态资源:网站的静态资源如js、css、图片等独立分布式部署,并采用独立的域名。减轻应用服务器的负载压力,并通过独立 域名加快浏览器并发加载速度。
o 分布式数据和存储:数据量过大,一台机器无法存储。
o 分布式计算:后台业务需要处理,包括搜索引擎的索引构建、数据仓库的数据分析统计。通过Hadoop及MapReduce分布式计算框架 进行批处理计算
集群 使用分布式已经将切分后的模块独立部署,但是对于用户访问集中的模块,还需要将独立部署的服务器集群化,多台服务器部署相同应用构 成一个集群,通过负载均衡设备共同对外提供服务。
即使是访问量很小的分布式应用和服务,也会部署两台服务器构成一个小的集群,目的就是提高系统的可用性。
缓存 缓存是改善软件性能的第一手段。有以下几种方式:
o CDN:内容分发网络,部署在距离终端用户最近的网络服务商,在这里缓存网站的一些静态资源,就可以以最快的速度返回给用户。
o 反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问反向代理服务器,这里缓存网站的静态资源。
o 本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。
o 分布式缓存:数据量很大时,除了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通
信访问缓存数据 缓存有两个前提条件,
一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;
二是数据在某个数据段内有效,不会很快过期,否则缓存的数据就会因为已经失效而产生脏读,影响结果的正确性。
异步 系统解除耦合的重要手段是异步,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。
在单一服务器内部可以通过多线程共享内存队列的方式实现异步,处在业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理;
在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看作内存队列的分布式部署。
冗余 要保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份。
数据库除了定期备份,存档保存,实现冷备份外,还需要进行主从分离,实时同步实现热备份。
自动化 发布对网站是头等大事,发布过程自动化可以有效减少故障。自动化测试,自动化安全监测,自动化部署。自动化监控,自动化报警,自动化失效转移,自动化失效恢复。
作者:黑马程序员人工智能+Python培训学院
首发:http://python.itheima.com/