Go电商秒杀 (1)

回答的问题

  1. 普通秒杀的业务逻辑
  2. 前端优化: 页面静态化,优化和原理
  3. 前端优化: CDN原理和阿里云CDN实践过程简述
  4. 后端优化: 架构调整(从单体架构到分布式架构)
  5. 后端优化: CDN,分布式权限验证集群,分布式数量控制集群,web服务器,Rabbitmq,mysql)
    5.1 权限验证集群: 一致性hash的原理,实现和主要应用场景。
    5.2 数量控制集群。Q: 为什么需要该数量控制集群?
    5.3 rabbitmq流量控制和确认模式。

两篇文章

  1. 前端优化(本篇)
  2. Go秒杀服务端优化

准备

mysql,rabbitmq

Docker 安装 MySQL
Docker 安装部署RabbitMQ
设置账号密码权限

"amqp://imoocuser:imoocuser@192.168.244.1:5672/imooc"
amqp://用户:密码@IP:5672/virtual host

新增virtual host并设置用户,才能连接rabbitmq

2. web框架

  • 理论
    MVC
    GO语言web开发框架,Iris 急速入门

  • 实例演示

  • Iris路由: Q: url和controller是怎么联系上的
    // 参考: go_seckill/imooc-iris和Cap1573Code/9.前端静态化代码
    Party路由分组,是看不到显示的url的,是通过解析函数名来完成url路径和处理函数的对应的。

3. backend开发

后台管理系统(CRUD): 商品模块+订单模块

4. frontend开发

前台用户接口(PC端): 登录接口+商品详情页面接口+下单接口

  • cookie,session
    参考下一篇预备知识 // TODO

  • 项目目录结构

  1. backend目录: 独立资源。存放后台商品和订单模块的: 静态资源, controller, main.go入口(启动服务器和注册路由)
  2. frontend目录: 独立资源。存放前台用户和商品模块的: 静态资源, controller, main.go入口(启动服务器和注册路由)
  3. services目录: 共享资源。存放业务逻辑代码, 被backend和frontend的controller共享
(base) didis-mbp:7.前台用户登陆 didiyu$ tree -L 4 -d
.
├── backend
│   ├── main.go // main.go和web目录同级
│   └── web
│       ├── assets
│       │   ├── css
│       │   ├── img
│       │   ├── js
│       │   └── lib
│       ├── controllers
│       └── views
│           ├── order
│           ├── product
│           └── shared
├── common
├── datamodels
├── encrypt
├── fronted
│   ├── main.go // main.go和web目录同级
│   ├── middleware
│   │   └── auth.go
│   └── web
│       ├── controllers
│       ├── public
│       │   ├── css
│       │   ├── fonts
│       │   ├── img
│       │   └── js
│       └── views
│           ├── shared
│           ├── template
│           └── user
├── repositories
├── services
└── tool
  • Q: 目录结构这样是为啥?

  • 高并发情况下去掉session,因为对性能影响大

  • 旧架构的缺点

5. 新的秒杀架构

https://coding.imooc.com/lesson/347.html#mid=26343

6. 前端优化

1. 页面静态化

2. CDN

参考附录1
Q: 为什么需要CDN
Q: 搭建一个CDN系统需要考虑的点
Q: 主要流程

Q: 配置过程 // 附录4
A:

  1. 获取加速域名,把自己的域名提交给CDN服务提供商,由其分配一个加速域名。
  2. 给自己的域名添加CNAME记录(该记录值就是加速域名),CDN服务提供商会把该CNAME信息提交给权威DNS(根DNS,顶级DNS)
  3. ping自己的域名,验证CNAME配置是否生效。新增CNAME记录会实时生效,修改CNAME记录72小时之内生效。

2+. DNS的记录类型和CNAME的作用

附录3

Q: CNAME怎么添加的? // 附录4
域名添加成功后,阿里云CDN会分配对应的CNAME地址。如果您想启用CDN加速服务,则需要将加速域名指向CNAME地址,访问加速域名的请求才能转发到CDN节点上,达到加速效果。本文档以您的域名在阿里云解析(原万网)为例。

Q: CNAME怎么起作用的? Q: CDN的域名解析和普通域名解析的不同步骤是哪些? // 附录3

[扩展] 3. CDN生态和成本构成

附录2
Q: 以图片业务为例,说明云生态中CDN和云存储的配合?
Q: CDN的成本构成和成本的?
A:

  1. CDN 带宽费用。用户访问带来的 CDN 流量费用,由各 CDN 厂商收取
  2. 回源带宽费用。当 CDN 无法获取到对应图片时,回源到云存储获取,这部分回源带宽费用由云存储厂商收取。
  3. 存储空间费用。这一项费用由云存储厂商收取.

参考

  1. CDN如何产生的,了解一下搭建一个 CDN 系统需要考虑哪两点
  2. 35 | 以绝对优势立足:从CDN和云存储来聊聊云生态的崛起
  3. DNS的记录类型和CNAME的作用
  4. 添加加速域名和配置CNAME
    RabbitMQ入门与使用篇
原文地址:https://www.cnblogs.com/yudidi/p/12504374.html