栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

分布式京淘项目

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分布式京淘项目

dubbo
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
MYbatis PLus 对象方式操作数据库

JSON
JSON串,JS对象
对象无序的 名称/值
数组有序的 值
嵌套用法 值可以用双引号括起来的 String,Obejct,array,null,number,true ,false

分页 前端页面动态ajax请求,
data-options 说明:表格属性 url地址发起ajax请求. 由于分页原因.所以会动态的添加分页的参数. page=1&rows=20

ItemController 将最新最热门的商品展现在前面select …order by uodated desc 起始位置,每页记录数
当前页,总记录数,EasyUITable total总记录数, 商品信息List rows
MP分页, 需要添加配置类
new Page(page,rows)

查询商品类名tb_item_cat时, ajax嵌套问题,
原因:由于ajax嵌套执行时,可能会导致内层ajax数据没有办法刷新.所以一般的解决的方案就是将异步改为同步调用.

如果条件许可,把两次请求放到服务端一起处理发回来,然后客户端只执行一次ajax
商品分类信息展现 EasyUITree
id,text,state 节点id,名称,状态, 打开还是关闭
itemcat中可以获取节点状态信息,getIsParent父节点
Long parentId = (id==null?0L:id); //根据parentId=0 查询一级商品分类信息 —子节点加载依赖于父节点

商品入库
系统级SysResult status状态码, msg服务器返回信息 data 服务器返回给前端的业务数据

全局异常处理类.只拦截Controller 抛出的异常 SystemExceptionAOP
@RestControllerAdvice @ExceptionHandler(RuntimeException.class)
MP简化时间赋值操作,

KindEditor 富文本编辑器 商品入库需要添加商品,商品详情信息
文件上传MultipartFile
//3.准备文件上传的全路径. 路径+文件名称
String fileName = fileImage.getOriginalFilename(); //文件名称.后缀 123.jgp

文件上传返回值说明:
error 1 表示错误, 0上传成功
属性1: error 如果在文件上传的过程中出现问题 则标识为1 ,如果没有错误 标识为0.

属性2: url 代表图片的虚拟访问地址. 磁盘地址

属性3: width/height 获取图片的宽高 可以省略.

文件上传图片校验
定义图片类型为set集合存储后缀类型.如果 set不包含则返回错误信息imageVO
判断图片为恶意程序.width,height .

将上传的图片类型和图片API进行转换

图片上传 —>本地路径+日期+UUID+图片后缀

   //2.如何判断文件是否为恶意程序?  文件是否有图片的特有属性!!!!
        //2.1将上传的文件类型利用图片的API进行转化 如果转化不成功则一定不是图片.
        try {
            BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream());
            //2.2校验是否有图片的特有属性  高度/宽度
            int width = bufferedImage.getWidth();
            int height = bufferedImage.getHeight();
            //2.3校验宽度和高度是否有值.
            if(width == 0 || height == 0){

                return ImageVO.fail();
            }

UUID 是全局唯一标识符,一台机器上生成的数字 ,16位数字组成
实现图片回显

Nginx 正向代理… 反向代理
反向代理:监听拦截域名,.映射图片地址----服务器端代理,保护真实服务器信息,----作为web加速的前置机降低网络和服务器的负载

正向代理: 位于客户端和原始服务器之间----代理服务器到指定的目标服务器获取资源 ----正向代理是客户端代理
内存少,并发强

特点: 占有内存少 不超过2M ,并发能力强 3-5万次/秒
nginx集中式的负载均衡.
轮询upStream,权重 weight性能高的承担压力大 ,
nginx高可用,失败超时最大访问失败次数,
实现数据库主从同步
冷备份(规定时间内数据导入导出),热备份
读取二进制日志文件信息,记录读写位置position … 中继日志

Linux
重启网卡
命令1:systemctl stop NetworkManager
命令2: service network restart

解压tar -xvf
修改环境变量 vim /etc/profile
重启环境变量 source /etc/profile
yum install mariadb-server 安装数据库
刷新数据库权限 flush privileges;
关闭防火墙systemctl disable firewalld.service /// stop
检查防火墙状态 firewall-cmd --state
jps 检查tomcat的端口
删除文件 rm -f xxx.war

启动数据库 systemctl start mariadb
后端启动命令 nohup java -jar 8081.war -> 8081.log &
编写shell脚本 批量启动tomcat,
#!bin/sh sh start.sh 启动脚本

检查日志文件信息 cat tail -10 查看后10行日志信息
tail -f 动态打印日志信息
wget 软件地址
make install 安装nginx
whereis nginx 查看nginx工作目录
检查linux中的服务 ps -ef | grep redis
管道的作用: 将第一个查询的结果当做参数传递第二项.
检查java服务 ps -ef | grep java *
:set nu显示行号

修改ip地址 /etc/sysconfig/network-scripts
mysql数据库核心配置文件 /etc/my.cnf 可以查看mysql工作目录和数据库 服务id

数据库实现主从挂载,
show master status 主库状态
change master to master_host ip,端口号,user,pass.,file,读写位置
开启主从 start slave ,show slave status

mycat 心跳的自动故障切换, 读写分离. 8066端口
dataNode节点名称,dataHost节点主机,写主机 writeHost
switchType=1 表示会自动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会自动切换到第二个主节点

./mycat start 启动命令
./mycat status 检查状态
./mycat restart 重启命令
./mycat stop 停止命令

Redis 为了提高数据库查询能力,引入缓存服务器 5种数据类型,
tomcat: 150-220/秒
nginx: 3-5万/秒
redis: 写 8.6万/秒 读 11.2万/秒 ~ 平均10万次/秒

redis 非关系型数据库 一维表 redis ,mongodb,hbeis ,相当于json,根据k找数据
mysql 关系型数据库 二维表
redis.conf 中bind ip地址绑定 .开启后台运行,da–守护进程
redis-cli -p 6379 关闭方式2种
cp 复制文件操作
开启AOF appendonly 为true

Redis分片 JedisShardInfo, 集合 ShardedJedis

redis命令
String类型
new jedis, set ,get exists, expire设置超时时间 ,ttl监控剩余时间.persist撤销删除操作.
mset key value
mget 获取多个key
append 对某个key进行追加
incr incrBy 指定数据key添加
expire a 指定key的失效时间

flushdb 清空单个数据库
flushAll 清空所有
strlen key 根据key获取值长度

setnx key存在则不允许删
setex 保证原子性,一致性,操作
psetex 单位为毫秒

测试hash 类型,hset,hget
hgetall 获取hash全部元素和值 hgetall user
hkeys 获取hash中的所有字段
hvals 获取hash的所有值
hlen 获取hash中所有属性的数量 hkeys key
hmget 获取hash里面指定字段的值 hmget key field [field …]
hsetnx 设置hash的一个字段,只有当这个字段不存在时有效 HSETNX key field value
hstrlen 获取hash中指定key的值的长度 hstrlen key fileld

list集合 先进先出
lpush lpop
Lrange key 0 -1 获取全部队列的数据

redis事务 multi exec discard 执行结束

set
sadd srem
将对象转换为json ,ObjectMapper.
封装JSON转换工具类,

利用redis实现商品分类查询,如果缓存中没有,则从数据库取,有的话get key
//1.准备key 商品分类查询,定义父节点
String key = “ITEM_CAT_LIST::” + parentId;

查询一级商品分类信息

定义AOP 添加 缓存实现
pointCut bean细粒度 拦截类中的方法

AOP 实现缓存策略,定义注解@CacheFind
环绕通知拦截 缓存注解 @Around("@annotation(cacheFind)")

面向切面编程   执行目标方法,执行业务方法
公式:AOP=切入点表达式+通知方法

切入点表达式:
bean(bean的IO) 按照指定bean名称拦截用户的请求,之后执行通知方法
within(包名.类名)  可以按照类通配的方式去拦截用户的请求 ---类级别

execution(返回值类型 包名.类名.方法名(参数列表))  控制粒度较细
@annotation(包名.注解名称)  按照注解的方式去拦截用户请求

在分类和首页叶子类目加缓存, 每次查询数据库性能低,
穿透,击穿,雪崩

一致性hash算法
解决分布式缓存的问题

平衡性,单调性,分散性


复制文件夹 cp -r xxx
rm -f *.rdb 删除持久化文件

哨兵 高可用.
info replication 所有节点都是主机
slaveOf ip地址 redis端口号
ping-pong检测机制 监听主机 心跳检测,主机连续3次没,宕机
JedisSentinelPool 哨兵api

redis集群

哈希槽算法
.hash(key1)%16384 = 3000


web 页面展现
伪静态 html
MvcConfigurer实现WebMvcConfigurer后缀类型匹配
ASP 动态页面的脚本技术

同源策略说明
说明:浏览器中规定 Ajax请求 协议://域名:端口三者必须全部相同时,才能实现数据访问(同域请求),如果违反上述规则中的任意一个则该请求就是跨域访问.
如果浏览器进行跨域访问,则浏览器不予解析返回值
CORS 跨域
CORSConfig也是继承mvcConfigurer

sso单点登录
单点登录操作.及用户数据认证的业务
校验用户名,手机号,邮箱, typeMap和底层数据库校验
SpringCloud跨域中实现远程数据访问底层实现就是httpClient.
httpClient 底层是service层调用

RPC是远程过程调用(Remote Procedure Call)的缩写形式。由不同的服务之间进行的通讯就称之为RPC,RPC通讯用户无需了解协议的细节.像调用本地服务一样简单. RPC调用本质就是代理思想的应用.
注册中心:

搭建集群 公式: 剩余的主节点 > N/2
zk选举说明: zk选举采用最大值(myid)优先的机制.

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。~
单点登录

sso传给web一个ticket,web层添加cookie,. k为JT-TICKET ,value为ticket
ticket为UUID
WEB登录成功后,在web层创建cookie保存到客户端

退出操作,获取cookie
获取cookie的value,让后redis删除key

面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言
商品入库,新增操作,数据库没有则入库,有则更新数量

用户登录情况
用户没有登录的条件下不允许访问购物车/订单等敏感业务.跳转到登录页面 -----拦截器实现 HandlerInterceptor
利用拦截器的机制 要求动态的获取userId,之后将参数传递给Controller中. cookie—>ticket---->userJSON---->userId

项目权限控制
实现MvcConfigurer重写addInterceptors方法

@Override
	public void addInterceptors(InterceptorRegistry registry) {
		//   /**拦截多级目录  /*只拦截一级目录
		registry.addInterceptor(userInterceptor)
				.addPathPatterns("/cart/**","/order/**");
	}

userinter 实现HandlerInterceptor重写 preHandle方法,获取cookie如果存在cookie防在域中,JT_USER,user
如果没有jt-ticket则进行重定向到登录页面

Quartz 定时任务

组件说明:

  1. Job 是用户自定义的任务.
  2. JobDetail 负责封装任务的工具API.如果任务需要被执行,则必须经过jobDetail封装.
  3. 调度器: 负责时间监控,当任务的执行时间一到则交给触发器处理
  4. 触发器: 当接收到调度器的命令则开启新的线程执行job…
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/333800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号