项目技术栈
实例项目
zero _s
这个作者很懒,什么都没留下…
展开
-
分布式锁和事务的优先级问题
如果service层中某个方法需要用到事务,且需要加分布式锁,则一般事务在内层,锁在外层,避免出现已经解锁了但是事务还没提交,从而出现优惠券超领的情况所以一般都是事务在service层中添加,但是分布式锁在controller层中添加 @ApiOperation("领取优惠券") @GetMapping("/add/promotion/{coupon_id}") public JsonData addPromotionCoupon( @ApiParam原创 2021-10-02 21:05:15 · 2622 阅读 · 0 评论 -
业务微服务实现快速扩容和缩容
在突发流量的时候,可以实现快速扩容,流量峰值过去后快速缩容。比如新浪的某个热点时访问量暴增,热点过去后流量回归平常。利用webhook监听;在rancher的api模块,有这个功能,可以配置监听。其中步长表示每调用一次扩容的个数,最小数量表示缩容时候的最小值,做大数量表示扩容时候的最大值。在流量高峰的时候,监听器监听到后会发送http请求,并进行扩容。hook需要使用post方式进行请求。其中目标服务即为配置的微服务。要实现自动扩容和缩容的前提是有足够的资源池。扩容和缩.原创 2021-10-01 22:53:21 · 1318 阅读 · 0 评论 -
rancher部署paas
容器化部署rancherdocker run -d --restart=unless-stopped -p 8888:8080 rancher/server浏览器访问: ip:port一般在gataway前面还需要加一层Nginx。Nginx和spring cloud gataway 在功能上有一些重叠的地方,但是各司其事配合使用部署Nginx安装并配置Nginxdocker pull nginxdocker run --name ng...原创 2021-10-01 19:50:41 · 122 阅读 · 0 评论 -
项目部署总结
部署流程:1、本地进行容器化镜像部署打包2、本地推送镜像到镜像仓库3、容器编排管理平台部署(devops)首先需要在全局项目中添加打包镜像的全局变量<docker.image.prefix>xdclass-cloud</docker.image.prefix>在每个微服务中添加构建镜像的脚本 <build><!-- 打包的名称--> <finalName>alibaba-cloud原创 2021-09-30 22:24:03 · 214 阅读 · 0 评论 -
sentinel流量控制
sentinel以流量为切入点,从流量控制,熔断降级、系统负载保护等多个维度保护服务的稳定性;应用场景:消息的削峰填谷、集群流量控制、实时熔断下游不可用应用等;sentinel还能进行实时的监控功能。 sentinel文档一、部署sentinel拉取镜像:docker pull bladex/sentinel-dashboard:latest查看镜像:docker images启动sentinel docker r...原创 2021-09-29 22:38:52 · 394 阅读 · 0 评论 -
网关gateway配置流程
1、在网关模块添加依赖<!-- 网关的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency><!--原创 2021-09-28 23:21:14 · 4238 阅读 · 0 评论 -
防止重复提交表单数据
下单键防止一直点击1、获取提交表单令牌token @ApiOperation("获取提交订单令牌") @GetMapping("get_token") public JsonData getOrderToken(){ LoginUser loginUser = LoginInterceptor.threadLocal.get(); String key = String.format(CacheKey.SUBMIT_ORDER_TOKEN_KEY,.原创 2021-09-28 20:42:22 · 105 阅读 · 0 评论 -
锁定优惠券
在实现锁定优惠券的过程中:1、锁定优惠券记录 将coupon_record 中当前用户的优惠券的状态由new改为lock <!--批量锁定优惠券记录--> <update id="lockUserStateBatch"> update coupon_record set user_state = #{useState} where user_id = #{userId} and user_state = "NEW" and原创 2021-09-28 19:44:08 · 447 阅读 · 0 评论 -
支付模块开发的工具准备
对称加密是指加密和解密所用的密钥是一样的。非对称加密是指加密和加密所用的密钥不一样,是一对,一个公钥和一个私钥,分别用来加密和解密开发助手简介 | 网页&移动应用 可以生成密钥生成的两对密钥。...原创 2021-09-28 19:43:28 · 47 阅读 · 0 评论 -
项目难点之下单(26.2)
下单过程需要锁定库存,同时需要锁定优惠券,而库存在product微服务模块,优惠券在coupon模块,涉及到分布式事务,但是通常情况下不能使用分布式事务:扣减库存这一步可能出现的问题: 下单逻辑完整版,用来替代分布式事务:下单后创建订单(order表里面生成记录)扣减库存,之后生成一个库存锁定记录,标注这个订单号关联的用户、商品以及买了几件,这部分信息会存储在mysql的表里面;同时会发送一个延迟消息到MQ 里面;创建订单、...原创 2021-09-23 20:32:23 · 454 阅读 · 2 评论 -
商品微服务模块
购物车实现存储购物车信息的四种方法:1、存储到数据库 ------存在性能瓶颈2、前端本地存储:localstorage 没有过期时间sessionstorage 关闭会话的时候会过期3、存储到redis中 开启AOF持久化防止丢失4、存储到redis中 并同步更新到数据库中,此时家了用户的唯一标识后,没有高并发的场景,因此不用考虑redis缓存与数据库的一致性问题。购物车在redis中一般用hash数据结构来存储,是一个双层的...原创 2021-09-20 21:33:33 · 164 阅读 · 0 评论 -
流量漏斗模型
两个微服务之间的调用:方案1:RPC调用 RPC简介方案2:消息队列 通过流量漏斗模型可以得出结论,日新增量并不多,因此不需要引入消息队列,直接使用RPC调用即可。但是这一涉及到分布式事务,即可能注册成功但是发放优惠券失败。新用户---注册---发放优惠券新用户注册后发放失败,可能需要人工补发或者定时任务重发等,不能直接回滚到注册一步。...原创 2021-09-20 10:39:21 · 1044 阅读 · 0 评论 -
高并发下如何解决超卖问题
限流:通过配置sentinel解决队列、异步 通过加锁sychronized或者lock来说定扣减优惠券这一步的化,出现的问题是:sychronized作用范围是单个jvm实例,对于集群分布就失效了,且单机jvm加锁之后变成串行效率下降可以用分布式锁,但是分布式锁过于笨重性能下降。有时为了解决ABA问题,还需要加上一个版本号字段,然后判断版本号是否相同。扣减库存的多种sql适用场景第一种: update product...原创 2021-09-20 09:20:18 · 888 阅读 · 0 评论 -
越权攻击以及优惠券初始化
指的是应用在检查授权时存在的纰漏,使得攻击者在获得低权限用户账号后,利用一些方式绕过权限检查,访问或者操作其他更高的权限。产生原因:主要是开发人员对数据进行增删改查的时候对客户端的请求的数据过分的相信,而遗漏了权限判定。水平越权:攻击者参是访问与它拥有相同权限的用户的资源比如A 用户可以直接操作B用户的数据垂直越权:一个低级别攻击者尝试访问高级别用户的资源比如普通管理员登录,拼接浏览器地址,直接访问高级管理员的页面。 // 需要防止水平越权攻击,即其他用户来操作这步,因此在sql中原创 2021-09-19 07:52:41 · 116 阅读 · 0 评论 -
登录拦截器
步骤: 1、解密jwt 2、传递登录用户信息, 可与通过 // request.setAttribute("loginUser",loginUser); 来传递用户信息 也可通过threadlocal来传递。threadlocal 同一个线程共享的变量,方便同一个线程的其他方法获取该信息。避免了传参,相当于同一个线程的全局变量。使用场景:用户登录令牌解密后的信息传递,还有用户权限信息,从用户系统获取到的用户...原创 2021-09-18 21:59:31 · 158 阅读 · 0 评论 -
用户注册模块
利用唯一索引来保证用户的唯一性,将邮箱字段作为唯一索引的字段ALTER TABLE USER ADD UNIQUE(`mail`);登录校验之JWTJWT是一个开放标准,定义了一种用于简洁,自包含的用于通信双方之间以json对象的形式完全传递信息的方法,可以使用Hmac算法或者psa的公钥密钥对进行签名。简单来说就是通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息。jwt工具类开发和解密token1、添加依赖...原创 2021-09-17 21:33:04 · 1020 阅读 · 0 评论 -
分布式文件存储
一台主机来存储文件,比如海量用户登录的头像,磁盘空间在用户量大的时候会出现不足,因此需要采用分布式存储系统,方便扩容。但是在分布式存储系统中高性能与高可用是矛盾的,由CAP定理也可推断出。做分布式文件存储,如何保证高性能和高可用: 对性能的考虑:记录数据的时候先写一份数据到某个机器上(不用等成功)并立即返回,然后异步发起多个数据备份的过程,这种设计性能最好,但是存在容错性风险,加入返回后,还没来得及同步给其他节点就宕机了,则数据丢失。 也可以同时写多个副本,每个副本写成功...原创 2021-09-16 07:20:50 · 1242 阅读 · 0 评论 -
注册模块以及安全攻防--图形验证码模块
需求:用户通过手机号或者邮箱注册---获取验证码-----填写密码等----数据库存储信息安全性:高并发下邮箱唯一性 注册邮箱和手机验证码不能被恶意调用 头像文件存储访问方便管理和扩容利用谷歌的kapcha框架做图形验证码工具。需要将依赖加到聚合工程的总配置文件以及user模块中<!--kaptcha 验证码依赖包--> <dependency> &l...原创 2021-09-13 23:37:08 · 167 阅读 · 0 评论