网站系统的进阶

大型网站技术架构》这本书作者提到大型网站是根据业务需求逐步演化而来的,而不是设计出来的。

在初始阶段,访问量并不大,所以应用程序、数据库、文件等所有的资源都在一台服务器上。

随着用户的访问量增多,系统的业务增多,数据存储的量越来越多,应该系统就需要和数据分离在不同的服务器上。

  随着业务的发展,就会发现一台服务器抗不过来了,所以将应用服务器与数据(文件、数据库)服务器分离。三台服务器对硬件资源的要求各不相同:应用服务器需要更快的CPU,文件服务器需要更大的磁盘和带宽,数据库服务器需要更快速的磁盘和更大的内存。分离之后,三个服务器各司其职,也方便针对性的优化。

随着业务的增加,尤其需要存储的数据量的增加,尤其到了TB级别或者更多的时候,数据库的服务器的部署和设计,可能就需要DBA来设计了,尤其大量数据的入库,怎样改善数据库的执行计划,让入库更快,在数据表上增加索引,分区,或者分区索引,在访问表时候,按时间分区等等。这些影响读取和写入数据库的因素,都要考虑进去。这时就需要专业的DBA来设计了。

      另外,对于应用系统来说,可以将数据分为主库和分库,实现对数据的读写分离。应用系统链接主库的数据源,在主库上建立视图,主库视图通过dblink链接分库的表。这样对于应用系统来说,数据访问就是透明的了。

缓存的使用无处不在,缓存的根本目的是加快访问速度。当数据库的访问压力过大的时候,就可以考虑使用缓存了。网站使用的缓存可以分为两种: 缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。

      本地缓存:比如在spring容器启动的时候,就可以,在serlvet的初始化的类中加载构造函数,同时hashmap等相关的集合将数据库表中的数据加载hashmap中作为本地缓存,这样当访问应用系统时,数据就从hashmap中获取。访问速度比从数据库服务器上获取要快。缓存中的数据需要更新,可以通过java的定时器,定时的从数据库中更新。

      远程的缓存服务器:比如,将redis,mongoDb等相关的nosql部署在专门的服务器上,作文专门的缓存服务器,毕竟服务器的存贮容量比应用服务器上的本地服务器要大的多,可以缓存的数据量更多。

分层

  分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责, 然后通过上层对下层的依赖和调用组成一个完整的系统。

  在大型网站架构中也采用分层结构,将网主占软件系统分为应用层、服务层、数据层。

  分层的好处在于:解耦合,独立发展,伸缩性,可扩展性。上面网站的进化史也凸出了分层的重要性。

  但是分层架构也有一些挑战, 就是必须合理规划层次边界和接口,在开发过程中,严格遵循分层架构的约束, 禁止跨层次的调用( 应用层直接调用数据层)及逆向调用(数据层调用服务层, 或者服务层调用应用层)。

分割

  分层强调的是横向切分,而分割是纵向切分, 上面网站进化史部分的业务拆分就包含了分割。

  分割的目标是高内聚、低耦合的模块单元

分布式

  分层和分割的一个主要目的是分布式部署,但分布式也有自己的问题:网络通信带来的性能问题,可用性,一致性与分布式事务,系统维护管理复杂度。

集群

  一个机器解决不了的问题,就用几个机器来解决,当服务无状态的时候,通过往集群增加机器就能解决大部分问题。对应网站进化史中“使用应用服务器集群改善网站的并发处理能力”

缓存

  缓存就是将数据存放在距离计算最近的位置以加快处理速度,同时大大减轻了数据提供者的压力

  大型网站架构设计在很多方面都使用了缓存设计:CDN、反向代理、本地缓存、分布式缓存

异步

  异步是解耦合的一个重要手段,常见的生产者-消费者模型就是一个异步模式。

  出了解耦合,异步还能提高系统可用性、加快响应速度、流量削峰

 

参考文献:https://www.cnblogs.com/xybaby/p/8907880.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值