学习主题:订单模块以及负载均衡和分库分表
订单系统的实现流程及将购物车中的数据保存到数据库,将购物车中的数据保存到数据库有两种实现方式,一种是调用购物车远程服务加载购物车集合从而获取数据保存到数据库,还有一种是给订单系统添加拦截器,用户必须登陆才能访问订单系统,在拦截器中获取用户的信息,通过用户id获取购物车数据然后保存到数据库中。
用户表和订单表一对多,一个用户可以包含过个订单
订单表和订单明细表一对多,一个订单包含多个订单明细,通过订单id进行关联
订单表和订单物流表一对一
执行方法前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
执行方法后
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}
页面渲染后
@Override
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
根据用户的id获取到购物车对象集合,根据购物车对象集合获得商品对象,商品对象中保存着订单明细。
静态资源服务器
虚拟主机
反向代理服务器
负载均衡
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从 原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原 始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然 后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连 接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主 机,每个虚拟主机可以独立对外提供 www 服务,这样就可以实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。
虚拟主机技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应 用于 HTTP(Hypertext Transfer Protocol,超文本传输协议)服务,将一台服务器的某项或 者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬 件资源。
实现虚拟主机有三种方式
基于 IP 的虚拟主机
#一个server一个虚拟主机
server {
listen 80;
#为虚拟机指定IP或者是域名
server_name 192.168.170.128;
#主要配置路由访问信息
location / {
#用于指定访问根目录时,访问虚拟主机的web目录
root html128;
#在不指定访问具体资源时,默认的展示资源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#一个server一个虚拟主机
server {
listen 80;
#为虚拟机指定IP或者是域名
server_name 192.168.170.138;
#主要配置路由访问信息
location / {
#用于指定访问根目录时,访问虚拟主机的web目录
root html138;
#在不指定访问具体资源时,默认的展示资源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
基于端口的虚拟主机
#一个server一个虚拟主机
server {
listen 8080;
#为虚拟机指定IP或者是域名
server_name 192.168.170.138;
#主要配置路由访问信息
location / {
#用于指定访问根目录时,访问虚拟主机的web目录
root html8080;
#在不指定访问具体资源时,默认的展示资源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#一个server一个虚拟主机
server {
listen 9090;
#为虚拟机指定IP或者是域名
server_name 192.168.170.138;
#主要配置路由访问信息
location / {
#用于指定访问根目录时,访问虚拟主机的web目录
root html9090;
#在不指定访问具体资源时,默认的展示资源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
基于域名的虚拟主机
host文件配置
#一个server一个虚拟主机
server {
listen 80;
#为虚拟机指定IP或者是域名
server_name www.gl.cn;
#主要配置路由访问信息
location / {
#用于指定访问根目录时,访问虚拟主机的web目录
root html-gl;
#在不指定访问具体资源时,默认的展示资源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#一个server一个虚拟主机
server {
listen 80;
#为虚拟机指定IP或者是域名
server_name www.ww.com;
#主要配置路由访问信息
location / {
#用于指定访问根目录时,访问虚拟主机的web目录
root html-ww;
#在不指定访问具体资源时,默认的展示资源的列表
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受 internet 上的连接请求, 然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求 连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的好处:
(1)保证内网的安全,可以使用反向代理提供 WAF 功能,阻止 web 攻击 大型网站,通常将反向代理作为公网访问地址,Web 服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
(2)nginx的负载均衡算法有哪些
1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后 端服务器 down 掉,能自动剔除。
2.指定权重 指定轮询几率,weight 和访问比率成正比,用于后端服务器 性能不均的情况。
upstream backserver {
server 192.168.170.128 weight=10;
server 192.168.170.129 ;
}
3.IP 绑定 ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访 问一个后端服务器,可以解决 session 的问题。
upstream backserver {
ip_hash;
server 192.168.170.128:88;
server 192.168.170.129:80;
}
assembly插件
<resources>
<!--用于资源拷贝 -->
<resource>
<directory>src/main/resources/spring</directory>
<includes>
<include>**/*.xml</include>
</includes>
<!-- dubbo 框架的项目发布完成后,默认dubbo去META-INF/spring目录下加载spring -->
<targetPath>META-INF/spring/</targetPath>
</resource>
<!-- 默认加载到classpath文件 -->
<resource>
<directory>src/main/resources/mybatis</directory>
<includes>
<include>**/*.xml</include>
</includes>
<!-- -->
</resource>
<resource>
<directory>src/main/resources/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
<!-- -->
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
<!-- -->
</resource>
</resources>
默认去META-INF/spring目录下加载spring配置文件
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分 类,分布到不同 的数据库上面,这样也就将数据或者说压力分担到不同的库上面
水平拆分是按照某个字段的某种规则来分散到多个库 之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据 行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库 中
①数据库中间件
数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服 务。从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的 数据库存储
②逻辑库(schema)
对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道 数据库的概念, 所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库
③逻辑表(table)
分布式数据库中,对应用来说,读写数据的表就是逻辑 表。逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分 片,只有一个表构成
④ER表
关系型数据库是基于实体关系模型(Entity-Relationship Model)之上,通过其描述了真实世界 中事物与关系,Mycat 中的 ER 表即是来源于此。根据这一思路,提出了基于 E-R 关系的 数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父 表,通过表分组(Table Group)保证数据 Join 不会跨库操作
⑤分片规则
数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务 规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将 极大的避免后续数据处理的难度。
schema标签:配置逻辑库的标签
table标签:定义逻辑表
dataNode标签:定义数据节点
dataHost标签:定义数据库主机
dataHost子标签writeHost:写数据的数据库定义标签,实现读写分离操作
dataHost子标签readHost:读数据的数据库定义标签
主数据库(master)处理事务性增、改、删操作(INSERT、 UPDATE、DELETE),而从数据库(slave)处理 SELECT 查询操作。
*
主从备份: 就是一种主备模式的数据库应用.
主库(Master)数据与备库(Slave)数据完全一致. 实现数据的多重备份, 保证数据的安全.
可以在 Master[InnoDB]和 Slave[MyISAM]中使用不同的数据库引擎,实现读写的分离