`

常见的网站服务器架构及其演化历程

阅读更多

一.常见网站服务器架构

        [只是大框架介绍,实际使用中的不容易注意的细节太多了,需要经验的积累,才能运用娴熟]

        以下的架构都是在假设已经优化过linux内核的情况下进行。

1.初级篇:(单机模式)

        假设配置:(Dual core 2.0GHz,4GB ram,SSD)基础框架:apache(PHP) + Mysql  /  IIS + MSSQL(最基础框架,处理一般访问请求)

        进阶1:替换Apache为Nginx,并在数据库前加上cache层【数据库的速度是最大的瓶颈】            Nginx(PHP) + Memcache + Mysql (此时已经具备处理小型访问量的能力)

        进阶2:随着访问量的上涨,最先面临的问题就来了:CGI无法匹配上Nginx的高IO性能,这时候可以通过写扩展来替代脚本程序来提升性能,C扩展是个好办法,但是大家更喜欢用简单的脚本语言完成任务,Taobao团队开源了一个Nginx_lua模块,可以用lua写Nginx扩展,这时候可处理的并发已经超越进阶1 一个档次了。

        Nginx(nginx_lua or C) + Memcache + Mysql  (此时处理个同时在线三四千人没有问题了)

        进阶3:随着用户的增多,Mysql的写入速度成了又一大瓶颈,读取有memcache做缓存,但写入是直接面对Mysql,性能受到了很大阻碍,这时候,要在Nginx和Mysql中间加入一层写缓存,队列系统就出场了,就以RabbitMQ为例,所有写入操作全部丢到这只兔子的胃里面,然后屁股后面写个接应程序,一条条的拉出来再写入mysql。而RabbitMQ的写入效率是Mysql的N倍,此时架构的处理能力又上一阶层。 (此时的并发吞吐能力已经可以处理万人左右在线)

 

2.中级篇:(分而治之)

        此时我们在单机优化上已经算是达到极限,接下来就要集群来显示作用了。

        数据库篇: 数据库总是在整个环节中是吞吐能力最弱的,最常见的方法就是sharding。            sharding可以按多种方法来分,没有定式,看情况。可以按用户ID区段分,按读写分等等,可用参考软件:mysql proxy(工作原理类似lvs)

        缓存篇:memcache一般采用的是构建memcache pool,将缓存分散到多台memcache节点上,如何将缓存数据均匀分散在各节点,一般采用将各节点顺序编号,然后hash取余对应到各个节点上去。这样可以做到比较均匀的分散,但是有一个致命点就是,如果节点数增加或减少,将会带来几乎80%的数据迁移,解决方案我们在高级篇再提。

        WEB服务器篇: web服务器集群的建设,最常见的就是lvs方式(memcache pool同样可以如此组建),lvs的核心就是调度节点,调度节点负责将流量通过算法分散到各个节点上,因调度所耗资源很少,所以可以产生很高的吞吐率,后台节点数量可以任意增删,但此法弊病就是如果调度节点挂了,则整个集群都挂了,解决方案我们在高级篇提。

        方法2:参见 HAProxy - The Reliable, High Performance TCP/HTTP Load Balancer

 

3.高级篇:(高可用性+高可扩展性的集群)

        单点调度故障解决:

        集群的好处显而易见,但是有一个弊端就是单节点进行调度,如果节点出现故障,则整个集群全部都无法服务,对此的解决方案,我们使用keepalived来解决。Keepalived for Linux

        keepalived是基于VRRP协议(VRRP协议介绍)的,请一定先了解VRRP协议后再进行配置。

        keepalived可以把多台设备虚拟出一个IP,并自动在故障节点与备用节点之间实现failover切换。这样我们配置两台货多台lvs调度节点,然后配置好keepalived就可以做到lvs调度节点出现故障后,自动切换到备用调度节点。(同样适用于mysql)

        memcache集群扩展解决:

        memcache因为我们一般采用的都是hash后除以节点数取余,然后分配到对应节点上,如果节点数出现变化,以前的缓存数据将基本都不能命中。  

        解决方法:consistent hashing   简介:一致性哈希

        consistent hashing大概的思路就是,把hash后的值保证在 0 ~ (2^32)-1 的数值上,然后把这一连串数字对应映射到一个想象的圆上。

        把要存储的各个值hash后,放到圆上,如图


        然后把cache节点也用同样的hash方法,映射到圆上,然后每个刚才hash过的value顺时针寻找离自己最近的节点,这个节点就是存储它的节点。


        为了提高存储的平衡性,算法还可以加入虚拟节点的概念,即每个实际cache节点,会在圆上对应N个虚拟的节点,这样可以提高算法的命中率,更加平衡。

        consistent hashing原理:Consistent hashing and random trees

 

二.系统架构演化历程

1.初始阶段架构


        初始阶段的小型系统、应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP。

        特征:应用程序、数据库、文件等所有的资源都在一台服务器上。

        描述:通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。

 

2.应用服务和数据服务分离


        好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver。

        特征:应用程序、数据库、文件分别部署在独立的资源上。

        描述:数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。

 

3.使用缓存改善性能


        特征:数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。

        描述:系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。

 

4.使用应用服务器集群

        在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢。

        特征:多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。

        描述:使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。

 

5.数据库读写分离


        享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢。

        特征:多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。

        描述:使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,使得服务器的负载压力不在成为整个系统的瓶颈。

 

6.反向代理和CDN加速


        特征:采用CDN和反向代理加快系统的 访问速度。

        描述:为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN与反向代理的基本原理都是缓存。

 

7.分布式文件系统和分布式数据库

        随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作。

        特征:数据库采用分布式数据库,文件系统采用分布式文件系统。

        描述:任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。分布式数据库是系统数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。

 

8.使用NoSQL和搜索引擎

        特征:系统引入NoSQL数据库及搜索引擎。

        描述:随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

 

9.业务拆分


        特征:系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。

        描述:为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

        纵向拆分:将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。

        横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。

 

10.分布式服务


        特征:公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。

        描述:随着业务越拆越小,应用系统整体复杂程度呈指数级上升,由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。

 

文章来源:http://www.zhihu.com/question/20657269

  • 大小: 22.9 KB
  • 大小: 33.3 KB
  • 大小: 50.4 KB
  • 大小: 52.5 KB
  • 大小: 61 KB
  • 大小: 120.9 KB
  • 大小: 90.7 KB
  • 大小: 101.4 KB
  • 大小: 113 KB
  • 大小: 111.1 KB
  • 大小: 4.5 KB
  • 大小: 17.3 KB
  • 大小: 25.8 KB
分享到:
评论

相关推荐

    产品的架构演化过程及部分互联网公司架构分析

    产品的架构演化过程及部分互联网公司架构分析。 客户层:支持PC浏览器和手机APP。差别是手机APP可以直接访问通过IP访问,反向代理服务器。 前端层:使用DNS负载均衡,CDN本地加速以及反向代理服务; 应用层:网站...

    大型网站架构演化发展历程

    起初的网站鉴于用户量、访问量较少,只需要一台服务器足以,应用程序、数据库、文件等其所有资源放在一太服务器上就已经足够满足此时的需求,这时候网站的架构就几个简单组成部分如下图随着网站业务需求的发展,...

    SAP技术架构的发展历程

    进入R/3时代,SAP引入了三层客户机/服务器架构,配备了图形用户界面,增强了用户体验。此时,SAP不仅保留了ABAP,还通过ALE/RFC和IDoc提供了对外接口,使得不同系统间的交互成为可能。 1999年,mySAP.com的推出标志...

    大数据时代证券证券交易系统架构演化V2-SACC2021年中国系统架构师大会.pdf

    在大数据时代,证券证券交易系统的架构演化经历了漫长而复杂的过程,这一过程不仅包含了技术上的革新,也反映了市场环境和业务需求的变化。以下将详细介绍文中提到的各个知识点。 首先,证券交易系统的诞生与发展...

    后SOA主义,微服务架构演化之道(25页).pdf

    【架构演化的历程】 1. **“加”阶段**:随着新业务的不断上线,系统规模扩大,耦合度增加。 2. **“减”阶段**:引入服务化,将大块的业务逻辑分解成独立的服务,实现解耦。 3. **“乘”阶段**:微创新,采用新...

    网站架构技术

    大型网站架构演化发展历程 初始阶段 应用服务和数据服务分离 使用缓存改善网站性能 缓存类型 本地缓存 分布式缓存 缓存产品 redis 业界主流 memcached 解决问题 数据库...

    面向服务架构的演化和应用 (2011年)

    最开始,项目的需求相对简单,只需要一个基本的客户端/服务器架构。因此,最初的系统采用了经典的三层架构,包括表示层、逻辑层和数据访问层。表示层主要负责用户界面的展示,逻辑层处理业务逻辑,数据访问层则负责...

    阿里巴巴中文站架构实践

    通过镜像站点解决了灾备问题,并对网站框架进行了安全性的增强,使得网站能够过滤掉常见的安全漏洞。 第五代网站架构的改造始于2010年底,这代架构的使命在于实现更高的敏捷性、开放性和用户体验。其中,网站架构...

    微服务架构的应用性能监控.pdf

    听云微服务化历程是指,从单体架构到微服务架构的演化过程。在这个过程中,听云从单体架构开始,逐步将核心组件微服务化,最后形成微服务架构。 听云微服务化历程包括: * 微服务架构下的应用性能监控:使用监听云...

    大型项目架构演进过程及思考的点

    淘宝作为一个典型的大型电商平台,其服务端架构经历了从单一服务器到复杂分布式系统的演化。该架构主要包括以下几个层次: 1. **安全体系系统**:确保数据和服务的安全,涵盖数据安全、应用安全和前端安全等多个...

    linux企业实战之网站架构详解

    1. 网站架构演化发展历程 初始阶段的网站(特点:没人)应用程序、数据库、文件都在一个服务器 应用服务和数据服务分离 随着网站业务的发展,一台服务器逐渐不能满足需求:性能越来越差,存储空间不足。这是就需要...

    计算机软件体系结构 ——大型网站架构演变和知识体系

    #### 网站架构演变历程 1. **物理分离应用和数据库**:最简单的方案是将应用和数据库分开部署到不同的机器上,以提升各自的性能表现。 2. **页面缓存或静态化**:随着访问量的增加,响应速度开始变慢。通过采用...

    架构之美中文文字版(_Reilly)

    常见的架构结构包括但不限于客户端-服务器架构、微服务架构、分布式系统架构等。每种架构都有其特点和适用场景,选择合适的架构结构对于项目的成功至关重要。 - **1.4 好的架构**:讨论了评价一个架构是否优秀的...

    指数级增长业务下的服务架构改造

    其次,架构演化中不可避免地会涉及到数据库技术的选择与应用。在增长迅速的业务场景下,传统的关系型数据库(如MySQL)在面对大规模数据时容易成为性能瓶颈,因此需要考虑采用NoSQL数据库如Cassandra来解决动态扩容...

    Ebay的架构发展

    Ebay作为全球知名的电子商务平台,其架构的演化体现了互联网发展的历程,同时也代表了在巨大流量和高并发环境下的架构设计和技术选型的最佳实践。了解Ebay的架构发展历程,对于IT行业人员理解大型分布式系统的设计、...

    系统架构师培训之软件架构设计.pdf

    - **架构风格**:如客户端-服务器、微服务等。 - **架构模式**:如MVC(Model-View-Controller)、观察者模式等。 - **架构决策**:关于技术选择、第三方库集成等。 3. **架构设计原则** - **Liskov替换原则 ...

    Java架构核心宝典.pdf

    在大型网站架构方面,分析了大型网站系统的特点以及网站架构的演化,涉及秒杀架构设计、数据库架构的发展历程,以及如何通过分布式数据库与NoSQL数据库优化数据库性能。 在搜索引擎的应用上,提到了创建索引的原理...

    LinuxONE总体技术架构介绍.pdf

    CBOD的成长历程经历了漫长岁月,传承至今已演化为成熟的核心银行应用体系。 CBOD架构设计: CBOD架构设计是基于层次化和模块化的设计理念,具有优秀的系统弹性。架构控制模组是CBOD的主线,协调各组件之间的相互...

Global site tag (gtag.js) - Google Analytics