![](https://img-blog.csdnimg.cn/20210711181504387.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
六 项目记录总结
文章平均质量分 61
实战中解决需求的思路
陈于晏8
一天进步一点点,加油!
展开
-
工作中使用门面模式
背景如果你开发一个新服务需要提供对外接口时,你会怎么做?比较好的做法是提供给前端一个统一入口,统一请求体,该请求体有一个serviceId,不同的接口有不同的serviceId,param传参数。系统根据不同的serviceId自己自动关联到某个Service,那么具体如果实现呢?这里涉及到设计模式中的门面模式。门面模式介绍门面:客户端可以调用门面,门面会将所有从客户端发来的请求委派到相应的子系统去。子系统:子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。原创 2022-02-17 22:02:16 · 253 阅读 · 0 评论 -
一次压测经历认识了雪花
前言这周同事把我拉进一个压测群,让我配合压测服务,主要是排查日志配合测试、运维人员压测。之后给了我项目资料,服务器信息,vpn等。等我拿到这些项目资料的时候,同事已经协助运维已经把这一套系统部署好了,测试人员已经准备开始压测了。该项目拓扑图大致如下:nginx负载均衡,每一组nginx对应两个门户集群,每个门户对应三个服务集群log4j2.xml设置之前测试人员在群里发了错误需要排查,我大概晚些进入群和测试人员有一个"时间差",之后同事转发测试人员在群里发的信息让我排查。我确定好ng原创 2021-12-04 23:52:10 · 2360 阅读 · 0 评论 -
我们是这样设计对外安全接口的
背景在日常工作中难免会调用第三方系统的接口,一个项目会有多个服务组合而成,负责各自核心的服务,在接触的项目中他主要以门户服务、核心服务组合而成。大部分门户服务会调用核心服务。当然如果有支付业务,会调用其他部门的支付服务,这样的话设计一个统一安全的对外接口就极为重要。安全措施AppId机制并不是谁都可以来调用的服务的。需要使用接口的服务需要在后台开通appId和相应密钥。数据加密数据在传输的过程中是很容易被抓包的,常见的做法对请求的内容做数据加密。数据加签数据在传输的过原创 2021-11-27 11:33:56 · 3522 阅读 · 0 评论 -
近期工作中关于优化SQL的总结
索引失效建了索引用Explain分析SQL发现没用上,难道是索引失效?索引失效的大部分情况都没有出现。之后才发现两张表的编码格式不一样也会导致索引失效。还有就是字段编码格式不一致也会失效。用上索引的思路有一个统计单张表的某个维度的接口,该表的crt_date为yyyymmdd格式,该张表有索引(crt_date),正常来说我们都是只是count就行,那么如何优化呢?我们可以在业务层先查找出来该张表最早的创建时间放入redis缓存,之后用上索引crt_date即可。order by 分页出现的原创 2021-11-10 22:48:32 · 516 阅读 · 0 评论 -
一次关于Spring Batch的实践
背景随着机构码用码量越来越多目前为止有4百万,统计异常接口响应时间会变慢,而且统计异常只统计48小时内,count效率实在太低。最后考虑使用采集的方式,将异常数据采集到另一张异常表,这样子的话count效率会高些。不仅要采集异常表,还要根据月份汇总归档表也就是分表的概念,这样也能减轻单表的压力。Spring Batch目前,Spring Batch是批处理框架为数不多的优秀框架,是一个轻量级、完善的批处理框架。提供了大量可重用的组件,包括了日志、追踪、事务、任务统计、任务重启、跳过、重复、资原创 2021-11-09 22:57:57 · 804 阅读 · 0 评论 -
redis高可用方案
背景有一个消息推送功能上线后发现好像没有成功。因为我开发的时候推送地址等配置是存储在我的redis里面,我怀疑是redis没有存储我的配置,所以我想登录生产redis去看这个key值存在不。过程因为是第一次接触这个项目,所以我先去程序配置文件拿到这个redis的地址,发现连不上,之后请教了同事。才知道生产上是这样连接redis的。我了解到这是一种主流的redis高可用方案,采用predixy + redis-cluster组合。硬负载 - > predixy 代理 ->redis原创 2021-09-20 23:34:27 · 260 阅读 · 0 评论 -
一个扩展功能竟然用到了适配器模式和工厂模式
背景这周在帮同事写接口文档的时候对返回字段不是很确定,开启了debug之旅。一开始看不懂这段代码,只知道具体实现类所在的位置。所以决定好好细品一下。先给大家看一下整体的结构// 使用工厂模式生成 HealthRiskHandler处理类String tagCode = "01";//tlvData.substring(0, 2);TLVExecutorFactory.Tag tag = TLVExecutorFactory.Tag.of(tagCode);TLVHandler h原创 2021-09-11 11:51:38 · 110 阅读 · 0 评论 -
一次多线程优化经历
背景张贴码批量导入后,需要支持批量下载。平台是前后端分离的,前后端响应是30s。所以尽可能的在30s下载更多的张贴码,超过30s就无了。没有优化之前遍历多张选择的实体->去构建张贴码->构建成功返回url,放入集合->拿着这些url压缩成zip。当时测试的时候是24s,下载了13张张贴码。利用多线程去优化定义一个核心数为10,最大线程数为20的线程池。在循环多张实体内,利用多线程去构建张贴码。之后再打包成zip。因为我们要拿到这些多线程构建张贴码原创 2021-09-10 22:45:08 · 116 阅读 · 0 评论 -
记录一次导入功能去重的问题
在做张贴码导入功能的时候,遇到了一个去重的问题。后端思想是:1 读取excel,把每一行数据看成一个实体2 开始每一行每个实体的校验3 校验成功后放入集合4 批量插入数据库正常想法是在每个实体校验的时候去数据库查询是否存在相同的张贴码,存在则抛出异常,不存在放入集合,批量插入。但是如果excel中有相同的张贴码相同就校验失败,也能导入了。因为每一行是跟数据库对比是否存在。解决是在放入集合前,跟集合中每一项在对比一次,不存在了放入集合。获取有人会觉得直接在批量插入数据库前把集合去重了更快。..原创 2021-09-10 22:36:55 · 140 阅读 · 0 评论 -
前端query,data,switch遇到的问题记录
前端query,data傻傻分不清背景有些开放平台项目是需要自己去写前后端的。记录一些自己开放中遇到的问题。针对某一个机构终端配置多个属性,我的想法是在url传机构id,配置项不在url传,后端利用dto去接受。过程我写的前端js//批量配置选择机构终端参数exportfunctionbatchConfigurationTerminal(merchIds,configurationTerminalForm){returnrequest({url:'/o...原创 2021-09-05 17:53:56 · 657 阅读 · 0 评论 -
缓存惹的祸
缓存惹的祸背景项目A遇到某些条件的情况下需要把某些消息推送至项目B,推送方式跟项目B负责人约定好后采用httpclient方式;数据库里有一张配置表专门来配置推送的url、appId等信息,配置好后开始开发。过程与项目B负责人约定好了推送模板后开始开发。这里为了提高响应速度,当项目A遇到某些条件下开始推送消息(采用线程的方式)推送类有这几个部分组成: 定义ThreadPoolExecutor线程池 Redis缓存获取配置信息 推送消息方法 开发好后本地调原创 2021-09-05 16:57:48 · 99 阅读 · 0 评论 -
Redis 缓存穿透 & 解决思路
背景在项目中,有一个注册电子健康卡的服务,用户注册电子健康卡时候,都要携带外部流水号来进行注册。我们的需求是并发情况下不能让流水号重复。由于每次每个请求都要去判断流水号是否重复,就要去数据库查询实体是否存在,并发情况下导致数据库压力较大,就引入了Redis来减少去请求数据库的次数。使用Redis就会出现缓存穿透的问题。缓存穿透缓存穿透是指缓存和数据库中都没有的数据,用户不断发起请求,我们的数据库不存这些数据时候,这时候用户很可能是攻击者,攻击就会导致数据库压力过大,严重击垮数据库。原创 2021-08-07 18:09:24 · 133 阅读 · 0 评论 -
Ngin 项目中的应用
Ngin 项目中的应用Nginx简介Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。请求流程下面这个流程图代表实际项目的集群部署,2台A应用,3台B应用,A会去请求B。总的来说A、B都是对外提供服务的,外界->A再调用核心B。Nginx.conf以下就.原创 2021-08-07 15:31:20 · 228 阅读 · 0 评论 -
异步记录用户系统访问实践
目录一 异步任务管理器实践设计思路1.0 背景1.1 如何记录?1.2 如何实现?1.3 线程池配置1.4 异步任务管理器1.5 异步工厂1.6 spring工具类1.7知识点相关资料异步记录用户系统访问实践设计思路1.0 背景上篇讲到五次登录失败限制登录用到了一张用户系统访问表,就是用户在访问系统不管成功还是失败都会记录到这张表。1.1 如何记录?如果说用户在访问系统成功和失败都记录的时候去记录的话多了一步记录的操作,势必会影响程序性能,影响原创 2021-07-11 23:52:58 · 285 阅读 · 0 评论 -
5次登陆失败,限制登录实践
一 限制登录实践设计思路1.0 背景最近在开发辽事通机构开放管理平台入驻功能模块功能。该模块涉及到注册、登录、入驻等功能。涉及到的技术有SpringBoot、Mybatis、Spring Security、Jwt、Npm、vue-cli、vue-router、vuex、element-ui1.1 思路后端思路:登录失败有以下这几种情况: 验证码失效 验证码错误 用户密码输入错误 以上三种情况层层递进,第三种的话是属于spring security原创 2021-07-11 18:14:31 · 2144 阅读 · 0 评论 -
验证码redis实践总结
一 验证码+redis应用设计思路1.0 背景最近在开发辽事通机构开放管理平台入驻功能模块功能。该模块涉及到注册、登录、入驻等功能。涉及到的技术有SpringBoot、Mybatis、Spring Security、Jwt、Npm、vue-cli、vue-router、vuex、element-ui1.1 验证码生成思路后端思路:a.将验证码存入redis,(键 值 时间 单位)其中键由常量+uuid拼接,值由随机生成4个字符串,时间为2分钟。b.利用BufferedIm原创 2021-07-11 17:03:51 · 1473 阅读 · 0 评论