如何打造一个高并发,处理海量数据,高性能,易扩展,可伸缩,高可用的网站?

来源:互联网 发布:淘宝2000多张真人晒单 编辑:程序博客网 时间:2024/03/29 23:07

简而言之,采用分布式系统,分布式应用和服务,分布式数据和存储,分布式静态资源,分布式计算,分布式配置和分布式锁。

负载均衡,故障转移,实现高并发

高可用:

主要是利用冗余数据的原理,应用和服务器部署在多台机器上,数据存储部署在多台机器上,在多台机器上利用mysql的主从分离实现多态服务器数据相互备份,万一有一台服务器宕机,直接转移另外一台数据服务器上读取数据。也不会导致数据丢失。

对于应用服务器,可以通过nginx负载均衡实现设备组成一个集群,如果有服务器宕机,就需要把请求切换到其他服务器上,这样级可以实现高可用,但是,在应用服务器上不能保存请求的会话信息,服务器宕机,会话丢失,即使将用户请求转发到其他服务器上也无法完成业务处理。

对于存储服务器,它是存储数据,数据需要实时备份,当服务器宕机时,只需要将请求转移到其他可用的服务器上即可。

集群:可伸缩性

伸缩性是指可以动态的向集群服务器中添加一个节点或者减少一个节点。

但是,对于缓存服务器,添加节点或者减少节点都会导致数据不可读,虽然可以通过从新访问数据库获得数据,但是,如果应用已经严重依赖缓存,读取那些无法访问的数据,也会导致整个网站瘫痪,所以要改进路由算法来保证缓存数据的可读性。

异步:各个系统之间越独立,它们之间关系越少,越好

单一服务器可以通过多线程实现共享内存队列的方式实现异步,将处在业务前面的线程将输出写入队列,后面的线程将从队列中读取数据进行处理。在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息可以看成是内存队列的分布式部署。

1.松耦合,异步架构是典型的消费者和生产者模式,两者之间不存在直接调用,只要保持数据结构一致,彼此功能可以随意改动没有任何影响,可扩展性高。

2.提高可靠性,一旦消费者服务器发声故障,数据会在消费者消息队列中堆积,不会影响生产者可以继续处理业务请求,系统整体表现无故障,消费者服务器恢复后,继续处理消费者消息队列数据。

3.加快网页反应速度,处在业务处理前的生产者将消息传递给消息队列后,不需要等待消费者返回消息就可以直接返回,响应延迟减少。比如:秒杀业务等。

4.消除并发访问高峰,双11等活动高峰,可能会造成网站并发量大,负载过重,响应延迟,严重甚至宕机,使用消息队列就会将请求数据的消息放入消息队列中,等服务器依次处理,就不会造成服务器压力大,负载过重等情况。

冗余:

利用服务器冗余运行,数据冗余备份,这样当某台服务器宕机的时候,可以将其上的服务和数据访问转移到其他服务器上。

访问和负载很小的服务也必须部署至少两台服务器构成的一个集群,其目的就是通过冗余实现高可用。数据库除了定期备份,实现冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离(ameba),实时同步实现热备份。

0 0