方案集

作者: saoraozhe3hao | 来源:发表于2018-11-07 10:33 被阅读0次

定时器

1、Linux,Crontab,周期运行Shell脚本,可以用于清理日志
详见:https://www.jianshu.com/p/988a2dd7c242
2、Java Timer,周期运行Java程序
详见:https://www.jianshu.com/p/f82f3b9a3f9e
3、Spring Scheduling,周期运行Java程序
详见:https://www.jianshu.com/p/4ae315debf03
Spring部署了多台,需要分布式锁,保证只有一台执行了定时任务
4、RocketMQ,setDelayTimeLevel(),单次定时消费
详见:https://www.jianshu.com/p/b18107ac8abf
5、MySQL,create event on schedule,周期运行存储过程,可以用于清理数据
详见:https://www.jianshu.com/p/058daf3f44d7

单点登录

SSO:Single Sign On,单点登录
角色:认证中心、子系统
认证中心:只有一个认证中心,只在认证中心提供登录界面
全局会话:认证中心持有的用户会话信息
局部会话:单个子系统持有的用户会话信息

认证流程
1、用户访问子系统,子系统发现没有该用户的局部会话,跳转到认证中心
2、认证中心发现没有该用户的全局会话,跳转到登录界面
3、用户登录后,认证中心创建该用户的全局会话 和 授权令牌,带着授权令牌跳转回子系统
4、子系统拿令牌让认证中心校验令牌有效性,并创建局部会话

注销流程
1、用户在子系统注销,子系统拿令牌让认证中心注销全局会话
2、认证中心向所有子系统发出注销请求,各子系统销毁局部会话,重回认证流程

方案
1、Apereo CAS
CAS:Central Authentication Service
官网:https://apereo.github.io/cas/5.3.x/index.html
源码:https://github.com/apereo/cas
Jasig组织:Java in Administration Special Interest Group,是1999年成立于美国的开源组织
Apereo基金会:2012年,Jasig组织与Sakai基金会合并为Apereo基金会
历史:CAS最早由Yale大学创立,2004年成为Jasig的项目,现由Apereo维护

2、Spring Security OAuth 与 Spring Social
见:https://www.jianshu.com/p/98af876d2e2c

秒杀

问题:用户会不停刷新秒杀页面
方案:前端性能优化 + CDN

问题:客户端时间与服务器时间不同步
方案:刷新页面时,从服务端获取时间,对比与本地时间的差距,之后每分钟与服务器同步一次时间

# Nginx直接返回时间
location ~ ^/get_time {
    default_type application/json;
    return 200 '{"status":"success","time":"$time_local"}';
}

问题:用户会重复点击抢购按钮
方案:点击一次以后灰化按钮,刷新页面再点击,提示已抢购 或 自己的抢购结果 或 秒杀进度

问题:内行人员会绕过浏览器,重复抢单
方案:对同一个会话进行限流,一个会话只能提交一次

问题:海量订单写请求
方案:将订单请求push到消息队列,队列长度上限即库存量,push不进队列的请求,直接返回抢购失败

问题:海量库存读请求
方案:将库存提前写入缓存,接受来自客户端 和 消息消费者 的库存查询

分布式锁

功能:保证同一个方法在同一时间只能被一台机器上的一个线程执行
概念
加锁:语义上可以和 “获得锁”、“得到锁”通用
拥有锁:加锁后即拥有了锁
可重入锁:锁的拥有者 可以重复加锁
悲观锁:即悲观得认为别人随时会来更新数据,所以一开始就加锁。一锁二查三更新。数据库自带机制,select * from person for update of person.name; 锁定person.name,事务提交或回滚后才释放
乐观锁:即乐观得认为别人不会来更新数据,所以一开始不用加锁。表中引入一个版本号(version)字段,查数据时得到version,更新数据时检查数据库中version是否变化,如果是,则正常更新,同时version加1。如果不是,则更新失败。

一、基于数据库实现分布式锁
原理:
1、数据库里设置一张表,有唯一性约束的method_name字段
2、加锁时,插入一条记录
3、释放锁时,删除这条记录
缺点:
1、锁没有失效时间,一旦解锁操作失败,后续再也没有线程能加锁
2、没有加锁排队机制
3、不能重入
4、性能稍差

二、基于缓存实现分布式锁
原理:与一类似
缺点:
1、没有加锁排队机制
2、不能重入

三、基于Zookeeper实现分布式锁
原理:
1、客户端在ZK中创建一个临时锁,一旦Session连接断开,这个临时锁就会自动删除
2、有加锁排队机制,客户端可以监听队列变化
3、客户端可以查询自己是否拥有锁

OpenAPI

术语约定:secret,key 约定为 key

方案1:每次请求带上key
案例:旷世Face++平台

方案2:用key调用登录接口得到token,后续每次请求都带上token
缺点:token有有效期,客户端需要管理token
案例:百度大脑平台

方案3:让请求参数 和 key参与签名得到sign,请求时带上sign
优点:不用在请求中带key
案例:腾讯AI开放平台

随机数

1、commons-lang3

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
RandomStringUtils.randomAlphanumeric(16);

2、commons-codec

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.12</version>
        </dependency>
new SecureRandom().generateSeed(8);

JSON

1、Jackson

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.5</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.5</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.5</version>
</dependency>
new ObjectMapper().writeValueAsString(object or map)

2、FastJson

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>
JSONObject.toJSONString(object or map)

相关文章

  • 方案集

    定时器 1、Linux,Crontab,周期运行Shell脚本,可以用于清理日志详见:https://www.ji...

  • 临床试验CRF中Form介绍11:Exposure (EX)

    1、EX数据集收集什么信息? SDTM中EX数据集收集受试者暴露在方案中指定的试验治疗信息。试验治疗可能是方案中提...

  • 刨根究底字符编码之九——字符编码方案的演变与字节序

    字符编码方案的演变与字节序 一、字符编码方案的演变 1. 前文已经提及,编号字符集CCS(简称字符集)与字符编码方...

  • FMResultSet 是否需要关闭

    问题 问题代码 错误在使用FMDB执行查询时未关闭返回结果集(FMResultSet) 解决方案(手动关闭结果集)...

  • task3

    过拟合、欠拟合及其解决方案 训练集和测试集 测试数据集不可以用来调整模型参数,如果使用测试数据集调整模型参数,可能...

  • 机器学习模型评估

    1.训练集测试集划分方案 a)留出法hold-out 直接将原始数据集D划分为两个互斥集合,其中一个作为训练集S,...

  • 集社微功率无线通讯抄表解决方案!

    集社微功率无线通讯抄表解决方案!集社微功率无线通讯抄表解决方案,一.微功率无线通讯是什么?微功率无线传输是指利用无...

  • Java类集框架

    类集框架简介   从JDK1.2开始,Java中引入了类集开发框架,所谓的类集指的是一套动态对象数组的实现方案,在...

  • 生产环境中的JBoss AS7 集群方案

    JBoss AS7集群方案...2 基础环境搭建...2 安装jdk.3 AS7安装、配置3 AS7群集配置、测试...

  • 临床试验CRF中Form介绍12:Exposure as Col

    1、EC数据集收集什么信息? SDTM中的EC数据集保存实际收集的方案指定的研究用药的信息,EC是SDTM IG ...

网友评论

      本文标题:方案集

      本文链接:https://www.haomeiwen.com/subject/bjmmxqtx.html