Java架构 - 高并发解决方案的实战总结,看完这些就足够了!

发布者:上海IT外包来源:http://www.lanmon.net点击数:1363

1.应用程序和静态资源的分离
开始时,应用程序和静态资源一起保存。当并发量达到一定水平时,需要将静态资源保存到专用服务器。静态资源主要包括图片,视频,js,css和一些资源文件。由于这些文件没有状态,因此分离相对简单,可以直接存储在响应服务器中。通常,使用特殊域名进行访问。
不同的域名允许浏览器直接访问资源服务器,而无需访问应用程序服务器。架构图如下:
2.页面缓存
页面缓存是缓存应用程序生成的页面,因此您不需要每次都生成页面,这样可以节省大量的CPU资源。如果将缓存的页面放入内存,速度会更快。如果您使用Nginx服务器,您可以使用自己的缓存功能,当然,您也可以使用专用的Squid服务器。页面缓存的默认失效机制由缓存时间处理。当然,可以在修改数据后手动禁用相应的缓存。
页面缓存主要用于数据很少更改的页面,但很少页面很少更改,并且一小部分数据更改频繁。例如,显示文章的页面通常可以是静态的,但如果文章后面有“顶部”和“步骤”功能,并且显示的响应数量,则此数据更改的频率相对较高,会影响静电。此问题可用于创建静态页面,然后使用Ajax读取和修改响应数据,以便您可以同时使用页面缓存和高频率的某些数据的实时显示。
事实上,每个人都知道最有效和最便宜的是纯静态html页面,所以我们试图让我们网站上的页面使用静态页面。这是最有效的方法。但对于大量内容和经常更新的网站,我们无法完成所有手动实施。所以我们有我们共同的信息发布系统CMS,就像我们经常访问的门户网站的新闻频道,甚至是他们的其他渠道。信息发布系统管理和实施。信息发布系统可以实现最简单的信息输入并自动生成静态页面。它还可以具有通道管理,权限管理,自动爬行等功能。对于大型网站,它具有一组高效率。可管理的CMS至关重要。除了门户和信息发布类型的网站,对于具有高交互性要求的社区类型网站,尽可能多的静态也是提高性能的必要手段。社区中的帖子和文章是静态静态和更新的。重新静态化的时间也是一个使用频繁的策略,比如Mop的大杂烩就是利用这样的策略,以及网易社区。
同时,html静态化也是一些缓存策略所使用的手段。对于经常使用数据库查询但在系统中几乎没有内容更新的应用程序,您可以考虑使用html静态,例如论坛中论坛的公共设置信息。主流论坛可以在后台管理并存储在数据库中。该信息实际上由前台程序大量调用,但更新频率非常小。您可以考虑在后台更新期间静态化这部分内容,从而避免大量数据库。访问请求。
3.聚类和分发
群集对于每个服务器都是相同的功能。处理请求时可以调用它。它主要用于卸载。
分布式是将不同的服务放入不同的服务器。处理请求可能需要多个服务器,这可以提高一个请求的处理速度,并且集群和分布也可以同时使用。
有两种集群方式:一种是在静态资源集群中。另一个是应用程序集群。静态资源聚类相对简单。应用程序集群过程中的核心问题是会话同步问题。
会话同步可以通过两种方式处理:一种是在会话更改后自动同步到其他服务器,另一种是使用程序来管理会话。所有群集服务器都使用相同的会话。 Tomcat默认使用第一种方法。它可以通过简单的配置实现。第二种方法可以使用专用服务器来安装高效的缓存程序,例如Mencached来管理会话。应用程序通过覆盖Request并覆盖getSession方法来获取服务器中的Session。
群集的另一个核心问题是负载平衡,这是在收到请求后专门分配给该服务器的问题。这个问题可以通过软件处理或使用专用硬件(如F5)来解决。
反向代理
反向代理是指客户端直接访问的服务器实际上不提供服务。它从另一台服务器获取资源并将结果返回给用户。
数字:
4.1反向代理服务器和代理服务器之间的区别
代理服务器的作用是代表我们获取所需的资源并将结果返回给我们。我们想要获得的资源是我们的门主动告诉代理服务器的资源。例如,如果我想访问Facebook,但我无法直接访问它,那么我可以让代理服务器访问并将结果返回给我们。反向代理服务器是我们的门通常访问服务器的时候。服务器本身调用其他服务器资源并将结果返回给我们。我不知道。
我们主动使用代理服务器。这是给我们的。他不需要拥有自己的域名。反向代理服务器是服务器自己的试用版。我不知道。它有自己的域名。我访问它并访问它。普通网址没有区别。
反向代理服务器有三个主要功能:
1.可以作为前端服务器与实际处理请求的服务器集成;
2.可以做负载均衡
例如,转发请求可以将不同类型的资源请求转发到不同的服务器以进行处理。
5. CDN
Cdn实际上是一个特殊的群集页面缓存服务器。与公共集群中的多页缓存服务器相比,它主要是存储它的地方和分配请求的方式。 CDN服务器分布在全国各地。当收到用户请求时,请求被分发到最合适的CDN服务器节点以获取数据。例如,中国联通的用户被分配到中国联通的节点,上海的用户被分配到上海的节点。
CDN的每个节点实际上是页面缓存服务器。如果没有用于请求资源的缓存,则将从主服务器检索它,否则它将直接返回到缓存页面。
在解析域名时,CDN分配请求(负载平衡)由专用CDN域名解析服务器完成。通常的做法是使用CNAME尝试将域名解析为特定域名,然后使用专用CDN服务器将域名解析为相应的CDN节点。如图所示。
访问CDN的DNS服务器的第二步是使用CNAME记录的目标域名的NS记录指向CDN的DNS服务器。 CDN的每个节点也可以与多个服务器集群。
6.底层优化
所有上述架构都基于最初引入的基础架构。在许多地方,数据需要通过网络传输。如果可以加速网络传输的速度,整个系统将得到改进。
7.数据库集群和库表哈希
大型网站有复杂的应用程序这些应用程序必须使用数据库。面对大量访问,数据库瓶颈很快就会暴露出来。这时,数据库很快就无法满足应用程序,因此我们需要使用数据库。集群或库表哈希。
就数据库集群而言,许多数据库都有自己的解决方案。 Oracle,Sybase等都有非常好的解决方案。常用的MySQL提供的Master/Slave是一个类似的解决方案。你使用什么样的数据库,参考相应的解决方案可以实现。上面提到的数据库集群受到在体系结构,成本和可伸缩性方面使用的DB类型的限制。因此,我们需要从应用程序的角度考虑改进系统架构。库表散列是最常见,最有效的解决方案。 。我们在应用程序中安装业务和应用程序或功能模块以分离数据库。不同的模块对应于不同的数据库或表,然后根据特定策略(例如用户表)执行页面或功能的较小数据库散列。根据用户ID进行表散列,可以低成本提高系统性能,并具有良好的可扩展性。搜狐论坛使用这样的框架将论坛用户,设置,帖子和其他信息从数据库中分离出来,然后根据部分和ID对帖子和用户的数据库和表进行哈希处理。最后,可以在配置文件中执行简单配置。它允许系统随时添加低成本数据库以补充系统性能。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部