大型网站技术架构剖析

核心提示本文借鉴与:>大型网站系统的特点高并发,大流量 40亿。PV。page view。3.5亿,IP。高可用,高可用MySQL。7*24小时不间断运行。海量数据用户分布广泛,网络情况复杂安全环境恶劣需求快速变更,发布频繁渐进式发展网站架构演化发

本文借鉴与:<<大型网站技术架构:核心原理与案例分析>>大型网站系统的特点

  • 高并发,大流量 40亿。

    page view。

    3.5亿,IP。

  • 高可用,高可用MySQL。7*24小时不间断运行。

  • 海量数据
  • 用户分布广泛,网络情况复杂
  • 安全环境恶劣
  • 需求快速变更,发布频繁
  • 渐进式发展
网站架构演化发展历程初始阶段的网站(特点:没人)应用程序、数据库、文件都在一个服务器上使用缓存改善网站性能网站访问的特点和二八定律一样:80%的业务访问集中在20%的数据上。

所以如果把这一小部分数据缓存在内存中,可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能。网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布缓存服务器上的远程缓存。本地缓存的访问快一些,但受应用服务器内存限制,缓存数据量有限,远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,理论上做到不受内存容量的限制的缓存服务。

数据库读写分离网站在使用缓存后,使绝大部分数据操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中,缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。目前大部分的主流数据库都提供主从热备功能,通过配置两台数据主从关系,可以将一台数据库服务的数据更新同步到另一台服务器上。

网站利用数据库的这一功能,实现数据库的读写分离,从而改善数据库负载压力。

使用分布式文件系统和分布式数据库系统任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库,文件系统也是一样,需要使用分布式文件系统。分布式数据库是网站数据库拆分的最后手段,只有在单表规模非常大的时候才用。

不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。业务拆分大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分成不同的产品线,如大型购物网站就会将首页、商铺、订单、买家、卖家等拆分成不同的产品项,分归不同的业务团队负责。具本技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系,也可以通过消息队列进行数据分发,当然最多还是通过访问同一个数据存储系统来构成一个关联的完整系统。

网站架构设计误区1.一味追随大公司的解决方案2.为了技术而技术3.企图用技术解决所有问题大型网站架构模式为了解决大型网站面临的高并发访问、海量数据处理、高可靠运行等一系列问题与挑战,大型互联网公司在实践中提出了许多解决方案,以实现网站高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标。这些解决方案又被更多网站重复使用,从而逐渐形成大型网站架构模式。网站架构模式1.分层分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。在大型网站架构中也采用分层结构,将网站软件系统分为应用层、服务层、数据层.2.分割网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。

大型网站分割的粒度可能会很小。比如在应用层,将不同业务进行分割,例如将购物、论坛、搜索、广告分割成不同的应用,由独立的团队负责,部署在不同的服务器上;在同一个应用内部,如果规模庞大业务复杂,会继续进行分割,比如购物业务,可以进一步分割成机票酒店业务、3C 业务,小商品业务等更细小的粒度。而即使在这个粒度上,还是可以继续分割成首页、搜索列表、商品详情等模块,这些模块不管在逻辑上还是物理部署上,都可以是独立的。同样在服务层也可以根据需要将服务分割成合适的模块。

3.分布式对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完成同样的功能,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。常用的分布式方案1.分布式应用和服务2.分布式静态资源3.分布式数据和存储4.分布式计算5.分布式配置6.分布式文件系统4.集群使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块(比如网站的首页),还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。

因为服务器集群有更多服务器提供相同服务,因此可以提供更好的并发特性,当有更多用户访问的时候,只需要向集群中加入新的机器即可。同时因为一个应用由多台服务器提供,当某台服务器发生故障时,负载均衡设备或者系统的失效转移机制会将请求转发到集群中其他服务器上,使服务器故障不影响用户使用。所以在网站应用中,即使是访问量很小的分布式应用和服务,也至少要部署两台服务器构成一个小的集群,目的就是提高系统的可用性。

5.缓存缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代CPU 越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。缓存技术:内容分发网络 反向代理本地缓存 分布式缓存使用前题:1.数据访问热点不均衡2.是数据在某个时间段内有效,不会很快过期6.异步大型网站架构中,系统解耦合的手段除了前面提到的分层、分割、分布等,还有一个重要手段是异步,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。

单服务器:通过多线程共享内存队列的方式实现异步,处在业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理分布式系统:多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看作内存队列的分布式部署。特性:只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响.提高系统可用性加快网站响应速度消除并发访问高峰7.冗余网站需要 7X24 小时连续运行,但是服务器随时可能出现故障,特别是服务器规模比较大时,出现某台服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。

访问和负载很小的服务也必须部署至少两台服务器构成一个集群,其目的就是通过冗余实现服务高可用。数据库除了定期备份,存档保存,实现冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离,实时同步实现热备份。为了抵御地震、海啸等不可抗力导致的网站完全瘫痪,某些大型网站会对整个数据中心进行备份,全球范围内部署灾备数据中心。网站程序和数据实时同步到多个灾备数据中心。

8.自动化在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前大型网站的自动化架构设计主要集中在发布运维方面。网站在运行过程中可能会遇到各种问题:服务器宕机、程序Bug、存储空间不足、突然爆发的访问高峰。

网站需要对线上生产环境进行自动化监控,对服务器进行心跳检测,并监控其各项性能指标和应用程序的关键数据指标。如果发现异常、超出预设的阈值,就进行自动化报警,向相关人员发送报警信息,警告故障可能会发生。在检测到故障。

 
友情链接
鄂ICP备19019357号-22