一 网站技术架构设计模式
如下所示网站基本分层
三层架构逻辑上可以部署在同一台物理机上,但随着网站业务的发展,必须要对已分层的模块进行分开部署,也就是三层结构分别部署在不同的服务器上。使网站拥有越来越多的计算资源以应对越来越多的用户访问。
网站越大,功能越复杂,服务与数据处理的种类也越来越多,将这些不同的功能与服务分割开来,包装成高内聚,低耦合的模块单元。一方面有助于软件的开发与维护。另一方面便于不同模块分布式部署,提高网站的并发能力与功能处理能力。
例如一个大型网站将购物,论坛,搜索,广告分割成不同的应用。由独立的团队负责部署在不同的机器上。
使用更多的计算机完成同样的工作,计算机越多,CPU,内存,存储资源也就越多,能够处理的并发访问量就越大,进而能够为更多的用户提供服务。
(1)分布式意味着服务调用要通过网络,可能对性能造成严重的影响。
(2)服务器增多,宕机的可能性也就概率也就增大了,一个服务器不可用,很有可能导致多个服务器不可用,使得网站可用性降低。
(3)分布式数据一致性难以得到保证,分布式事务难以控制,分布式部署增加管理的成本。
1.3.3.1 分布式应用与服务
将分层与分割后的业务模块独立部署,可以提供高并发,实现模块的复用
1.3.3.2 分布式静态资源
网站的静态资源如JS,CSS,Logo图片等独立部署,并采用独立的域名,即我们常说的网站的动静分离。可以减轻服务器压力,提高并发加载的速度。并且由前端团队来维护达到一个比较好的分工。
1.3.3.3 分布式数据与存储
大型网站要处理以P为单位的海量数据,单台机器就算进行了磁盘扩容的情况下也存储不了那么多大的容量的时候就采用分布式存储,除了对传统数据库进行分布式部署外,还要对nosql数据库进行分布式部署。
1.3.3.4 分布式计算
像搜索引擎的构建,数据仓库的数据分析统计,这些计算规模非常的庞大,目前很多企业都使用hadoop与mapreduce分布式计算框架来处理此类计算,目的是不移动数据,将计算程序分发到数据的位置加速计算能力。
1.3.3.5分布式协同
1.3.3.6 分布式文件系统
1.3.3.7 分布式任务调度
由于用户访问的集中,还需要将独立的服务器,集群化,多台服务器部署相同的应用构成一个集群,通过负载均衡策略对外提供服务。当其中一台机器发生故障,则负载均衡机制,将失效转移到集群中的其他服务器上,提高可用性。
用户的请求总是先到达,他的网络服务商哪里,在这里缓存一些网站的静态资源,可以以最大的速度返回给客户,如视频或着门户网站会将访问量大的热点内容缓存到CDN。
用户请求到达数据中心的时候,最先访问的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器,就能返回给客户。
在应用服务器本地缓存的热点数据,应用程序可以在本机内存中直接访问数据,而无须访问数据库。
大型网站的数据量非常庞大,即使只缓存一小部分,需要的内存空间也不是单机能承受的,所以除了本地缓存,还需要分布式缓存。将数据缓存在一个装门的分布式缓存集群中。
业务之间的消息传递不是同步调用的,而是将一个业务拆分成多个阶段,每个阶段之间通过共享数据的方式,异步执行进行协作。单独部署的时候,多线程共享内存的异步队列来实现异步,分布式部署的时候通过分布式消息队列来实现异步,可以看做内存队列的分布式部署。使用异步消息队列可以提高系统可用性,当消费者故障,生产者可以继续进行生产,数据可以堆积在消息队列中,等消费者恢复故障以后再回来对消息队列进行消费。将数据写入消息队列就可以直接响应给用户请求,减少响应延迟。消除并发访问高峰,访问的高峰期,可以把突然增加的访问数据放到消息队列中,等消费者依次去处理。
为保证服务器的高可用,负载再小的服务器也至少要部署两台构成一个集群。为保证数据库的高可用,也一样,要进行读写分离,提高访问效率。
网友评论