分布式架构概述

来源:互联网 发布:淘宝卖家注册账号申请 编辑:程序博客网 时间:2024/06/03 12:43
  • 分布式(一个业务分成多个子业务)和集群的关系
    比如当前电商平台的业务主要有 用户、 商品、订单
    这里写图片描述
    分布式: 一个业务拆分成多个子系统,部署在不同的服务器上
    集群: 同一个业务,部署在多个服务器上,保证服务器的高可用
  • 大型网络的特点
    1) 访问量(tps每秒的速度、qps每秒的查询)
    2) 数据量(存储数据量)
  • 电商平台的发展
    业务主要分为: 用户、 商品、订单

    容器: tomcat ;jsp/servlet
    数据库存储: mysql
    网络层面的知识:tcp/udp

1)一台服务器
一台(服务器、db)
这里写图片描述

2) 数据库服务器和应用服务器分离
用户量上去,服务器出现性能问题。单击负载越来越高,数据库服务器和应用服务器分离
一台服务器,一台db(ip:内网)
这里写图片描述

3) 应用服务器做集群
应用服务器做负载(分流,集群)
这里写图片描述
但是这里产生的问题
I) session 跨服务器问题
一台服务器上都会有session保存用户信息(登录信息)等。那么当有多台应用服务器时,如何保存session跨服务器的问题。(用户A发送登录请求到应用服务器A上,登录成功后;用户A发送修改用户密码的请求到应用服务器B上,那么应用服务器B如何知道用户A已经登录成功了?)
解决办法:
1)session sticky请求保证在同一个服务器上。
2)session replication 每个服务器都保存一个session,session同步开销,内存问题。
3)session 集中存储,存储在db、 存储在缓存服务器 (redis)
4)cookie (主流): 保存在客户端,
access_token(userid/token/timestamp) – 加密在客户端浏览器,过期时间 在服务器解析。只做传输协议,无状态
II) 如何做请求转发
解决办法:
负载均衡器ngix

4) 数据库的读写分离
这里写图片描述
问题:
一:数据库读写分离怎么操作
二:数据库的数据同步
三:数据库路由 mycat

5) 搜索商品(搜索引擎)

这里写图片描述

问题:
1. 搜索引擎的索引数据怎么去做同步,实时增量同步? 还是定时全量同步?
根据场景来区分:
搜索结果(不需要实时的数据):首页数据(增量索引)
后台数据(定时同步)

6) 缓存机制(热点数据)
这里写图片描述
流程:
先去读缓存数据,没有数据再去读数据库,并且将数据库中的数据放入到缓存中。
页面缓存
用户量是没有上限的 ,方式:缓存、 限流、 降级

7) 数据库的水平/垂直拆分

数据库io瓶颈
一张表存储量500万 – 1000万
这里写图片描述
拆分:
一: 垂直拆分(数据拆分):按业务进行拆分 : 商品 、 订单、用户(3个db),历史数据如何拆分
二: 水平拆分(表拆分):订单表 – 订单1 、订单2.。。

8) 应用服务器的拆分
这里写图片描述
拆分:
一: 垂直拆分: 不同的域名(解析到不同的服务器) 商品、用户、订单
二: 服务节点:如果商品服务器使用订单,得写订单的查询;订单服务器使用商品,得写商品的查询。这时就会出现代码冗余。、

这时需要提供商品服务、用户服务、订单服务。 服务器用到时就可以直接调用,可以使用webservice、dubbo(rpc)

监控(应用监控、数据库),日志采集、大数据分析。Spark
这里写图片描述

架构:
这里写图片描述