一个小网站,比如个人网站,可以用最简单的html静态页面来实现,配上一些html图片达到美化效果,所有页面都存放在一个目录下,这样的网站对系统架构和性能要求非常高。很简单,随着互联网业务的不断丰富,网站相关技术经过多年的发展,已经细分为非常精细的方面。尤其是大型网站,使用的技术非常广泛,从硬件到软件,编程语言、数据库、WebServer、防火墙等领域都有很高的要求,比不上原来简单的html静态网站。
大型网站,例如门户网站。面对大量用户访问和高并发请求,基本解决方案集中在以下几个环节:使用高性能服务器、高性能数据库、高效编程语言、高性能Web容器。但除了这些方面,大型网站面临的高负载、高并发问题并没有根本的解决办法。
上面提供的几种解决方案在一定程度上也意味着更大的投入,而且这些解决方案存在瓶颈,扩展性不好。下面小编从低成本、高性能和高扩展性的角度来谈谈一些经验。
其实我们都知道纯静态的html页面效率最高,成本也最低,所以我们尽量使用静态页面来实现我们网站的页面。这种最简单的方法实际上是最有效的方法。但是,对于内容量大、更新频繁的网站,我们无法一一手动实现,于是出现了我们常用的信息发布系统CMS,比如我们经常访问的各个门户网站的新闻频道,甚至他们的新闻频道。其他渠道。由信息发布系统管理和实施。信息发布系统可以实现最简单的信息录入,自动生成静态页面。还可以具有频道管理、权限管理、自动爬取等功能。对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户网站和信息发布类网站,对于交互性要求高的社区类网站,尽量保持静态也是提升性能的必要手段。社区内的帖子和文章都是实时静态的,并且有更新。重新静态化也是一种有时被广泛使用的策略。猫扑的大杂烩使用了这样的策略,网易社区也是如此。
同时,html静态化也是一些缓存策略使用的手段。对于系统中频繁使用数据库查询但内容更新量较小的应用,可以考虑使用html静态化来实现,比如论坛中的论坛的公开设置信息。这些信息目前所有主流论坛都可以后台管理,并存储在数据库中。其实很多这些信息都是前台程序调用的,只是更新频率很小。后台更新时可以考虑将这部分内容设为静态,避免大量数据库。访问请求。
众所周知,对于web服务器来说,无论是Apache、IIS还是其他容器,图片都是最耗费资源的,所以需要将图片与页面分离。这基本上是大型网站将使用的策略。他们有独立的图像服务器,甚至许多图像服务器。这样的架构可以减轻提供页面访问请求的服务器系统的压力,并且可以保证系统不会因为图像问题而崩溃。应用服务器和镜像服务器可以进行不同的配置优化。比如apache可以尽量配置ContentType。更少的支持和尽可能少的 LoadModule 确保更高的系统消耗和执行效率。
大型网站有复杂的应用程序,这些应用程序必须使用数据库。当面对大量的访问时,数据库的瓶颈很快就会出现。这时候一个数据库很快就无法满足应用了,所以我们需要使用数据库Cluster或者库表hash。
在数据库集群方面,很多数据库都有自己的解决方案。Oracle、Sybase 等都有很好的解决方案。MySQL提供的常用的Master/Slave也是类似的解决方案。你用的是什么DB,请参考对应的解决方案。解决方案来实施。
上面提到的数据库集群在架构、成本和可扩展性方面受到所使用的数据库类型的限制。因此,我们需要从应用的角度考虑改进系统架构。库表哈希是最常用和最有效的解决方案。. 我们在应用中安装业务和应用或者功能模块来分离数据库,不同的模块对应不同的数据库或者表,然后按照一定的策略对一个页面或者功能进行较小的数据库hash,比如user table, Hash the根据用户ID创建表,可以低成本提高系统性能,具有良好的可扩展性。搜狐的论坛采用了这样的结构,将论坛的用户、设置、帖子等信息从数据库中分离出来,然后根据版块和ID对帖子和用户的数据库和表进行hash,最后可以在配置中简单配置文件。可以随时将低成本数据库添加到系统中,以补充系统性能。
缓存这个词已经被技术触及,很多地方都用到了缓存。缓存在网站架构和网站开发中也非常重要。这是最基本的两种缓存。稍后将描述高级和分布式缓存。
对于架构上的缓存,熟悉Apache的人可以知道,Apache提供了自己的缓存模块,也可以使用额外的Squid模块进行缓存,两者都可以有效提升Apache的访问响应能力。
对于网站程序开发的缓存,Linux上提供的Memory Cache是一种常用的缓存接口,可以在web开发中使用。比如在Java开发的时候,可以调用MemoryCache来缓存和共享一些数据。一些大型社区使用它。这样的结构。另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java有更多,.net不是很熟悉,相信一定有。
镜像是大型网站常用来提高性能和数据安全性的一种方法。镜像技术可以解决不同网络接入商和地区造成的用户访问速度差异。比如ChinaNet和EduNet的区别,就促使很多网站在教育网建了一个镜像站点,数据定期或者实时更新。关于镜像的详细技术,这里不再赘述。有许多专业的现成解决方案架构和产品可供选择。还有便宜的软件实现思路,比如Linux上的rsync等工具。
负载均衡将是大型网站解决高负载访问和大量并发请求的终极解决方案。
负载均衡技术发展多年,有很多专业的服务商和产品可供选择。个人遇到过一些解决方案,有两种架构供大家参考。
(1)硬件四层交换
四层交换利用三层和四层报文的头信息,根据应用区间识别业务流,将整个区间段的业务流分配给合适的应用服务器处理。第四层交换功能就像一个虚拟IP,指向物理服务器。它传输的业务遵循多种协议,包括HTTP、FTP、NFS、Telnet或其他协议。这些服务基于物理服务器,需要复杂的负载平衡算法。在IP世界中,服务类型由终端TCP或UDP端口地址决定,四层交换中的应用范围由源和终端IP地址、TCP和UDP端口决定。
在硬件四层交换产品领域,有一些比较知名的产品可供选择,比如Alteon、F5等,这些产品价格贵但物超所值,可以提供卓越的性能和灵活的管理能力。雅虎中国为其近 2,000 台服务器使用了三四台 Alteon。
(2)四层软件切换
在大家了解了硬件四层交换机的原理之后,基于OSI模型的软件四层交换机应运而生。此方案原理相同,但性能稍差。但是,仍然很容易满足一定的压力。有人说软件实现方式其实更灵活,处理能力完全取决于你对配置的熟悉程度。
我们可以使用Linux中常用的LVS来解决软件的四层切换。LVS 是 Linux 虚拟服务器。提供基于心跳的实时灾难响应解决方案,提高了系统的健壮性,提供灵活的虚拟VIP。能够同时满足多个应用程序需求的配置和管理功能对于分布式系统来说是必不可少的。
使用负载均衡的一个典型策略是在软件或硬件四层交换的基础上构建一个squid集群。这个想法被用于许多大型网站,包括搜索引擎。这种架构是低成本、高性能和强大的。随时向架构添加或删除节点非常容易。我将抽出时间详细梳理一下这样的结构并与您讨论。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习