《互联网项目实战》课件

01. 绪论

绪论部分,包括讲师介绍、初识电商项目、课程介绍、几个热身问题等模块。

(1)讲师介绍

知一老师

主讲项目实战课

高级架构师

擅长微服务系统基础架构

RPC

注册中心

MQ

分布式文件存储

分布式 K-V 存储

擅长互联网业务系统架构

电商系统

IM 系统

直播答题

(2)初识电商项目

淘宝核心流程

首页

taobao.com

搜索页

s.taobao.com

商品详情页

item.taobao.com

购物车页

cart.taobao.com

结算页

buy.taobao.com

下单支付页

cashiersa127.alipay.com

浏览 “我的商城”

前端

首页

搜索页

商品详情页

购物车页

结算页

下单页

支付页

秒杀

后台

首页

商品

订单

用户

运营

统计

设置

mymall 工程

my-web-front

mymall_root

模块数 20+

模块逻辑关系

模块名规范

包名规范

麻雀虽小五脏俱全

不止于此,不断拔高自己

(3)课程介绍

互联网研发流程

需求分析

产品、运营、架构师

站在不同视角进行需求分析

分析需求的关键是逻辑闭环

降本增效解决需求问题

两个案例

架构设计

架构师

根据规模和复杂度确定系统架构

架构是不断演进的

技术选型

架构师

选择合适的技术轻便式解决问题

代码落地

开发工程师

C

Java

Go

系统测试

测试工程师

自动化测试

性能压测

安全测试

部署运维

运维工程师

DevOps

智能运维

课程介绍

核心部分

需求分析

架构设计

技术选型

代码落地

扩展部分

内容扩展

服务拆分

IM 系统

模型总结

需求分析模型

电商模型

架构模型

课程目录介绍

(4)几个热身问题

你是怎样做需求分析的?有没有一套可以遵循的完整的思维框架或模型?

你了解哪些成熟的并被广泛应用的业务系统架构?

你怎样对一套系统做服务拆分?包括从零搭建的系统和已经运行很长时间的系统

在技术选型时,你会重点考虑哪几方面?

对微服务系统进行架构治理时,会涉及哪些方面?

什么是前后端分离?什么是前后端未分离?

亿级别的用户量,怎么同时做到账号登录、邮箱登录、手机号码登录呢?

数万级规格属性的商品,怎么进行统一的有效管理?

千万级别订单量,怎么同时做到根据订单id、买家id 和 卖家id 进行查询呢?

生成一个唯一的分布式 ID 有哪些方案?哪一个是省力和便捷的?

微信支付的流程是怎样的?

秒杀系统需要解决哪些关键问题呢?

02. 需求分析

需求分析部分,包括电商业务分析、需求分析模型、功能需求分析和非功能需求分析等模块。

(1)电商业务分析

电商模式

名词解释

B:Business 企业

C:Consumer 消费者

经营方式

B2B:1688

B2C:自营店

C2B:找靓机

C2C:闲鱼

O2O

online to offline

offline to online

offline to online to offline

滴滴,饿了么,快递

B2B2C

天猫

京东

C2B2C

转转优品

电商系统特性

技术应用新且广

业务非常复杂

用户多业务体量大

海量数据

电商模型分析

关键词

用户

商品

订单

交易平台

(2)需求分析模型

需求分析模型

功能需求

基础功能需求:核心且稳定

扩展功能需求:非核心、容易变化、 运营类

非功能需求

稳定性需求

高吞吐需求

高扩展需求

IM 系统需求分析

IM 功能需求

IM 基础功能需求

消息:私信消息,系统消息,云消息,离线消息

用户:登录,状态

联系人:个人联系人,系统联系人

IM 扩展功能需求

群消息

多媒体消息

子母号

红包

IM 非功能需求(三高需求)

高扩展(功能/容量)

高吞吐(高性能/高并发)

高稳定性(高可用/高可靠)

(3)功能需求分析

基础功能需求

商品发布

商品搜索

商品详情

购物车管理

订单提交

订单支付

即时通讯

扩展功能需求

营销系统

广告系统

物流系统

评论系统

推荐系统

直播系统

风控系统

客服系统

爬虫系统

推送系统

功能需求的逻辑闭环性

短视频系统举例

(4)非功能需求分析

高扩展

功能扩展

消息队列

数据结构

文档型 MongoDB

注册中心

工程结构

容量扩展

集群伸缩

无状态性

高吞吐

高性能

流程优化

异步

并行

代码优化

池化

数据结构优化

GC

算法优化

缓存优化

高并发

集群并发

扩展集群容量

单机并发

计算密集型并发:多进程、多线程

IO密集型并发:BIO、NIO(epoll)、AIO(IOCP node.js)

高稳定性

高可用

冗余:副本是分布式系统容错技术的唯一手段

高可靠

代码容错性

案例

TiDB 压测

03. 架构设计

架构设计部分,包括架构选型分析、架构治理分析、电商架构设计、服务化拆分等模块。

(1)架构选型分析

架构概述

架构随业务逐步演进,绝非固定

先基于需求设计业务架构,再设计技术架构

常见业务架构选型

单体架构

分层架构、面向服务架构

微服务架构

单体架构

概述

一个程序就是一个项目,一个进程就可包罗万象

启动一个进程,就可以直接为用户提供服务

是否用过或记得 war包

单体架构图

优势

劣势

开发(前期)简单、部署简单、测试简单、运维简单

快就是硬道理

创业之初,备受青睐

迭代越多,逻辑越臃肿

任何小改动,都需要重新编译和重新部署

技术栈受限,只能垂直扩展,且深陷其中

IM 单体架构案例

分层架构

概述

分层架构的每一层都是一个独立的程序,进行独立部署

分层之间存在依赖关系

每一层一般都是从单体架构的一个分层模块演化而来

分层架构图

优势

劣势

每层只关注核心职能,结构清晰,开发和维护成本低

有效解决每层的关键问题,防止单层架构无限扩大

方便引入不同的技术栈,快速解决问题和优化系统

部署、测试和运维成本增高

接口调用增多,网络延时增大,容错成本升高

IM 分层架构案例

微服务架构

概述

一种互联网系统中期常用的架构风格

整个系统划分成高度内聚的服务程序,服务之间相互协调和配合

每个服务独立开发、独立部署、独立维护

单一职责,关注分离,模块化和分而治之

通常与组织结构保持一致

微服务架构图

优势

劣势

业务系统之间充分低耦合和高内聚,业务影响降到最低

拆分粒度更细,资源利用率更高

开发和维护效率也更高

服务化的实例增多,会带来服务治理的成本升高

上下游之间可能会形成很长的复杂的依赖链条,出现雪崩效应

出现其他技术问题,如:分布式事务、幂等性设计等等

IM 微服务架构案例

(2)架构治理分析

架构治理

指通过各种机制保证架构的稳定、高效和扩展,通常包含三方面

组件治理

远程调用

消息队列

注册中心

容错治理

限流

熔断

降级

监控治理

监控系统

链路追踪

日志系统

远程调用

理解 RPC

通信协议,基于网络表达语义和传达数据

像调用本地方法一样调用远程服务

扩展了算力,是微服务架构基础

RPC 作用

屏蔽了组包和解包

屏蔽了数据发送和接收

提高了开发效率

核心组成

对象代理

序列化和反序列化

网络模块

应用场景及调用方式

服务消费方关注服务提供方的计算结果

同步调用和异步调用

RPC 原理思考

RPC 框架是一个黑盒子,在同一内存空间如何实现对接口的调用?

消息队列

理解 MQ

保存消息的容器

避免进程直接通讯

消息具有高可靠性

MQ 角色

主题

生产者

订阅者

MQ 应用场景

一多应用

轻重分离

结果忽略

流量缓冲

架构保护

MQ 应用思考

MQ 的消息具有高可靠性,而且解耦了服务调用,那么 MQ 能否取代 RPC 呢?

注册中心

理解注册中心

解耦了服务依赖关系

微服务系统中枢

唯一触达所有节点的组件

核心功能

服务注册

服务发现

监控检查

变更通知

工作流程

服务负责人

服务管理平台

注册中心

服务提供方

服务消费方

注册中心思考

如果开发一个注册中心,需要考虑哪里核心技术问题呢?

限流

理解限流

限流是指限制单位时间内发出的请求量或接收的请求量

限流指标: QPS (泛指请求)

互联网系统一直追求的是吞吐量,但超过负载的吞吐量需要限制或丢弃

核心服务采用限流

为什么要限流

影响其他服务

服务雪崩

限流方式

消费方限流

提供方限流

同时限流

熔断

理解熔断

下游服务不可用时,临时切断对下游服务的访问,直接返回

下游服务不可用,包括:网络中断、超时次数过多、错误次数过多

下游服务可用时,恢复对下游服务的访问

熔断意义

没有服务熔断,容易造成服务雪崩

服务熔断针对非核心服务

服务熔断是手段,保护整个系统是目的

断路器

打开状态

半开状态

关闭状态

降级

理解降级

在资源不足或访问异常等不可改变条件下,策略性丢弃部分功能

有损提供服务,实现服务柔性可用

降级条件

发生熔断,即熔断降级

调用超时或异常

人为降级

降级策略

停止次要功能,例:双十一,停止评论功能

返回默认数据,例:默认推荐页、默认广告页

返回假数据,例:计数

友好提示,例:当前功能暂时不可用

监控系统

理解监控

监控系统能帮助我们预防问题

监控系统能帮助我们主动发现问题

监控是粮草,系统是兵马;兵马未动,粮草先行

监控内容

监控自己和用户关心的数据

系统层面:CPU、内存、网络、磁盘、进程等

应用层面:qps、error、timeout、delay等

业务层面:日活、在线时长、消息量等

常用监控系统

Zabbix

Open-falcon

Prometheus

链路追踪

理解链路追踪

链路追踪能宏观展现整个微服务系统,直观分析请求链路

通过链路追踪可以快速排查问题,定位性能瓶颈,优化服务依赖

常用链路追踪系统

简单易上手的Twitter Zipkin

云原生的链路监控组件 Uber Jaeger,基于Zipkin发展

探针性能低损耗的 Sky Walking

链路统计信息详细的 Pinpoint

分布式系统链路追踪

代码埋点

数据存储

查询展示

核心概念

Span: 一次服务调用,是基本的工作单元

Trace:表示一条完整的调用链路,是树结构的Span集合

Annotation: 记录特定事件

CS: Client Sent,客户端发起请求

SR: Server Receive, 服务端收到请求

SS: Server Send,服务端完成处理后发送结果给客户端

CR: Client Receive,客户端收到服务端返回信息

日志系统

理解日志

日志是一种工具,类似于日记、黑匣子

日志的本质是字符信息,用于反馈当时场景的上下文信息

通过上下文精准还原历史场景

日志表达

初次接触该日志的同学可以无成本理解和定位问题

traceID:唯一标识一次调用,实现全链路

日志级别:FATAL. ERROR. WARN. INFO. DEBUG

日志示例

event=begin_send_msg //begin日志

event=end_send_msg. //end日志

event=show_uid uid=%d //过程变量日志

event=show_getDetail() result=%v //过程方法日志

event=fail_getDetail() err=%v //失败日志

日志方案

ELK 方案

本地化方案

(3)电商架构设计

普适性电商系统架构

终端层

PC 浏览器

苹果 APP

安卓 APP

代理层

反向代理

LVS、 Nginx、SLB、TGW

更少的资源、更多的连接、更高的效率

负载均衡

API 网关层

隐藏细节,统一入口

业务无关,通用功能

流量过滤,请求转发

鉴权、限流、协议转换

业务逻辑层

数据聚合

数据服务层

访问数据存储

对接第三方

数据存储层

数据库

缓存

搜索引擎

第三方

我的商城系统架构

终端层

用户端系统

后台管理系统

业务逻辑层

商城首页

用户中心

订单中心

秒杀系统

后台系统

数据服务层

用户服务

商品服务

订单服务

秒杀服务

系统服务

广告服务

支付服务

短信服务

数据存储层

用户库

商品库

订单库

秒杀库

系统库

广告库

第三方支付

第三方短信

(4)服务化拆分

服务化拆分方式

一般按业务流程拆分

业务解耦原则

大数据量原则

复杂逻辑原则

电商系统服务化拆分

用户服务

首先电商平台需要吸引一批卖家用户

商品服务

这批用户会在平台上发布商品

用户服务

然后平台引流一批买家用户

商品服务

这批用户会浏览商品

订单服务、支付服务

碰到中意的会下单和支付

物流服务

支付过的商品会通过物流快递到买家用户手中

广告服务

另外,为了引流更多用户和促销,平台还需要打广告和做营销

服务化拆分模型

梳理业务流程

信息系统架构

识别业务实体

名词属性

动词属性

抽象业务服务

筛选 “鹅蛋”

重复情况

子集情况

交集情况

分类 “鹅蛋”

低耦合、高内聚

抽取业务单元

服务 “鹅蛋”

合并简单 “鹅蛋”

拆分复杂 “鹅蛋”

04. 技术选型

技术选型部分,包括怎样做技术选型、我的商城技术选型、关键技术分析、项目工程搭建等模块。

(1)怎样做技术选型

技术选型关键

功能是否满足

社区是否活跃

语言是否符合

技术选型原则

合适原则

合适优于业界领先

简单原则

简单优于复杂

技术选型案例

两周内实现 单体架构 IM 系统

通讯协议选型

选择最简单和容易落地的协议—Http

协 议 名 称

TCP

连 接 性

长连接

无连接

短连接

长连接

归属网络分层

传输层

复杂性

成熟度(普及)

UDP

传输层

Http

应用层

WebSocket

应用层

编程语言选型

选择公司和团队最熟悉的语言—Go

编程语言

C++

复杂度

社区

活跃

活跃

活跃

活跃

开源框架

并发模型

多线程

多线程

多进程

多协程

Java

PHP

Go

数据库选型

选择满足需求且容易运维的数据库—MySQL

数据库类型

数据库名称

MySQL

数据模型

关系型

文档型

关系型

集群性

单机

事务性

强事务

弱事务

成熟度

SQL 数据库

NoSQL数据库

NewSQL 数据库

MongoDB

TiDB

集群

集群

分布式事务

(2)我的商城技术选型

前端技术

编程语言

html

css

javascript

商城页面

vue

基于 html、css、javascript 构建用户界面的 JavaScript 框架

thymeleaf

渲染 H5 内容的模板引擎,类似 JSP、Velocity、FreeMarker

管理后台

vue

elementUi

和 Vue 配合良好的一个 UI 框架

vue 示例


hello {{msg}}

后端技术

编程语言

Java

基础组件

远程调用:Dubbo

注册中心:Zookeeper

消息队列:RocketMQ

数据访问:Mybatis

主框架

SpringBoot

存储组件

数据库: MySQL

缓存: Redis

搜索引擎: elasticsearch

文件存储:oss

其他组件

安全:SpringSecurity

单点登录: CAS

支付: 微信支付

短信: 大鱼

(3)关键技术分析

本节对电商系统关键技术的实现原理进行深入分析,帮助大家理解系统的底层设计;关键技术包括:远程调用、注册

中心、配置中心、消息队列、网关、限流、熔断和文件存储。

远程调用

RPC 消费方模型

代理

序列化

请求路由

负载均衡

连接管理

超时处理

反序列化

RPC 提供方模型

IO 线程

反序列化

请求队列

工作线程池

序列化

过载保护

超时丢弃

优雅关闭

注册中心

服务与节点关系

服务与节点之间的映射

节点与服务之间的映射

订阅关系

订阅关系映射

被订阅关系映射

zookeeper 数据结构

Root

Service

Type

URL

配置中心

服务端

管理员发布配置

服务端推送更新通知

客户端sdk

定时拉取配置

通知后拉取配置

配置写本地文件

应用程序

主动获取配置

被动接收更新通知

消息队列—RocketMQ

部署架构

NameServer

Broker

Producer

Consumer

存储架构

CommitLog

ConsumerQueue

事务消息机制

发送半消息

执行本地事务

提交或回滚

服务端回查

事务消息原理

半消息队列

RMQ_SYS_TRANS_HALF_TOPIC

OP消息队列

RMQ_SYS_TRANS_OP_HALF_TOPIC

对比回查

Commit 重新投递

删除 Rollback 消息

回查事务状态

API 网关

网关作用

隐藏细节,统一入口

业务无关,通用功能

流量过滤,请求转发

网关需求

功能需求

过滤:鉴权、限流、反作弊

转发:协议转换

非功能需求

高性能

高扩展

Zuul

本质是 Servlet

一切皆 filter

PRE

Routing

Post

动态编译

网关设计思路

限流算法

计数器算法

限制单位时间内请求数量

超过阈值则丢弃

滑动窗口算法

定时移动窗口

计算窗口中的请求数量

超过阈值则丢弃

漏桶限流算法

发往服务端的请求先进入漏桶

超出漏桶容量的请求则丢弃

漏桶以固定频率发送请求到服务端

令牌桶算法

令牌器与客户端是生产者与消费者关系

令牌器按需生产令牌放入令牌器

客户端获取令牌后方可请求服务端

客户端若获取不到令牌,则丢弃请求

令牌器往往与服务端的负载相关

熔断

断路器

三态变化

滑动窗口

定时移动窗口

计算窗口中的异常数量

超过阈值则触发熔断

文件存储—FastDFS

文件上传

client

tracker

storager

文件下载

client

tracker

storager

下载定位

每个 Storager 节点按时间顺序同步文件

每个 Storager 节点主动 push 文件到副本

每个 Storager 节点上报文件同步信息到 Tracker

Tracker 计算每个 Storager 节点最小同步文件时间

(4)项目工程搭建

我的商城系统架构

工程名称:mymall

业务逻辑层:web

商城首页:mymall_web_portal

用户中心:mymall_web_usercenter

订单中心:mymall_web_order

秒杀系统:mymall_web_seckill

后台系统:mymall_web_manager

数据服务层:service

用户服务:mymall_service_user

商品服务:mymall_service_goods

订单服务:mymall_service_order

支付服务:mymall_service_pay

秒杀服务:mymall_service_seckill

系统服务:mymall_service_system

广告服务:mymall_service_business

短信服务:mymall_service_sms

工程模块关系

父模

mymall_root

公共模块

mymall_pojo

mymall_common

mymall_common_web

mymall_common_service

mymall_common_cas

mymall_interface

web 层模块

mymall_web_manager

service 层模块

mymall_service_order

包名结构

商业.工程名.架构分层名.模块名.逻辑分层名

com.mymall.service.user.dao

com.mymall.service.user.impl

05. 代码落地

代码落地部分是本章的核心和重点,包括请求处理流程、前端工程、portal页、商品中心、搜索中心、购物车、订单

中心、支付中心、用户中心和秒杀系统等模块。

(1)请求处理流程

互联网系统请求处理流程

DNS

CDN

LVS

Nginx

网关集群

应用集群

DB集群

缓存集群

中间件集群

基础服务集群

普适请求处理逻辑

基础设施

DNS

CDN

LVS

NG

应用系统

网关层

业务逻辑层

数据访问层

存储系统

数据库

缓存

我的商城请求处理流程

登录(后台)

mymall_web_manager

login.html

WebSecurityConfig

UserDetailsServiceImpl

AuthenticationSuccessHandlerImpl

mymall_service_system

AdminServiceImpl

ResourceServiceImpl

mymall_system

tb_admin

tb_resource

订单列表(后台)

mymall_web_manager

order.html

OrderController

mymall_service_order

OrderServiceImpl

mymall_order

tb_order

我的购物车(前台)

mymall_web_order

cart.html

CartController

mymall_service_order

CartServiceImpl

redis

hash

(2)前端工程

前端应用发展

桌面应用

移动应用

浏览器应用

纯网页静态应用

动态应用

页面与业务逻辑分离

前后端分离

前后端未分离

前后端未分离关键特征

浏览器负责页面展示

后端负责渲染页面和重定向

后端控制前端展示

前端与后端高耦合

前后端未分离模型

浏览器

请求动态页面

解析 html

应用服务器

查询数据库

渲染模板

返回 html

重定向

数据库

持久化数据

前后端分离

前后端分离关键特征

浏览器负责页面渲染

后端负责生产数据

前端和后端职责分离

前端和后端完全解耦

前后端分离模型

浏览器

获取静态页面

通过 js 访问后端接口获取数据

静态文件服务器

存储静态文件,如:html、 js、 css

应用服务器

查询数据库

提供统一 API 接口

数据库

持久化数据

我的商城 “后台” 工程

页面与业务逻辑完全分离

本质上前后端分离

开发流程上,前后端未分离

我的商城 “前台” 工程

前端和后端是两个工程

完全前后端分离

前端工程通过 npm run serve 调试

(3)portal 页

portal页

业务需求

商品分类

商品菜单

广告轮播图

业务分析

数据变动性小

数据访问高频

99.999% 读 + 0.001%写

适合缓存

业务实现

初始化读库写缓存

从缓存高频读取

代码分析

my-web-front

Home.vue

mymall_web_portal

IndexController

mymall_service_goods

CategoryServiceImpl

InitService

mymall_service_business

AdServiceImpl

Init

数据表设计

tb_category

tb_ad

数据库和缓存一致性

引入缓存目的

提供高性能的数据读取

关键问题

追求强一致性,不用缓存

写多读少,不用缓存

缓存和数据库之间实现的是最终一致性

整体思路

插入操作

只写数据库

查询操作

先查缓存

再查数据库

然后数据写入缓存

删除操作

先删除数据库

再删缓存

更新操作

更新数据库

删除缓存

优化方案

思考:删除缓存失败了,如何处理?

过期策略

开发成本低

缓存管理成本低

一致性的时间完全依赖过期时间

事务消息

解决了同一个请求同时连接MySQL和Redis问题

逻辑上解耦

保证了操作的可靠性

引入了时序性的问题

引入消息队列,成本较高

binlog同步

在mysql压力不大情况下,延迟较低

保证了操作的时序性

与业务解耦

引入binlog成本太大

离线任务

分布式锁

(4)商品中心

商品设计

商品举例

手机

颜色

内存

行李箱

颜色

尺寸

SPU

SKU

Standard Product Unit (标准化产品单元)

商品信息聚合的最小单位

属性相同的商品可以称为一个 SPU

Stock Keeping Unit (库存单位)

库存进出的计量单位

用来定价和管理库存

商品关键词

关键词列表

商品分类

商品品牌

商品模板

商品规格(商品属性)

商品参数

商品SPU

商品SKU

商品实体关系

数据表设计

商品分类表

商品品牌表

商品模板表

商品规格表

商品参数表

商品SPU表

商品SKU表

商品添加流程

选择商品所属分类 (tb_category)

根据商品分类得到 template_id

根据商品分类得到其所有品牌,确定一个品牌 (tb_brand)

由 template_id 获取其规格选项 和 参数选项

将规格选项进行排列组合,生成 sku 列表

上传商品图片

将页面加工的 spu 和 sku列表传入后端,写入 tb_spu 和 tb_sku表

代码分析

mymall_web_manager

goods_edit.html

SpuController

mymall_service_goods

SpuServiceImpl

AlbumItemImpl

mymall_goods

tb_spu

tb_sku

tb_album

关键技术点分析

分布式ID

雪花算法

页面静态化

图片存储

OSS

代码分析

FastDFS

水平扩容

垂直扩容

普适性商品中心设计模型

实体关系

实体表设计

(5)搜索中心

搜索系统

适合非固定字段的多条件查询

适合大数据量查询

适合模糊查询

搜索引擎对比

传统搜索引擎 solr

实时搜索引擎 elasticsearch

搜索流程

数据写入

数据查询

代码分析

数据写入

mymall_web_manager

goods_edit.html

SpuController

mymall_service_goods

SpuServiceImpl

AlbumItemImpl

数据查询

my-web-front

search.vue

mymall_web_portal

SearchController

mymall_service_goods

SkuSearchServiceImpl

批量导入

mymall_web_manager

SkuSearchController

mymall_service_goods

SkuServiceImpl

SkuSearchServiceImpl

搜索中心(搜索中台)

数据写入

MQ

配置文件

数据查询—Proxy

Proxy 屏蔽 ES 复杂度

Proxy 限制用户操作

Proxy 优化查询请求

(6)购物车

业务需求

添加商品到购物车

从购物车中移除商品

更新购物车中商品数量

随时查看购物车信息

商品金额满减优惠

业务分析

购物车数据需要存储在服务端

购物车操作频繁,容忍丢失

购物车数据很少参与大数据分析

购物车适合缓存实现

满减优惠数据需要持久化实现

结算复杂度后移

业务实现

购物车

hash 结构

Key—CART_LIST

Field—username

Value—List>, 每个Map有两个元素

满减优惠

优惠表结构

优惠表数据

代码分析

mymall_web_order

cart.html

CartController

mymall_service_order

CartServiceImpl

PreferentialServiceImpl

redis

hash

mymall_order

tb_preferential

扩展

IM 系统在线用户维护

Key—uid

Field—client_type

Value—object(state、heart_time、device_token、entry_addr)

(7)订单中心

订单业务分析

结算页,提交订单

订单记录入库

减少商品库存

结算页重定向到支付页

关键技术分析

分布式事务问题

订单入库

更新库存

分布式事务解决方案

2PC、3PC

TCC、SAGA

Seata

事务消息

代码分析

mymall_web_order

order.html

OrderController

mymall_service_order

OrderServiceImpl

TransactionListenerImpl

OrderConsumer

CartMessageConsumer

mymall_order

tb_order

tb_order_item

mymall_goods

tb_sku

redis

hash

订单统计

定时任务

交易统计

会员统计

代码分析

mymall_web_manager

CategoryReportController

mymall_service_order

CategoryReportServiceImpl

mymall_order

tb_category_report

扩展

C2C电商订单表设计

满足买家和卖家查询需求

实现方案演进

方案1:单表方案

买家字段 buyer_id 建立查询索引 idx_buyer

卖家字段 seller_id 建立查询索引 idx_seller

方案2:分表方案

根据主键 order_id 分表

买家和卖家查询订单时,需要遍历所有表

方案3:映射方案

KV 存储 + 关系存储

KV 存储关联 order_id 列表

关系存储原始订单数据

通过映射避免遍历所有表

方案4:基因注入方案

通过雪花算法生成 uid

uid 中第三个字段固定为表索引字段

生成订单时,将 “表索引” 作为基因注入到 order_id 中

针对每一条订单双向存储两条记录

买家和卖家所有订单全部落在同一张表中

(8)支付中心

支付流程

获取支付链接

二维码支付

获取查询结果

代码分析

mymall_web_order

pay.html

weixinpay.html

PayController

mymall_service_pay

WeixinPayServiceImpl

(9)用户中心

C 端用户系统

mymall_user

tb_address

tb_user

tb_provinces

tb_cities

tb_area

B 端用户系统

实体关系

管理员

角色

资源

菜单

mymall_system

tb_admin

tb_role

tb_admin_role

tb_resource

tb_role_resource

tb_menu

tb_resource_menu

单点登录

常用方案

共享 session

中央存储 cookie

CAS 服务器

CAS 原理

CAS Server 进行用户登录

所有服务向 CAS Server 验证 tiket

跨域

跨域产生原因

浏览器同源策略

协议 + 主机 + 端口

跨域解决方案

服务代理

jsonp

websocket

CORS

Access-Control-Allow-Origin

Access-Control-Allow-Methods

Access-Control-Allow-Credentials

Access-Control-Max-Age

扩展

大规模用户存储方案

满足用户分别通过账号、电话、邮箱查询需求

实现方案演进

方案一:单表方案

分别在account、phone、email上创建索引

方案二:多表方案

理论方案

需要遍历所有表

方案三:映射方案

KV存储 + 关系存储

KV存储 account、phone、email 与 uid映射关系

关系存储保存用户分表数据,通过 uid % 256进行分表

(10)秒杀系统

红包实现逻辑

业务流程

发红包

抢红包

拆红包

实现流程

插入记录到数据库和缓存

第一次读缓存

第二次读缓存

更新数据库

更新缓存

大型秒杀系统

秒杀简介

什么是秒杀?

一秒内完成高吞吐量业务处理

解决高并发问题、用户作弊问题、商品超卖问题

关键点分析

秒杀系统独立部署,避免对电商平台造成冲击

秒杀商品页面静态化处理,避免动态页面对数据库产生高负载

临时租用网络带宽和服务器,降低成本

动态生成随机下单URL,避免用户作弊

整体优化思路

尽量将请求拦截在上游

充分利用缓存

合理利用队列

我的商城秒杀系统

业务流程

商城后台建立秒杀活动,提交秒杀商品

商城后台运营进行审核

商城前台在秒杀频道展示秒杀商品信息

商城前台打开秒杀商品详情页面

开始秒杀,抢单成功后,进行支付

若支付失败,则取消订单和恢复库存

核心设计

秒杀数据库

tb_seckill_goods

tb_seckill_order

秒杀逻辑设计

队列 + 多线程

随时查询秒杀状态

限制用户只抢一次

解决超卖问题

解决未支付问题

代码分析

mymall_web_seckill

seckill-index.html

seckill-item.html

SeckillOrderController

mymall_service_seckill

SeckillGoodsTask

SeckillOrderServiceImpl

MultiThreadingCreateOrder

SeckillOrderMessaageListener

mymall_seckill

tb_seckill_goods

tb_seckill_order

redis

list

hash

06. 项目总结

项目总结部分,包括项目部署、关键问题和重点回顾等模块。

(1)项目部署

部署中间件

MySQL

mymall_business

mymall_cas

mymall_config

mymall_goods

mymall_order

mymall_seckill

mymall_system

mymall_user

Redis

Zookeeper

安装步骤

https://blog.csdn.net/qq_29752857/article/details/127792052

修改端口号

conf/zoo.cfg 中 admin.serverPort=8888

启动

双击 zkServer.cmd

双击 zkCli.cmd

测试

RocketMQ

安装步骤

https://blog.csdn.net/weixin_41983685/article/details/124952445

启动 NameServer

双击 mqnamesrv.cmd

启动 Broker

命令窗口执行 mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true

Elasticsearch

安装步骤

https://blog.csdn.net/weixin_43564583/article/details/129716464

启动

命令窗口执行 elasticsearch.bat

启动服务

service 层

mymall_service_business

mysql 连接信息

mymall_service_goods

mysql 连接信息

elasticsearch 连接信息

mymall_service_order

mysql 连接信息

mymall_service_pay

微信支付信息

mymall_service_seckill

mysql 连接信息

mymall_service_sms

短信配置信息

mymall_service_system

mysql 连接信息

mymall_service_user

mysql 连接信息

web 层

mymall_web_manager

OSS 配置信息

mymall_web_order

CAS 配置信息

mymall_web_portal

CAS 配置信息

mymall_web_seckill

CAS 配置信息

mymall_web_usercenter

CAS 配置信息

cas

cas 直接部署到 tomcat 中

\webapps\cas\WEB-INF\classes\application.properties 修改数据库连接信息

前端

my-web-front

npm install

npm run serve

(2)关键问题

系统三高

高稳定

高可用

高可靠

高吞吐

高性能

高并发

高扩展

功能扩展

容量扩展

集群 + 负载均衡

安全交易

风控系统

风控系统核心是规则引擎

风控系统位置

中台建设

服务 / 系统 / 中台

中台是战略需求

中台是演进出来的

(3)重点回顾

我们从 “电商系统”、“我的商城”、“基础架构”、“模型总结” 和 “扩展应用” 等五个视角对互联网项目实战课程进行复习

和重点回顾。

电商系统

电商模式

B2B

B2C

C2B

C2C

电商模型

普适性电商系统架构

我的商城

需求分析

系统架构

技术选型

前端技术

vue thymeleaf elementUi html css javascript

后端技术

Java Dubbo Zookeeper RocketMQ Mybatis Springboot MySQL Redis elasticsearch CAS

工程搭建

前后端工程

后台工程

前台工程

portal 页

商品中心

搜索中心

购物车

订单中心

支付中心

用户中心

秒杀系统

基础架构

架构治理

组件治理

远程调用

消息队列

注册中心

容错治理

限流

熔断

降级

监控治理

监控系统

链路追踪

日志系统

关键技术分析

远程调用

注册中心

配置中心

消息队列

网关

限流

熔断

计数器算法

滑动窗口算法

漏桶限流算法

令牌桶算法

文件存储

互联网系统请求处理流程

模型总结

需求分析模型

架构模型

单体架构

分层架构

微服务架构

服务化拆分模型

梳理业务流程

识别业务实体

抽象业务服务

数据库和缓存一致性

引入缓存目的

关键问题

整体思路

优化方案

普适性商品实体关系

扩展应用

IM三类业务架构

单体架构

分层架构

微服务架构

搜索中台

IM 在线用户维护

订单表基因注入实现方案

用户中心映射存储方案

红包流程逻辑

你可能感兴趣的:(java,tomcat,spring)