快好知 kuaihz订阅观点

 

如何用java开发语言构建大型网站系统

程序员希望努力学习,改进技术,获得更好的收入。虽然技术进步和高收入并不容易实现,但也有规律可循。

成熟的大型网站(如淘宝、京东等)的系统架构从设计之初就不具备完整的高性能、高可用性和安全性的特点。它总是随着用户数量的增加和业务功能的扩展而演进和改进。在这个过程中,开发模式、技术架构和设计理念也发生了很大的变化,甚至技术人员也从几个人发展成为一个部门甚至一条生产线。因此,成熟的系统架构是随着业务的扩展而完善的,而不是一蹴而就的;不同业务特点的系统会有自己的优先级,比如淘宝,解决海量商品信息的搜索、订购和支付,比如腾讯,要解决数亿用户的实时消息传输,百度要处理海量的搜索请求,他们都有各自的行业服务特点和系统架构也各不相同。然而,我们也可以从这些不同的网站背景中找出共同的技术。这些技术和手段可以广泛应用于大型网站系统的体系结构中。接下来,我们将通过介绍大型网站系统的演进过程来了解这些技术和手段。

1、 第一现场建筑

初始架构、应用程序、数据库和文件都部署在一台服务器上,如图所示:

2、 应用程序、数据和文件的分离

随着业务的扩展,一台服务器已经不能满足性能要求,因此应用程序、数据库、文件都部署在不同的服务器上,并根据服务器的用途配置不同的硬件,以达到最佳的性能效果。

3、 利用cache提高网站性能

在硬件优化性能的同时,还通过软件优化性能。在大多数网站系统中,缓存技术将用于提高系统性能。缓存的使用主要来源于热数据的存在。大多数网站访问遵循28条原则(即80%的访问请求,最终落在20%的数据上),因此我们可以缓存热数据,减少这些数据的访问路径,提高用户体验。

常用的缓存实现方式有本地缓存和分布式缓存。当然,还有CDN、反向代理等,后面会讨论。顾名思义,本地缓存就是在应用服务器上本地缓存数据,这些数据可以存在于内存或文件中。OSCache是一个常见的本地缓存组件。本地缓存的特点是速度快,但由于本地空间有限,数据量有限。分布式缓存的特点是可以缓存大量的数据,并且很容易扩展。在门户网站中经常使用它,而且它的速度不如本地缓存快。常用的分布式缓存是memcached和redis。

4、 利用集群技术提高应用服务器性能

作为网站的门户,应用服务器将承担大量的请求。我们经常通过应用服务器集群共享请求的数量。在应用服务器前部署一个负载平衡服务器,根据分发策略调度用户请求并将请求分发到多个应用服务器节点。

常用的负载均衡技术硬件是F5,价格相对昂贵,软件是LVS,nginx,haproxy。LVS是四层负载平衡。根据目标地址和端口选择内部服务器。Nginx是七层负载平衡,haproxy支持四层和七层负载平衡。可以根据消息内容选择内部服务器。因此,LVS的分布路径优于nginx和haproxy,具有更高的性能。Nginx和haproxy更易于配置。例如,它们可以用于动态和静态分离(根据请求消息纸张的特性,选择静态资源服务器或应用程序服务器)。

5、 数据库读/写分离和数据库/表分离

随着用户数量的增加,数据库成为最大的瓶颈。提高数据库性能的常用方法是读写分离和表分离。顾名思义,读写分离就是将数据库分为读写数据库,通过主备功能实现数据同步。将子数据库和子表分为水平和垂直两部分,水平切换是对用户表等大型数据库表进行拆分。垂直分段是根据不同的业务进行切换,例如用户业务和商品业务相关的表放在不同的数据库中。

6、 利用CDN和反向代理提高网站性能

如果我们的服务器都部署在成都的机房中,四川用户的访问速度会更快,北京用户的访问速度会更慢。这是因为四川和北京分别属于中国电信和中国联通的不同发达地区。北京用户通过互联网路由器需要经过很长的路径才能访问成都的服务器,而且返回路径相同,所以数据传输时间相对较长。在这种情况下,CDN常常被用来解决这个问题。CDN将数据内容缓存到操作员的计算机室。用户在接入时,首先从最近的运营商处获取数据,大大减少了网络接入的路径。专业的CDN运营商包括蓝迅和旺素。

反向代理部署在网站的机房中。当用户请求到达时,反向代理首先访问反向代理服务器。反向代理服务器缓存的数据返回给用户。如果没有缓存数据,应用服务器将继续获取它,这也降低了获取数据的成本。反作用是squid,nginx。

7、 使用分布式文件系统

随着用户和业务量的增加,产生的文件越来越多,单一的文件服务器已经不能满足需求。需要分布式文件系统支持。常见的分布式文件系统是NFS。

8、 使用NoSQL和搜索引擎

对于海量数据查询,我们可以使用NoSQL数据库和搜索引擎来获得更好的性能。不是所有的数据都应该放在关系数据中。常见的NoSQL包括mongodb和redis,搜索引擎包括Lucene。

9、 应用服务器业务拆分

随着业务的进一步扩展,应用程序变得非常臃肿。此时,我们需要将百度等应用业务拆分为新闻、网页、图片等业务。每个业务应用程序负责相对独立的业务操作。服务之间的通信是通过消息或共享数据库来实现的。

10、 构建分布式服务

此时,我们发现每个业务应用程序都会使用一些基本的业务服务,如用户服务、订单服务、支付服务和安全服务,这些是支持每个业务应用程序的基本元素。我们提取这些服务并使用部分服务框架构建分布式服务。淘宝的Dubbo是个不错的选择。

大型网站的架构根据业务需要不断完善,并根据不同的业务特点进行具体设计和考虑。本文只描述了一些技术和手段,一个正规的大型网站将涉及。

如果您仍然有这些问题,成熟的web架构师需要学习哪些核心技能?Java程序员如何成为Internet架构师?Java在架构构建中扮演什么角色?如何成为年收入几十万的建筑师? 

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:何用  何用词条  构建  构建词条  语言  语言词条  大型  大型词条  开发  开发词条  
热点

 半导体厂商Analog拟以210...

【TechWeb】7月14日消息,据国外媒体报道,半导体厂商Analog周一宣布,拟以210亿美元收购竞争对手Maxim,这将是今年最大交易之一。这项交易将以全...(展开)