技术方案
文章平均质量分 79
hanchao5272
路漫漫其修远兮,吾将上下而求索。https://hanchao.blog.csdn.net/
展开
-
接口开发-跨域访问-解决方案简单汇总
1 引言这是16年写的一篇小调查,现在贴到博客中。 因为当时时间有限、水平有限,所以内容较浅,而且还有很多不当之处。 还有就是当时参考的那些文章现在也记不得了,深感抱歉!1.1 编写目的编写接口开发跨域访问解决方案汇总的主要目的是,归纳整理目前可供选用的解决接口跨域访问的解决方案。 接口调用开发模式需要考虑一个重要的问题,即跨域访问问题。 跨域访问有两个方向的解决策略:原创 2018-02-07 12:28:25 · 13471 阅读 · 0 评论 -
MySqL: 并发量大、数据量大的互联网业务数据库设计军规
一、基础规范1.1.必须使用InnoDB引擎解读:支持事务、行级锁,并发性能好、CPU及内存缓存页优化使得资源利用率更高。1.2.必须使用utf8mb4编码解读:万国码,无需转码,无乱码风险,节省空间。1.3.必须为表、字段添加注释解读:不要给后来者挖坑。1.4.禁止使用存储过程、触发器、视图、Event解读:高并发大数据的互联网业务,架构设计思路是解放数据库CPU,将计算转移...转载 2019-08-05 11:40:10 · 533 阅读 · 0 评论 -
SPU与SKU的简单理解
1.1.SPUStandard Product Unit,即:标准化产品单元。用途:描述一种产品。举例: 一个土豪金色IPhone X和一个银色IPhone X都是同一个SPU,不进行颜色、商家的区分。场景:数据统计,例如:通过SPU查看本月IPhone X的销售量。1.2.SKUStock Keeping Unit,即:库存量单元。用途:描述一种产品的最小存货单元,即:单品。...原创 2019-07-31 20:29:54 · 2121 阅读 · 0 评论 -
老生常谈-forwar的与redirect的区别与联系
forward一种servlet的跳转方式,称之为转发。forward是对request对象的调用。forward是一次纯服务端行为,服务端根据request对象,在服务端内完成请求处理和转发行为,然后响应给用户。由于forward的是服务端内部行为,因此客户端的浏览器网址是不会发生变化的。由于forward过程属于同一次请求(request),所以可以将信息放到request中,实...原创 2019-06-23 10:59:02 · 1023 阅读 · 0 评论 -
通过堡垒机/跳板机实现文件在本地Mac与服务器之间的互传
1.堡垒机堡垒机,也可以成为跳板机。日常开发中,有时候需要连接远程服务器。为了安全性等方面考虑,连接远程服务器之前,需要先连接堡垒机。本地服务器、堡垒机和远程服务器之间的架构简单描述如下图:访问远程服务器的正常流程:通过ssh登录堡垒机。通过ssh登录远程服务器。2.环境本地计算机:Mac OS 10.13.4,假定IP为10.10.10.10堡垒机:Linux vers...原创 2019-06-18 15:43:34 · 32312 阅读 · 3 评论 -
一文弄懂cookie、session和token是什么、生命周期与缺点
1.http是无状态的很久之前,网站的作用是只是用来文档浏览,http请求不需要记录当前用户在网站的访问状态等信息。http协议是无状态的,自然可以满足上述需求。随着网络发展,尤其是交互式网络的兴起,如何用户的访问信息称为了必须解决的问题。2.cookie2.1.起源1994年,网景通讯的员工Lou Montulli为了解决一个购物车功能,将"Magic Cookie...原创 2019-06-21 15:34:01 · 3487 阅读 · 3 评论 -
记一次服务内存不断飙升的JVM调试过程
1.问题简述今天同事让我帮忙解决一个异常的服务,其表现如下:通过Spring Boot Admin监测到服务间歇性由状态UP变成OFFLINE。通过Spring Boot Admin监测到服务的状态变更是由于YGC导致的,JVM并未崩溃。通过k8s的pod监控发现内存使用率从16:10的15%飙升至17:40的33%。服务V最大内存8GB。服务某接口的压测结果:最大QPS为200左右...原创 2019-06-20 20:56:05 · 4736 阅读 · 8 评论 -
MySql通过Sharding-Sphere分库分表之后的在线DDL方案总结
1.概述之前,通过二次开发的分库分表中间件Sharding-Shere实现了对MySql的分表。由于某些原因,分库分表之后,原表和分表都在提供服务。现由于某些需求,需要对原和分表增加若干字段,并要求不能影响线上服务。此文章是对在线DDL的总结,前置文章如下:记一次分库分表——改造策略总结2.如何保证不影响线上服务经过调研,最终采用的是在线DDL插件:pt-online-schem...原创 2019-06-16 11:27:51 · 3107 阅读 · 1 评论 -
Docker环境下注册eureka的微服务status-page-url和health-check-url异常问题排查结果整理
一、问题简述172.17.0.2:为docker容器内部IP地址。x00001.prod.shunyi.beijing为服务器名,即HostName。10.20.30.40:为服务器IP地址,使我们真正需要的地址。${pers.hanchao.ip}:为服务器IP地址的占位符表示方式,用于传递给docker容器。1.1.eureka注册成功之后的正常表现在eureka注册中心,...原创 2019-06-15 11:02:53 · 6242 阅读 · 1 评论 -
SpringBoot中通过Redis的setnx和自定义注解@Idempotent实现API幂等处理
1.简述目的:一定时间内,同样的请求(业务参数相同)访问同一个接口,则只能成功一次,其余被拒绝。2.引入redis支持因为需要通过redis的setnx确保只有一个接口能够正常访问,所以需要引入redis。2.1.pom.xml<dependency> <groupId>org.springframework.boot</groupId> ...原创 2019-06-15 11:32:55 · 6750 阅读 · 2 评论 -
SpringBoot项目中通过MDC和自定义Filter操作traceId实现日志链路追踪
1.背景简述依赖原始的log4j2配置,很难从某服务庞杂的日志中,单独找寻出某次API调用的全部日志。本文通过在日志中打印唯一的traceId来实现每次调用的追踪。2.关键思路2.1.MDC日志追踪目标是每次请求级别的,也就是说同一个接口的每次请求,都应该有不同的traceId。每次接口请求,都是一个单独的线程,所以自然我们很容易考虑到通过ThreadLocal实现上述需求。考...原创 2019-06-15 16:39:56 · 18297 阅读 · 8 评论 -
log4j与log4j2性能对比及log4j升级至log4j2方案
1.前言之前某个服务在压测环境中出现了问题,分析之后得知是log4jLogger对象争用厉害,很多线程阻塞在此。以上问题证明log4j在高并发高QPS情况下,是存在性能问题的。之后把log4j升级成了log4j2,并采取异步日志模式,解决了因日志造成的性能问题。2.性能对比关于log4j与log4j2的性能对比文章有很多,本文不过多描述,给出几张结论图及原文链接,作为参考...原创 2019-06-16 11:03:53 · 11173 阅读 · 5 评论 -
微信服务号开发说明:测试号申请、自定义菜单添加第三方连接
微信服务号开发方式多种多样,本文对接触过的一种微信服务号开发模式进行记录,作为今后参考的依据。1.开发模式本文描述的开发模式如下:客户或者市场部等申请服务号。开发部开发并发布移动端服务的测试版本至互联网上。使用测试号进行微信的开发和测试:通过配置测试号的自定义菜单,指向已发布到互联网的测试服务地址。在正式上线前,获取已经审核通过的服务号。在正式上线时,将服务号的自定义菜单...原创 2018-03-19 11:25:57 · 10310 阅读 · 3 评论 -
记一次MySql服务器磁盘负载持续升高问题的优化
背景新年上班第一天,还没来得及从过年的氛围中缓过劲来,就收到了某个接口A的大量警报。分析过程备注:基于保密考虑,后续相关数据和分析图都是基于事实上进行的模拟。分析接口A耗时总览首先查看接口A的耗时图:有以下几个关注点:接口耗时之前稳定在50ms左右。接口耗时从2月2日开始持续上升至200ms左右。以上只是正常不报警的接口的耗时情况。基于接口A的警报阈值为3s,也就是说,还...原创 2019-02-15 15:22:02 · 1500 阅读 · 2 评论 -
SpringBoot中@Transactional事务控制实现原理及事务无效问题排查
1.spring事务管理简述两种事务管理方式:编码式事务管理:将事务控制代码编写在业务代码之中。声明式事务管理:基于AOP(面向切面编程),事务管理与业务逻辑解耦。声明式事务管理的两种实现:在配置文件(xml)中配置。基于@Transactional注解。2.SpringBoot中使用@Transactional注解2.1.开启事务注解在项目主类上,加上注解@Enable...原创 2019-05-19 16:21:35 · 9218 阅读 · 4 评论 -
JavaScript处理Long型丢失精度的几种后端(Java)解决方案
概述项目中用雪花算法生成分布式ID,这些ID是Long型的。当这些ID在前端通过JavaScript处理时,会存在精度丢失问题。本文不过多讨论为什么会丢失精度。本文只以后端(Java端)角度,提供几种解决方案。整体说明后台将Long转换成String类型有两大类解决方案:全局处理:通过编写全局转换器,对查询结果中所有的Long都进行转换。 优点:对于后端来说,开...原创 2018-07-25 20:36:06 · 7637 阅读 · 3 评论 -
实体类快速开发插件-lombok学习笔记
lombok通过简单注解消除常用编码如setter、getter等方法的编写。@Setter @Getter生成setter和getter方法默认setter和getter都是public的,可以通过AccessLevel.PRIVATE进行指定。final字段不会生成settr方法@Setter@Getter(AccessLevel.PRIVATE)private...原创 2018-07-25 20:48:45 · 675 阅读 · 0 评论 -
记一次分库分表——改造策略总结
前言抽空对前段时间的分库分表项目进行了简单的总结。因为多方面原因,其实这个项目只是涉及到了分表,并没有涉及分库。当然,分库与分表的思路是可以相互借鉴的。因为分库分表面对的场景多种多样,不能一概议论,所以本文只作为一种特定场景下的参考。因为本人水平有限,不足与待改进之处,请大家多多指教。场景概述缘由:1.基本已经达到单表的性能瓶颈;2.最近业务量会成倍增加。平均QPS:改造之后至少能...原创 2019-02-12 15:41:15 · 3282 阅读 · 2 评论 -
记一次Mysql连接未满但程序却报错连接已满获取连接超时GetConnectionTimeoutException的问题
1.问题描述今天同事找到我,让我帮忙查一个问题,据说已经持续一个月:之前服务正常,问题在上个月开始出现。服务运行大概1天左右,后台开始报错:获取数据库连接失败GetConnectionTimeoutException。服务配置的最大连接数maxActive=600。但是,此时通过show processlist却显示此服务实际只占用了300~400左右的连接。服务重启,问题暂时消失。...原创 2019-08-27 15:20:00 · 16514 阅读 · 8 评论