zoukankan      html  css  js  c++  java
  • 网站架构思维篇

    1.背景

    2.大型网站的名称含义

    1.pv  PV=Page View(s),页面浏览量, 据说 某宝的日均PV 可以达到2亿;

    2.UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内 相同的客户端只被计算一次。

    3.IP(独立IP):即Internet Protocol,指独立IP数。00:00-24:00内相同IP地址之被计算一次。

    3.大大型网站的特点

    已我们常用的某宝为例:

    1.高并发

    2.流量大

    3.高可用,7*24小时不间断服务

    4.数据多

    5.用户分布广(每个地区的网络环境不一样,使用的浏览器客户端也不一样)

    6.容易遭受攻击(网站大了容易遭别人嫉妒)

    7.更新迭代快,发布频繁

    8.渐进式发展(从小网站做到大网站,并非一来就按照大网站的标准做)

    4.如何从一个小网站架构发展到一个大型网站的架构

    下面以某宝电商网站创业初期的网站发展为例,简单的说明

    4.1.最省钱最简单的网站架构

    公司创业起步的时候,用户少,订单少,最主要的是钱少,

    所以从经济的角度出发,主要网站可以用就行了,这时候最最简单的架构就是

    一台服务器,mysql数据库+最简单的ssm框架+vue前端,结构如下:

     4.2.数据与应用服务器分开的架构

    随着公司的发展,用户量逐渐增加,订单也越来越多,这个时候就有必要将数据与应用分开部署,架构如下

     4.3.使用缓存降低数据库访问压力

    公司继续发展,用户越来越多,产品订单也越来越多,用户在查询商品的时候可能出现查询慢的现象,

    这时候我们可以使用缓存,将常用的数据放在缓存,从而大大降低数据库的压力,最常用的缓存就是Redis

     4.4.应用服务器集群

    公司继续发展,有了缓存,但是并发过高的时候,

    一台应用服务器处理不了这么多的请求,怎么办勒,

    那就多弄几台同时处理这样可以大大提高效率,架构如下:

    4.5.像公交车上下门那样-数据库读写分离

    公司再再再继续发展,

    业务量越来越大,系统的瓶颈出现在了数据库上...

    由于绝大部分的数据库都支持组从热备份,因此在架构设计上,我们可以采用读写分离的方式,架构如下:

    4.6.使用CDN加速静态资源访问

    公司再继续发展,

    网站越做越大,功能也越来越多,

    网站页面上的静态资源,如图片,js等也越来越多...

    网站的用户分布也非常广....天南地北都有...

    国内的网络信号也千差万别......

    .....我到底想表达什么呢......如果用户在最南边那就访问最南边的静态资源服务器,这样就可以大大加快访问速度

    即CDN的核心思想就是缓存静态资源,用户访问距离自己最近的CDN服务器,架构如下:

     4.7.使用分布式数据库

     公司继续发展

    用户量越来越多..

    业务数据也越来越多...

    单个数据库很难存放所有的数据...

    那么我们就需要分库分表....也就是传说中的分布式数据库

    可以大体分为两类:

    第一:按照业务分库,比如订单作为一个库,发货记录作为一个库,用户数据作为一个库

    第二:单个表数据量过大,对于表可以安装时间维度地区维度等划分,比如某宝的订单了过大,单表很难存储,name我们可以每个月建立一个订单表,这就是按照月划分订单;

    系统架构图如下:

    4.8.使用搜索引擎

    在数据量很大的情况下,

    如果只是依赖sql语句要查询一条数据可能会非充慢,

    又特别是关键字查询,如某宝上我们经常输入购买产品的关键字查询,

    如果不使用搜索引擎,那么就必须使用like查询,like的使用会导致索引失效,那么查询速度会非常慢.

    因此行业中经常使用搜索引擎来解决这个问题,常用的搜索引擎框架有lunce、solr、elasticsearch等...

    系统架构如下:

    4.9.根据业务拆分服务-形成分布式服务

    网站在做到很大的情况下

    每一个请求接口,或者说每一个业务都会有大量的请求

    这时候我们通常会按照业务进行划分,

    比如某宝,可以划分为登陆注册、首页、产品查询、订单、评论等产品业务线

    不同业务线之间可以通过消息队列来做数据分发与共享

    不同的产品业务线由不同的团队负责

    网站架构如下:

     5.总结

    上一节中我们分析了一个小网站如何渐进式的发展成为一个大网站,

    所有的网站结构必须依赖业务,也就是说要满足这样一条铁律:在能满足业务的情况下网站架构越简单越好!

    完美!

    参考:

    《大型网站技术架构》 李智慧

  • 相关阅读:
    [bzoj3123] [Sdoi2013]森林
    [bzoj2173] 整数的lqp拆分
    Linux
    使用高德地图API
    EF具体用在什么类型的项目上
    出现Data Tools 与VS 不兼容问题
    Entity FramWork
    Entity
    Entity
    BASH
  • 原文地址:https://www.cnblogs.com/newAndHui/p/14007213.html
Copyright © 2011-2022 走看看