Linux
centos7以systemctl管理守护进程,如查看nginx状态
以下以centos6为例
1.tar打包
打包, 将/usr/share/nginx/tempweb目录下的文件与子目录打包成一个文件库/usr/share/temp.tar
解包, 若以相对路径打包,解包时,以相对路径存放展开的文件;以绝对路径打包,解包时,以绝对路径存放展开的文件。
若指定展开的文件名,须注意文件的目录路径。
centos7以systemctl管理守护进程,如查看nginx状态
以下以centos6为例
打包, 将/usr/share/nginx/tempweb目录下的文件与子目录打包成一个文件库/usr/share/temp.tar
解包, 若以相对路径打包,解包时,以相对路径存放展开的文件;以绝对路径打包,解包时,以绝对路径存放展开的文件。
若指定展开的文件名,须注意文件的目录路径。
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,目的是让分布式系统中的所有元素,都有唯一辨识,而不需要通过中央控制端来做辨识指定。
由算法机器生成。为保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保证了其唯一性的同时,意味着只能由计算机生成。
非人工指定,非人工识别。UUID是不能人工指定的,除非你冒着UUID重复的风险。UUID的复杂性决定了“一般人“不能直接从一个UUID知道哪个对象和它关联。
支付业务通常分订单服务器(OrderServer)和支付服务器(BillingServer)。OrderServer用于生成订单,BillingServer用于
接收第三方(微信、支付宝等)用户支付完成的回调,并通知其他业务服务器。本文仅介绍BillingServer的补单机制,补单演进分如下几个阶段。
无补单机制。BillingServer接收第三方回调后,记录入库并打印日志,通知业务服务器,根据响应的成功或失败状态,更新订单记录。
若因网络等问题通知业务服务器失败,只能通过查库和日志的方式手动补单。
三次重试。接收第三方回调后,通知业务服务器,若返回失败,则重试通知。
自动补单机制应运而生。通过延时队列,九次补单,实现自动补单机制。简单实现如下:
延时队列因子
钉钉机器人,限制为消息仅可发送到群组。自定义机器人:官方文档
通过钉钉机器人发消息,官方提供了天气、github等机器人类别;grafana、elk等封装了自定义机器人webHook的请求发送;而像Jenkins等未封装请求发送的可通过脚本发送请求(如构建镜像完成后发送通知),如python脚本:
注:$someone_phone_number为要@成员的手机号、$someone_phone_number为创建自定义机器人时生成的webHook链接
参照ngrok搭建
外网服务器系统为centos7, 内网客户端系统为win7;一个指向外网服务器的公网域名
git开源项目,release包地址, 下载最新的,这里使用的版本为v0.17.0
外网服务下执行:
客户端直接下载,被墙的话,就开代理全局模式下载。
编辑frps.ini文件
执行命令开启服务,格式为程序 -c 配置文件,&符号指定服务后台运行。
编辑frpc.ini文件
执行./frpc.exe,连接服务
Redis HA官方提供两种方案,Cluster(分片)及Sentinel(哨兵模式),这里仅介绍Sentinel配置及使用。两者不冲突,实际可同时使用。
Sentinel优势如下:
Redis Sentinel方案至少需一个Master节点,两个Slave节点,三个Sentinel,本例Redis版本号为3.2.10,使用六个节点,拓扑结构如下:
|
|
注:Redis有两种持久化方式,Snapshot(rdb)和Append-only file(aof)。可使用其中一种方式,也可以两种都使用。
rdb方式的持久化通过快照完成,即符合一定条件时redis会自动将内存中的所有数据存储到rdb文件中。相对aof方式,rdb文件更小,数据恢复快,但是会丢失最后一次snapshot后更改的所有数据,如果容忍数据丢失,可采用这种方式。
本例对应配置参数为
dbfilename “dump-6379.rdb”
aof方式,redis默认不开启,aof方式是以追加的方式将所有写操作命令写入到磁盘文件.aof中,所以文件会越来越大,redis重启的恢复时间较长,为了缓解这种问题,redis使用了BGREWRITEAOF,用于删除重复多余的写命令,是一个占用一定系统资源的background进程(redis自行触发),因为rewrite的时候会删除旧的AOF文件,如果AOF文件比较大的话,会消耗更多的系统资源,好处就是数据一般不会丢失。
本例对应配置参数为
appendonly yes
appendfilename appendonly.aof
仅用缓存功能,不与JPA结合。Redis及Docker的基础用法自行查询。
|
|
出现如下界面为启动成功
|
|
统一日志初步处理。
|
|
详情查阅官网。
@Pointcut: 定义切点
execution: 匹配方法执行的连接点,语法为:
execution(方法修饰符(可选) 返回类型 方法名 参数 异常模式(可选))
@Before: 前置方法
@AfterReturning: 后置返回方法
@AfterThrowing: 异常抛出时调用
@After: 同final, 无论异常抛出还是正常退出,均调用
@Around: 环绕通知,即同@Before与@After结合
@Order: 当有多个aspect时使用,定义优先级,值越小,执行顺序越高
方法调用顺序:
为保证数据安全,数据库密码类字段设计成不可逆的定长密文,转为密文的过程需加盐。
写了个编码工具类,数据库字段的安全性可以保障。
前后端的通信安全,若想完全保障,则要使用https,从tcp层保证传输安全,但https从证书申请、搭建、到使用,成本感人,目前国内只有主流大型网站使用。目前大多数网站还是使用的http。
用户的密码在传输时必须是密文,由于前端代码本就是暴露的,即便通过加密混淆也可以反解,所以前端的加密方法必须是不可逆的,若可逆则只能防小白。
所以通过算法的安全性保证传输安全。
以登录为例。
1.数据库存储的密码字段为md5Hex + DES(AES)。
2.前端首先对密码进行单次Md5摘要CryptoJS.MD5(value).toString(CryptoJS.enc.Base64),Date.now()获取当前时间stime,根据stime尾数(0-9)再进行n次Md5,尾数为6,也就是循环6遍Md5摘要,stime的随机性使每次Md5摘要值都不同,可简单防范。
3.后端对比密码是否正确时,首先从数据库读取密码存储的密文字段,再进行DES解密, 然后根据stime, 对dbPassword进行多次Md5运算,将运算结果与前端传的摘要密码对比即可。过程如下