任何一个大型网站都是经历用户积累然后成长,从一台服务器到多台服务器才能构架支撑网站现有数据、用户、页面请求等。大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿的用户实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用的技术,这些技术和手段可以广泛运行在大型网站系统的架构中,下面就通过介绍大型网站系统的演化过程,来认识这些技术和手段。

一、最开始的网站架构 最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:

二、应用、数据、文件分离 随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。

三、利用缓存改善网站性能 在硬件优化性能的同时,同时也通过软件进行性能优化,在大部分的网站系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分网站访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。

缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理等,这个后面再讲。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。

四、使用集群改善应用服务器性能 应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx是七层负载均衡和HAProxy支持四层、七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

五、数据库读写分离和分库分表 随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。

六、使用CDN和反向代理提高网站性能 假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用CDN解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。

七、使用分布式文件系统 用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS。

八、使用NoSql和搜索引擎 对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。

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

十、搭建分布式服务 这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。

大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑

转载于:https://www.cnblogs.com/Hydraxx/p/9130180.html

电商等大型网站高可用,高负载架构借鉴方案(转载)相关推荐

  1. LVS+keepalived 实现高可用与负载均衡实施方案

    LVS+keepalived 实现高可用与负载均衡实施方案 <Alvin-zeng:孤独0-1> 目录 一.安装LVS1 1.1.环境IP描述:1 1.2.所需软件2 1.3.安装步骤主备 ...

  2. 电商导购网站遭淘宝打压 推广成本高成隐患

    [导读]中国互联网最基本的模式就是流量的低买高卖,然而与百度.淘宝商业模式不同,美丽说.蘑菇街这些社会化电商公司却不得不面临其主要收入必须依赖淘宝分成的问题. 转播到腾讯微博 对于美丽说蘑菇街而言,其 ...

  3. 亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统

    亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统 1.高并发原则 1.1 无状态 1.2 拆分 1.3 服务化 1.4 消息队列 1.5 数据异构 1.6 缓存银弹 1.7 并发化 2 高可用原 ...

  4. 读书笔记:《亿级流量网站架构核心技术 -- 跟开涛学搭建高可用高并发系统》

    from <亿级流量网站架构核心技术 – 跟开涛学搭建高可用高并发系统> 概述 一个好的设计要做到,解决现有的需求和问题,把控实现和进度风险,预测和规划未来,不要过度设计,从迭代中演进和完 ...

  5. 分布式架构中常见理论以及如何才能设计出高可用的分布式架构?

    分布式架构中常见理论以及如何才能设计出高可用的分布式架构? 一.前言 我们就来聊一聊目前主流的分布式架构以及分布式架构中常见理论以及如何才能设计出高可用的分布式架构好了.分布式架构中,SOA和微服务架 ...

  6. 架构面试精讲第四节 高并发下高可用、高性能架构详解

    15 如何向面试官证明你做的系统是高可用的? 我们已经用了五个模块分别讲了架构原理.分布式技术.中间件.数据库,以及缓存,这些都是面试中必考的技术领域和技术点,又因为我们处在大数据和互联网时代,所以高 ...

  7. 9种高性能高可用高并发的技术架构

    9种高性能高可用高并发的技术架构 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复工作. 所谓网站架构模式即为了解决大型网站面临的 ...

  8. 高可用高并发的 9 种技术架构!

    高可用高并发的 9 种技术架构! 1.分层 分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度组成一 ...

  9. 分布式系统 概念 高可用 高并发 学习笔记

    分布式系统 概念 高可用 高并发 学习笔记 0. 分布式系统基本概念 0.1 背景 分布式系统是由一组通过网络进行通信.为了完成共同的任务而协调工作的计算机节点组成的系统.分布式系统的出现是为了用廉价 ...

最新文章

  1. PHP 接入(第三方登录)QQ 登录 OAuth2.0 过程中遇到的坑
  2. Datawhale组队学习周报(第038周)
  3. Linux下的一些问题收集及解决方法(一)
  4. python程序员编辑器_5款Python程序员高频使用开发工具推荐
  5. Mac下Idea安装Git报错Xcrun问题的解决
  6. HALCON标定板制作、标准文件输出方法、算子讲解
  7. Mybatis多表模型
  8. Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等...
  9. 北航计算机2014复试上机题,北航计算机系考研复试上机真题及答
  10. 华为云GaussDB专家走进课堂,跟莘莘学子聊聊数据库
  11. 【转】POP3、SMTP和IMAP之间的区别和联系
  12. jpa级联添加_JPA中的一对多双向关联与级联操作
  13. excel导出_学习笔记—— 前端导出excel
  14. 如何选择深度学习框架 TensorFlow/Torch/Mxnet/Theano
  15. rz/sz安装与乱码问题
  16. shp系列(四)——利用C++进行Shx文件的读(打开)
  17. 自建 bitwarden 密码管理服务
  18. Windows下获取群CPU使用率的方法
  19. 2021年彬州范公中学高考成绩查询,彬州市拟奖励81人名单公布!快看有你认识的吗?...
  20. Android 好看的登录界面

热门文章

  1. java中$和 的区别详解_Mybatis之#{}与${}的区别使用详解
  2. centos 7 mysql随机密码_在centos中安装了mysql5.7之后解决不知道随机的密码的问题...
  3. 【开源项目】基于FFmpeg的PCM和RGB数据统一封装
  4. 【WebRTC---入门篇】(十四)WebRTC音视频录制
  5. 云服务器可以文件服务器,云服务器 可以上传文件
  6. edmonds算法matlab,匈牙利算法的matlab实现
  7. C/C 宏替换详解
  8. vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...
  9. java spring注入 静态方法_JAVA静态方法中如何使用spring@Value进行注入的成员变量...
  10. 光端机常见五大故障问题及解决方法