0%

谷粒商城

项目介绍

简介

电商项目了解一下

  • 访问量大
  • 数据量大
  • 并发高
  • 业务复杂,技术点多

电商分类

  • B2C – Business To Consumer

分布式

分布式了解一下

单一架构

—>小型网站,小型管理系统,功能简单

垂直应用架构

–>切分业务

分布式

–>把各个应用通过分层独立出来,利用RPC实现web与service,service与service之间的相互调用,提高了代码的复用性

面向服务的分布式架构

用一个统一的应用中心来调度、路由、管理所有的服务。基于这个中心构建的星型架构又叫做 SOA分布式架构

如何实现SOA架构

以前的controller,service,serviceImpl都在一个工程里面,通过Spring的IOC完成相互调用

IDEA 在项目里面建立module

  1. maven项目parent作为项目的主基石,确定项目的SpringBoot版本以及所有的版本控制,在其他所有项目通过标签引入
  2. maven项目api作为(interface)接口、bean存在的项目,所有项目通过引入
  3. maven项目common-util作为公共工具类,在其中引用通用的工具类依赖
  4. maven项目web-util作为前段依赖引入项目
  5. amven项目service-util作为后端服务依赖引入项目

dubbo

  • 服务提供者(provider)
  • 服务消费者(consumer)
  • 注册中心(registry)
  • 监控中心(monitor)

调用关系???

SOA工作原理???

Dubbo与SpringCloud区别??

虚拟机安装

软件

  • jdk1.8
  • redis
  • dubbo-javaweb
  • tomcat 跑 javaweb
  • zookeeper

分布式架构的服务提供者中Service由dubbo提供,故@Service注解需要换成dubbo的

服务消费者中Controller的@Autowired注解也只能注入同一容器的服务,无法导入Service,需要使用dubbo的@Reference

添加dubbo、zookeeper的maven依赖以后运行该项目在zookeeper上面注册服务

商品管理系统

sku 与 spu:

sku:stock keeping util 库存存储单元

一般具体一个产品 如:amd rx5700xt(拥有具体属性)

spu:standard product util 标准产品单元

概念性产品 如:amd rx5700系列显卡

修改配置,运行前端项目

跨域问题

使用@CrossOrigin

加在控制层里面

access-control-allow-origin

主键返回策略????

增删改查(CURD)

平台属性的增删改查

销售属性的增删改查

图片列表的增删改查

分布式文件存储(FastDFS)

解决高并发问题

  1. 集群????
  2. 多服务器
  3. 限流

前端页面

介绍

- - - -
前端 并发大 负载均衡 数据一致
后端 并发小 直连数据库 数据一致

业务

  • 首页(静态化)
  • 检索页(搜索引擎)
  • 详情页(缓存、切换、推荐)
  • 购物车页(cookie、redis)
  • 订单页(结算页)(一致性校验、安全)
  • 支付页(安全、对接支付平台)

thymeleaf

user?.name

?用来判空,user对象的那么属性为null不报错

详情页

根据销售属性确定sku,跳转页面

页面高并发

  1. 负载均衡,集群(增加服务器数量,增加负载均衡)
  2. 使用缓存
  3. 其他–限流,静态化,分布式

redis

查询步骤

  1. 连接缓存
  2. 查询缓存
  3. 缓存没有结果,查询sql
  4. sql返回结果给用户并且将结果写入缓存

整合步骤

  1. 将redis整合到项目中(redis+spring)

    1. 将redis框架封装成一个工厂类(将redis的池初始化到spring容器中)
     2. 用spring的整合类将工厂类整合
  2. 设计一个数据存储策略(核心:设计key)

    企业中数据存储策略:

    数据对象名:数据对象ID:对象属性

    user:123:username

    user:123:password

redis常见问题

  1. can not get a connection from the pool
    • redis不能外网访问 bind 127.0.0.1
    • 保护模式 protected mode
  2. 缓存在高并发以及安全压力下的一些问题
    • 缓存击穿(某一热点key在高并发访问情况下突然失效,过期时间到了,导致大量的并发打进sql的情况)—使用redis的分布式锁解决mysql的访问压力问题
    • 缓存穿透(利用redis和mysql的机制,redis缓存中不存在就访问mysql,直接绕过缓存访问mysql,制造db访问压力)—通过代码防治问题产生,给该一定不存在的key的value设置””或者null
    • 缓存雪崩(大量缓存设置了相同的过期时间,在某一时刻同时失效,请求全部发到mysql,DB瞬间压力造成雪崩)—-在原定过期时间后加上一个随机时间

分布式锁

  1. redis自带的分布式锁 set px nx

    上锁—-jedis.set(“xxxlock”,”value_token”,”NX”,”PX”,”10 * 1000”)

    开锁—-jedis.del(“xxxlock”)

  2. reidsson 框架 redis jucdelock锁功能 实现(既有jedis的功能,又有juc的功能)jedis没有同步锁

    声明锁—-RLock lock = redissonClient.getLock(“xxxLock”);

    上锁—-lock.lock();

    开锁—-lock.unlock();

nginx负载均衡

apache压力测试

elasticsearch 搜索

  1. ElasticSearch6(与5的区别在于6需要以普通用户登录,6里面一个库只能建立一个表)
  2. 搜索引擎
    1. 文本搜索(以空间换时间)
    2. 搜索引擎(百度,谷歌)—-爬虫、分析、查询
  3. elasticsearch的算法—-倒排索引(在内容上建立索引,以内容匹配索引)
    • mysql使用Btree –balance tree
    • elasticsearch使用B+tree

查询

  • query 查询条件
  • from 开始
  • size 大小–条数
  • highlight 高亮
  • aggs 聚合函数

加入中文分词器

ik 放在elasticsearch的plugins目录下

GET _analyze
{
“analyzer”: “ik_max_word”,
“text”: [“我是中国人”]
}

  • ik_smart
  • ik_max_word

集群配置

“:”后面一定要加空格” “,“=”一定不要加空格

  1. cluster.name
  2. node.master
  3. node.data
  4. path.data
  5. path.logs
  6. network.host
  7. http.port
  8. transport.tcp.port
  9. discovery.zen.minimum.master.nodes 最少为node半数+1 —>脑裂???

node.master可以大于1,主节点只能有一个???—>脑裂?

节点、分片、索引

  1. 节点
  1. 分片
  1. 索引
  1. 主分片
  1. 复制片
  1. 分片路由
    • Sync
    • Async

购物车

单点登录

Donate comment here.

欢迎关注我的其它发布渠道