一步步带你,如何网站架构

何为大型网站-大型网站特性

既然说的是大型网站架构,那么架构的背后自然是解决人因面对大型网站特性而带来的问题。这样可以先给大家说下大型网站的特性,这些特性带来的问题就是人要解决的问题

  1. 高并发、大流量:PV 量巨大;
  2. 高可用:7*24 小时不间断服务;
  3. 海量数据:文件数目分分钟 xxTB;
  4. 用户分布广泛,网络情况复杂:网络运营商;
  5. 安全环境恶劣:黑客的攻击;
  6. 需求快速变更,发布频繁:快速适应市场,满足用户需求;
  7. 渐进式发展:慢慢地运营出大型网站;

大型网站目标

既然说到了大型网站的特性,那么解决这些特性带来的问题要达到什么目标呢?如下:

一步步带你,如何网站架构

大型网站架构目标

每个目标背后面临着技术、设计、维护等诸多方面的挑战; 而目标本身的期望值也会根据实际情况进行调整,这也意味着网站架构建设是个不断调整的过程。

有了问题,也定了伟大的目标,那么网站在不同阶段面对不同的问题,是如何解决的?又是如何一步步成长为大型网站架构,实现这些伟大的目标呢?

如何网站架构

首先,什么是大型网站架构呢?

其实大型网站架构的概念对于每一个开发者来说很笼统、很模糊,正如盲人摸象,看到的、了解到的只是很小的一部分,大部分情况下我们只是负责架构中的一小块内容,所以很难清晰地给出具体定义。这就是所谓“不识庐山真面目 只缘身在此山中”的尴尬吧。所以我们要跳出来,站在宏观的角度,从整体到细节实现来认识大型网站架构。

那么从宏观的角度怎么去认识大型网站架构呢?正如前面几篇《细品架构系列》所描述对架构的认识,按照问题识别—>概念认知—>架构切分的思路,来分析大型网站架构的诞生:

  1. 问题识别:当前什么问题、谁的问题、问题边界;
  2. 概念认知:通过分析问题,会产生哪些概念,统一概念认知,达成沟通交流规范;
  3. 架构切分:根据概念来解决问题,如何架构切分,产生哪些架构,提出具体解决方案;

PS:上面的三个步骤具体如何识别、认知、切分,请详细参考前面几篇《细品架构系列》文章,可能使你会对架构有重新的认识。

在进行分析大型网站架构的演进之路前,首先我们要明确的两个价值观:

  1. 核心价值:随网站所需灵活应对;大型网站不是从无到有一步就搭建好一个大型网站,而是能够伴随小型网站业务的渐进发展,慢慢地演化成一个大型网站;
  2. 驱动力量:网站的业务发展—业务成就了技术,事业成就了人,而不是相反;

还有,大型网站架构演进必须避免的几个误区:

  1. 一味追随大公司的解决方案;
  2. 为了技术而技术–>常见问题;
  3. 企图用技术解决所有问题:技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段去解决;

架构体系演进

单机时代

草根时期,快速开发网站并上线。当然,通常只是先试水,用户规模也没有形成,经济能力和投入也非常有限应用程序、数据库、文件等所有资源都集中在一台 Server上,典型案例:基于 LAMP 架构的 PHP 网站;

一步步带你,如何网站架构

单机时代(纯依赖RDBMS)

优点:简单、快速迭代达成业务目标;

缺点:存在单点、谈不上高可用;

技术点:应用设计要保证可扩展;

缓存出场

有一定的业务量和用户规模了,想提升网站速度,于是,缓存出场了

一步步带你,如何网站架构

单机时代+缓存出场

优点:简单有效、方便维护;

缺点:存在单点、谈不上高可用;

技术点:客户端(浏览器)缓存、前端页面缓存、页面片段缓存、本地数据缓存/数据库缓存、远程缓存;

如上图,缓存可以分为:

  1. 页面缓存:客户端缓存,减少对网站的访问;
  2. 本地缓存:访问速度快,但数据量有限,减少对DB查询;
  3. 远程缓存:远程访问,可以集群,因此容量不受限制;

数据服务与应用分离

市场反响还不错,用户量每天在增长,数据库疯狂读写,逐渐发现一台服务器快撑不住了。于是,决定把数据服务和APP做分离

一步步带你,如何网站架构

数据服务与应用分离

优点:简单有效、方便维护、提高不同Server对硬件资源的利用率;

缺点:存在单点、谈不上高可用;

技术点:文件服务器部署、数据库服务器,扩展数据访问模块;

分离后三台 Server 对硬件资源的需求各不相同:

  1. 应用服务器:需要更快更强大的 CPU;
  2. 数据库服务器:需要更快的硬盘和更大的内存;
  3. 文件服务器:需要更大的硬盘;

数据库读写分离

单台数据库也感觉快撑不住了,一般都会尝试做“读写分离”。由于大部分互联网“读多写少”的特性所决定的。Salve的台数,取决于按业务评估的读写比例。

一步步带你,如何网站架构

数据库读写分离

优点:简单有效、降低数据库单台压力;

缺点:读写分离,增加程序难度,架构变复杂,维护难度增加;

技术点:数据库主从同步部署,扩展数据访问模块,实现读写分离;

应用服务集群

数据库层面是缓解了,但是应用程序层面也出现了瓶颈,由于访问量增大,加上早期程序员水平有限写的代码也很烂,人员流动性也大,很难去维护和优化。所以,很常用的办法还是“堆机器”。

一步步带你,如何网站架构

应用出现瓶颈 负载均衡集群

优点:增加服务器和HA机制,系统性能及可用性得到保证;

缺点:应用之间缓存、Session一致性问题;

技术点:负载均衡;

通过集群解决高并发、海量数据问题的常用手段,实现系统的可伸缩性。通过负载均衡调度器,可将用户访问分发到集群中的某台 Server 上,应用服务器的负载压力不再成为整个网站的瓶颈。

集中式缓存、Session集中存储

加机器谁都会加,关键是加完之后得有效果,加完之后可能会引发一些问题。例如非常常见的:集群应用之间页面输出缓存和本地缓存一致性的问题,Session保存的问题……

一步步带你,如何网站架构

集中式缓存 Session集中存储

优点:应用之间缓存、Session一致,存储无限制,可以扩展;

缺点:不如本地缓存访问快,缓存服务器、Session服务器等仍存在单点问题;

技术点:缓存服务器部署、Session集中存储方案;

动静分离

动静分离也是提高网站响应速度的一种常用方式。将动态请求与静态请求分离开,尽量减少对应用服务器的压力。同时,可以再进一步对静态请求,进行缓存,以加快响应速度。可以需要开发人员配合(把静态资源放独立站点下),也可以不需要开发人员配合(利用7层反向代理来处理,根据后缀名等信息来判断资源类型)。

一步步带你,如何网站架构

使用动静分离

优点:减轻应用负载压力,针对静态文件缓存;

缺点:静态文件缓存更新失效问题;

技术点:动静分离、静态文件缓存方案;

反向代理和CDN加速网站响应

使用反向代理和CDN加速网站响应:CDN 和反向代理的基本原理都是缓存,区别在于:

  1. CDN部署在网络提供商的机房;
  2. 反向代理则部署在网站的中心机房;

使用 CDN 和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

一步步带你,如何网站架构

使用反向代理和 CDN 加速网站响应

优点:减轻应用负载压力,异地缓存有效解决不同地方用户访问过慢的问题;

缺点:成本大幅增加,架构进一步复杂化,也维护难度进一步增大,静态文件缓存更新失效问题;

技术点:CDN、反向代理方案;

使用NoSQL和搜索引擎

到这里,已经基本做到了DB层面和应用层面的横向扩展了,可以开始关注一些其它方面,例如:站内搜索的精准度,对DB的依赖,开始引入全文索引、NoSQL

NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

一步步带你,如何网站架构

使用NoSQL和搜索引擎

优点:降低DB依赖;

缺点:单点问题,谈不上高可用;

技术点:NoSQL、搜索引擎、分布式;

到目前为止,一个能够承载日均百万级访问量的中型网站架构基本介绍完了。

如何保证高可用

在做扩展满足了基本的性能需求后,我们会逐渐关注“可用性”(也就是我们通常听别人吹牛时说的SLA、几个9)。如何保证真正“高可用”,也是个难题。

对关键应用/服务,做集群冗余负载,这也是保证高可用比较常用的手段:

  1. 文件系统、数据库系统集群;
  2. 静态内容服务器集群;
  3. CDN服务器集群;
  4. 反向代理服务器集群;
  5. 负载均衡调度器集群;
  6. 分布式NoSQL服务器集群;
  7. 搜索引擎服务器集群;
  8. 分布式缓存服务器集群;
  9. 分布式Session服务器集群;

一步步带你,如何网站架构

使用集群冗余负载 保证高可用

优点:集群负载,保证高可用;

缺点:数据一致性、数据有状态问题;

技术点:负载调度器、集群方案;

截止目前为止,都没有怎么去改动应用程序的架构,或者说通俗点,都不怎么需要大面积的修改代码。

如果上面那些手段都用光了,还是支撑不住怎么办?不停的加机器也不是办法啊?

应用垂直拆分

随着业务越来越复杂,网站的功能越来越多,虽然部署层面是采用的集群,但是应用程序架构层面还是“集中式”的,这样会导致很多耦合,不便于开发、维护,而且容易“一荣俱损”。所以,通常会把网站拆分出不同的子站点来单独宿主。

通过分而治之的手段将整个网站业务分成不同的产品线,如首页、商铺、订单、卖家、买家等拆分成不同的产品线,分归不同的业务团队负责。各个应用之间可以通过建立一个超链接建立关系,也可以通过消息队列进行数据分发。

一步步带你,如何网站架构

应用垂直拆分(分压,解耦)

优点:降低耦合、分压;

缺点:应用架构复杂;

技术点:业务抽取拆分;

业务垂直分库

应用都拆了,由于单个数据库的连接,QPS,TPS,I/O处理能力都非常有限,DB层面也可以去做垂直分库操作。

一步步带你,如何网站架构

业务垂直分库 分压 解耦

优点:降低DB耦合、分压DB;

缺点:数据访问模块复杂;

技术点:业务抽取拆分;

分布式服务化

拆分应用和DB之后,其实还是会有很多问题。不同的站点,里面可能会有相同逻辑和功能的代码。当然,对于一些基础的功能我们可以封装DLL或者Jar包去到处提供引用,但是这种强依赖也很容易造成一些问题(版本问题、依赖关系等处理起来非常麻烦)。

既然每一个应用系统都需要执行许多相通的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。这样,传说中的SOA的价值就得到体现了。

一步步带你,如何网站架构

分布式服务化(解耦,去重复)

优点:服务统一管理,提供重用度;

缺点:应用架构更复杂;

技术点:业务抽取拆分、服务化技术方案;

消息队列

应用、服务之间还是会出现一些依赖问题,这时候,高吞吐量的解耦利器出现了

一步步带你,如何网站架构

消息队列(服务间异步解耦 高吞吐量)

优点:提高吞吐量、应用、服务之间解耦;

缺点:存在消息消费延迟问题;

技术点:消息队列技术方案;

分库分表

最后,再介绍一个大型互联网公司都用的绝技–分库分表。个人经验,不是业务发展和各方面非常迫切,不要轻易走这一步

因为分库分表谁都会干,关键是拆完之后怎么办。目前,市面上还没有完全开源免费的方案,能让你一劳永逸地解决数据库拆分问题。

分库分表:

  1. 横向拆分;
  2. 纵向拆分;
  3. 分布式数据库访问层;
  4. 数据库中间件(代理);

网站架构总结

上面讲述了在网站业务发展的不同阶段,会面临不同的问题,针对不同的问题,会选择不同的架构。大型网站架构就是在不同阶段时解决不同问题的过程中慢慢演进来的。

最后几句话,送给有缘的你:

  1. 一切以解决业务目标为首要任务;
  2. 没有以业务为目标的任何架构、技术,都是毫无意义的耍流氓;
  3. 再牛逼的架构、再牛逼的技术,不能够解决业务的问题,你也只能算是会架构、会技术的工匠,而不能算是真正意义上的架构师;
  4. 业务成就了技术,平台成就了人,事业成就了人,而不是相反;

本文思维导图,如下:

一步步带你,如何网站架构


width="990" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_1" name="aswift_1" style="word-wrap: break-word; box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: none; border-width: 0px; border-style: initial; max-width: 100%; left: 0px; position: absolute; top: 0px;">
width="700" height="60" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_2" name="aswift_2" style="word-wrap: break-word; box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: none; border-width: 0px; border-style: initial; max-width: 100%; left: 0px; position: absolute; top: 0px;">

一步步带你,如何网站架构

目录头条资讯

何为大型网站-大型网站特性
既然说的是大型网站架构,那么架构的背后自然是解决人因面对大型网站特性而带来的问题。这样可以先给大家说下大型网站的特性,这些特性带来的问题就是人要解决的问题

  1. 高并发、大流量:PV 量巨大;
  2. 高可用:7*24 小时不间断服务;
  3. 海量数据:文件数目分分钟 xxTB;
  4. 用户分布广泛,网络情况复杂:网络运营商;
  5. 安全环境恶劣:黑客的攻击;
  6. 需求快速变更,发布频繁:快速适应市场,满足用户需求;
  7. 渐进式发展:慢慢地运营出大型网站;

大型网站目标

既然说到了大型网站的特性,那么解决这些特性带来的问题要达到什么目标呢?如下:

一步步带你,如何网站架构

大型网站架构目标

每个目标背后面临着技术、设计、维护等诸多方面的挑战; 而目标本身的期望值也会根据实际情况进行调整,这也意味着网站架构建设是个不断调整的过程。

有了问题,也定了伟大的目标,那么网站在不同阶段面对不同的问题,是如何解决的?又是如何一步步成长为大型网站架构,实现这些伟大的目标呢?

如何网站架构

首先,什么是大型网站架构呢?

其实大型网站架构的概念对于每一个开发者来说很笼统、很模糊,正如盲人摸象,看到的、了解到的只是很小的一部分,大部分情况下我们只是负责架构中的一小块内容,所以很难清晰地给出具体定义。这就是所谓“不识庐山真面目 只缘身在此山中”的尴尬吧。所以我们要跳出来,站在宏观的角度,从整体到细节实现来认识大型网站架构。

那么从宏观的角度怎么去认识大型网站架构呢?正如前面几篇《细品架构系列》所描述对架构的认识,按照问题识别—>概念认知—>架构切分的思路,来分析大型网站架构的诞生:

  1. 问题识别:当前什么问题、谁的问题、问题边界;
  2. 概念认知:通过分析问题,会产生哪些概念,统一概念认知,达成沟通交流规范;
  3. 架构切分:根据概念来解决问题,如何架构切分,产生哪些架构,提出具体解决方案;

PS:上面的三个步骤具体如何识别、认知、切分,请详细参考前面几篇《细品架构系列》文章,可能使你会对架构有重新的认识。

在进行分析大型网站架构的演进之路前,首先我们要明确的两个价值观:

  1. 核心价值:随网站所需灵活应对;大型网站不是从无到有一步就搭建好一个大型网站,而是能够伴随小型网站业务的渐进发展,慢慢地演化成一个大型网站;
  2. 驱动力量:网站的业务发展—业务成就了技术,事业成就了人,而不是相反;

还有,大型网站架构演进必须避免的几个误区:

  1. 一味追随大公司的解决方案;
  2. 为了技术而技术–>常见问题;
  3. 企图用技术解决所有问题:技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段去解决;

架构体系演进

单机时代

草根时期,快速开发网站并上线。当然,通常只是先试水,用户规模也没有形成,经济能力和投入也非常有限应用程序、数据库、文件等所有资源都集中在一台 Server上,典型案例:基于 LAMP 架构的 PHP 网站;

一步步带你,如何网站架构

单机时代(纯依赖RDBMS)

优点:简单、快速迭代达成业务目标;

缺点:存在单点、谈不上高可用;

技术点:应用设计要保证可扩展;

缓存出场

有一定的业务量和用户规模了,想提升网站速度,于是,缓存出场了

一步步带你,如何网站架构

单机时代+缓存出场

优点:简单有效、方便维护;

缺点:存在单点、谈不上高可用;

技术点:客户端(浏览器)缓存、前端页面缓存、页面片段缓存、本地数据缓存/数据库缓存、远程缓存;

如上图,缓存可以分为:

  1. 页面缓存:客户端缓存,减少对网站的访问;
  2. 本地缓存:访问速度快,但数据量有限,减少对DB查询;
  3. 远程缓存:远程访问,可以集群,因此容量不受限制;

数据服务与应用分离

市场反响还不错,用户量每天在增长,数据库疯狂读写,逐渐发现一台服务器快撑不住了。于是,决定把数据服务和APP做分离

一步步带你,如何网站架构

数据服务与应用分离

优点:简单有效、方便维护、提高不同Server对硬件资源的利用率;

缺点:存在单点、谈不上高可用;

技术点:文件服务器部署、数据库服务器,扩展数据访问模块;

分离后三台 Server 对硬件资源的需求各不相同:

  1. 应用服务器:需要更快更强大的 CPU;
  2. 数据库服务器:需要更快的硬盘和更大的内存;
  3. 文件服务器:需要更大的硬盘;

数据库读写分离

单台数据库也感觉快撑不住了,一般都会尝试做“读写分离”。由于大部分互联网“读多写少”的特性所决定的。Salve的台数,取决于按业务评估的读写比例。

一步步带你,如何网站架构

数据库读写分离

优点:简单有效、降低数据库单台压力;

缺点:读写分离,增加程序难度,架构变复杂,维护难度增加;

技术点:数据库主从同步部署,扩展数据访问模块,实现读写分离;

应用服务集群

数据库层面是缓解了,但是应用程序层面也出现了瓶颈,由于访问量增大,加上早期程序员水平有限写的代码也很烂,人员流动性也大,很难去维护和优化。所以,很常用的办法还是“堆机器”。

一步步带你,如何网站架构

应用出现瓶颈 负载均衡集群

优点:增加服务器和HA机制,系统性能及可用性得到保证;

缺点:应用之间缓存、Session一致性问题;

技术点:负载均衡;

通过集群解决高并发、海量数据问题的常用手段,实现系统的可伸缩性。通过负载均衡调度器,可将用户访问分发到集群中的某台 Server 上,应用服务器的负载压力不再成为整个网站的瓶颈。

集中式缓存、Session集中存储

加机器谁都会加,关键是加完之后得有效果,加完之后可能会引发一些问题。例如非常常见的:集群应用之间页面输出缓存和本地缓存一致性的问题,Session保存的问题……

一步步带你,如何网站架构

集中式缓存 Session集中存储

优点:应用之间缓存、Session一致,存储无限制,可以扩展;

缺点:不如本地缓存访问快,缓存服务器、Session服务器等仍存在单点问题;

技术点:缓存服务器部署、Session集中存储方案;

动静分离

动静分离也是提高网站响应速度的一种常用方式。将动态请求与静态请求分离开,尽量减少对应用服务器的压力。同时,可以再进一步对静态请求,进行缓存,以加快响应速度。可以需要开发人员配合(把静态资源放独立站点下),也可以不需要开发人员配合(利用7层反向代理来处理,根据后缀名等信息来判断资源类型)。

一步步带你,如何网站架构

使用动静分离

优点:减轻应用负载压力,针对静态文件缓存;

缺点:静态文件缓存更新失效问题;

技术点:动静分离、静态文件缓存方案;

反向代理和CDN加速网站响应

使用反向代理和CDN加速网站响应:CDN 和反向代理的基本原理都是缓存,区别在于:

  1. CDN部署在网络提供商的机房;
  2. 反向代理则部署在网站的中心机房;

使用 CDN 和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

一步步带你,如何网站架构

使用反向代理和 CDN 加速网站响应

优点:减轻应用负载压力,异地缓存有效解决不同地方用户访问过慢的问题;

缺点:成本大幅增加,架构进一步复杂化,也维护难度进一步增大,静态文件缓存更新失效问题;

技术点:CDN、反向代理方案;

使用NoSQL和搜索引擎

到这里,已经基本做到了DB层面和应用层面的横向扩展了,可以开始关注一些其它方面,例如:站内搜索的精准度,对DB的依赖,开始引入全文索引、NoSQL

NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

一步步带你,如何网站架构

使用NoSQL和搜索引擎

优点:降低DB依赖;

缺点:单点问题,谈不上高可用;

技术点:NoSQL、搜索引擎、分布式;

到目前为止,一个能够承载日均百万级访问量的中型网站架构基本介绍完了。

如何保证高可用

在做扩展满足了基本的性能需求后,我们会逐渐关注“可用性”(也就是我们通常听别人吹牛时说的SLA、几个9)。如何保证真正“高可用”,也是个难题。

对关键应用/服务,做集群冗余负载,这也是保证高可用比较常用的手段:

  1. 文件系统、数据库系统集群;
  2. 静态内容服务器集群;
  3. CDN服务器集群;
  4. 反向代理服务器集群;
  5. 负载均衡调度器集群;
  6. 分布式NoSQL服务器集群;
  7. 搜索引擎服务器集群;
  8. 分布式缓存服务器集群;
  9. 分布式Session服务器集群;

一步步带你,如何网站架构

使用集群冗余负载 保证高可用

优点:集群负载,保证高可用;

缺点:数据一致性、数据有状态问题;

技术点:负载调度器、集群方案;

截止目前为止,都没有怎么去改动应用程序的架构,或者说通俗点,都不怎么需要大面积的修改代码。

如果上面那些手段都用光了,还是支撑不住怎么办?不停的加机器也不是办法啊?

应用垂直拆分

随着业务越来越复杂,网站的功能越来越多,虽然部署层面是采用的集群,但是应用程序架构层面还是“集中式”的,这样会导致很多耦合,不便于开发、维护,而且容易“一荣俱损”。所以,通常会把网站拆分出不同的子站点来单独宿主。

通过分而治之的手段将整个网站业务分成不同的产品线,如首页、商铺、订单、卖家、买家等拆分成不同的产品线,分归不同的业务团队负责。各个应用之间可以通过建立一个超链接建立关系,也可以通过消息队列进行数据分发。

一步步带你,如何网站架构

应用垂直拆分(分压,解耦)

优点:降低耦合、分压;

缺点:应用架构复杂;

技术点:业务抽取拆分;

业务垂直分库

应用都拆了,由于单个数据库的连接,QPS,TPS,I/O处理能力都非常有限,DB层面也可以去做垂直分库操作。

一步步带你,如何网站架构

业务垂直分库 分压 解耦

优点:降低DB耦合、分压DB;

缺点:数据访问模块复杂;

技术点:业务抽取拆分;

分布式服务化

拆分应用和DB之后,其实还是会有很多问题。不同的站点,里面可能会有相同逻辑和功能的代码。当然,对于一些基础的功能我们可以封装DLL或者Jar包去到处提供引用,但是这种强依赖也很容易造成一些问题(版本问题、依赖关系等处理起来非常麻烦)。

既然每一个应用系统都需要执行许多相通的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。这样,传说中的SOA的价值就得到体现了。

一步步带你,如何网站架构

分布式服务化(解耦,去重复)

优点:服务统一管理,提供重用度;

缺点:应用架构更复杂;

技术点:业务抽取拆分、服务化技术方案;

消息队列

应用、服务之间还是会出现一些依赖问题,这时候,高吞吐量的解耦利器出现了

一步步带你,如何网站架构

消息队列(服务间异步解耦 高吞吐量)

优点:提高吞吐量、应用、服务之间解耦;

缺点:存在消息消费延迟问题;

技术点:消息队列技术方案;

分库分表

最后,再介绍一个大型互联网公司都用的绝技–分库分表。个人经验,不是业务发展和各方面非常迫切,不要轻易走这一步

因为分库分表谁都会干,关键是拆完之后怎么办。目前,市面上还没有完全开源免费的方案,能让你一劳永逸地解决数据库拆分问题。

分库分表:

  1. 横向拆分;
  2. 纵向拆分;
  3. 分布式数据库访问层;
  4. 数据库中间件(代理);

网站架构总结

上面讲述了在网站业务发展的不同阶段,会面临不同的问题,针对不同的问题,会选择不同的架构。大型网站架构就是在不同阶段时解决不同问题的过程中慢慢演进来的。

最后几句话,送给有缘的你:

  1. 一切以解决业务目标为首要任务;
  2. 没有以业务为目标的任何架构、技术,都是毫无意义的耍流氓;
  3. 再牛逼的架构、再牛逼的技术,不能够解决业务的问题,你也只能算是会架构、会技术的工匠,而不能算是真正意义上的架构师;
  4. 业务成就了技术,平台成就了人,事业成就了人,而不是相反;

本文思维导图,如下:

一步步带你,如何网站架构

本文作者: 伯乐在线 – 陶邦仁 。www.zhainan.hk

Proudly powered by WordPress

Theme by anyway

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大型网站架构演化 大型网站软件系统的特点 大型网站架构演化发展历程 初始阶段 应用服务和数据服务分离 使用缓存改善网站性能 缓存类型 本地缓存 分布式缓存 缓存产品 redis 业界主流 memcached 解决问题 数据库访问 使用应用服务器集群改善网站的并发处理能力 问题: 负载均衡情况下session状态的保持? 解决方案: 基于DNS的负载均衡 反向代理 ngix JK2 数据库的读写分离 问题: 读库与写库的数据同步 解决方案: 不同的数据库都有自己的数据库的主从复制功能 使用反向代理与CDN加速网站响应 反向代理产品 ngix 使用分布式文件系统和分布式数据库系统 使用no-sql和搜索引擎 站内搜索 lucene nutch 分词器 no-sql库 mongodb hadoop 业务拆分 web service restful 分布式服务 大型网站架构演化的价值观 核心价值:随网站所需灵活应对 驱动力量:网站的业务发展 网站架构设计误区 一味追随大公司的解决方案 为技术而技术 企图用技术解决一切问题 大型网站架构模式 架构模式 分层 分割 分布式 分布式应用和服务 分布式静态资源 分布式数据和存储 分布式计算 集群 缓存 CDN 反向代理 本地缓存 分布式缓存 异步 冗佘 冷备份 主从分离,实时同步实现热备份 灾备数据中心 自动化 发布过程自动化 ant maven. 自动化代码管理 svn cvs github 自动化测试 loadrunner hudson. 自动化安全测试 自动化部署 自动化报警 自动化失效转移 自动化失效恢复 自动化降级 自动化分配资源 安全 密码和手机校验码 数据库中的密码加密后存 -> 不可ni -> md5 加密 子主题 1 验证码 防止机器登录 对于攻击网站的XSS攻击,SQL注入,进行编码转换 对垃圾信息,敏感信息进行过滤 对交易转账等重要操作根据交易模式和交易信息进行风险控制 Sina微博的应用 大型网站架构要素 性能 可用性 伸缩性 扩展性 安全性 瞬时响应:网站的高性能架构 网站的性能测试 不同的视角 用户的视角 开发人员的视角 运维人员的视角 性能测试指标 响应时间 并发数 吞吐量 性能测试方法 性能测试 负载测试 压力测试 稳定性测试 web 前端性能优化 浏览器优化 减少http请求 使用浏览器缓存 启用压缩 css上,js下 减少cookie传输, 静态资源使用独立域名访问 CDN加速 反向代理 应用服务器性能优化 分布式缓存 缓存的原理 合理使用缓存 频繁修改的数据 没有热点的访问 数据不一致和脏读 缓存可用性 缓存预热 缓存穿透 缓存架构 jboss cache为代表的需要更新同步的分布式级缓存 以memcached为代表的不互相通信的分布式缓存 异步操作 使用集群 代码优化 多线程 资源复用 单例 对象池 数据结构 垃圾回收 存储性能优化 固态硬盘 RAID与HDFS 万无一失:网站的高可用性 高可性的度量与考核 度量 考核 高可用的网站架构 高可用的应用 高可用的服务 高可用的数据 CAP原理 数据备份 失效转移 高可用网站的软件质量保证 网站发布 自动化测试 预发布验证 代码控制 自动化发布 灰度发布 网站运行临控 临控数据采集 临控管理 永无止境:网站的可伸缩性 网站架构的伸缩性设计 不同功能进行物理分离实现伸缩 单一功能通过集群规模实现伸缩 应用服务器集群的伸缩性设计 http重定向负载均衡 DNS域名解析负载均衡 反向代理负载均衡 ip负载均衡 数据链路层负载均衡 负载均衡算法 分布式缓存集群的伸缩性设计 memcached分布式缓存集群的访问模型 memcached分布式缓存集群的伸缩性挑战 分布式缓存的一致性hash算法 数据存储服务器集群的伸缩性设计 关系数据库集群的伸缩性设计 nosql数据库的伸缩性设计 随需应变:网站的可扩展性 构建可扩展的网站架构 利用分布式消息队列降低系统耦合性 事件驱动架构 分布式消息队列 利用分布式服务打造可复用的业务平台 web service与企业级分布式服务 大型网站分布式服务的需求与特点 分布式服务框架设计 可扩展的数据结构 利用开放平台建设网站生态圈 固若金汤:网站的安全架构 网站应用攻击与防御 XSS攻击 反射型 持久型 防御方法 消毒 httponly 注入攻击 SQL注入攻击 攻击前提 获取数据库结构的方法 防御方法 消毒 参数绑定 OS注入攻击 CSRF攻击 防御方法 表单token 验证码 referer check 1. 网络流量统计 2. 防盗链 error code html注释 文件上传 web应用防火墙 modsecurity NEC的 siteshell 网站安全漏洞扫描 信息加密技术及密钥安全管理 案例: CSDN 信息加密技术分类 单项散列加密 对称加密 非对称加密 密钥安全管理 将密钥和算法放在一个独立的服务器上,对外提供加密和解密服务 密钥放在独立服务器中,算法放在应用程序中。 信息过滤与反垃圾 文本匹配_敏感词过滤 正则表达式 trie树 双数组trie树 多级Hash表 信息降噪 分类算法_内容识别 黑名单 电子商务风险控制 风险 账户风险 买家风险 卖家风险 交易风险 风控 人工 自动 规则引擎 统计模型 案例 网购秒杀系统架构 网购秒杀系统架构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值