业务案例
自由圣骑士
喜欢学习、喜欢接近新事物。
展开
-
分布式 Session 解决方案
分布式Session一致性?说白了就是服务器集群Session共享的问题Session的作用?Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据那么服务器会创建一个新的sessionid并且响应给客户端。分布式Session存在的问题转载 2020-07-25 18:16:48 · 148 阅读 · 0 评论 -
分布式事务TCC结合业务说明
一、业务场景介绍咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。那对一个订单支付之后,我们需要做下面的步骤:更改订单的状态为“已支付”扣减商品库存给会员增加积分创建销售出库单通知仓库发货这是一系列比较真实的步骤,无论大家有没有做过电商系统,应该都能理解。二、进一步思考好,业务场景有了,现在我们要更进一步,实现一个TCC分布式事务的效果。什么意思呢?也就是说,订单服务-修改订单状态,库存服务-扣减库存,积分服务-增加积分,仓储服务-创建销售出库单。上述这几个步转载 2020-07-11 16:57:14 · 360 阅读 · 0 评论 -
java执行反射代码导致频繁创建奇怪的类从而发生元数据区被占满FUllGc案例
查看 JVM GC 日志没有一丝耽搁,老王立刻调出了线上GC日志,在日志里,看到了一个“Metadata GC Threshold”的字样,类似于如下日志:【Full GC(Metadata GC Threshold)xxxxx, xxxxx】通过GC日志,老王立即定位到这次频繁的Full GC,实际上是JDK 1.8以后的Metadata元数据区导致的。奇怪了,Metadata区域一般是放一些加载到JVM里去的类,为什么会被频繁的塞满,进而触发Full GC呢?老王陷入了沉思,一旁的小猛和彪转载 2020-07-03 13:49:07 · 3692 阅读 · 2 评论 -
Spring Boot 监听 Redis Key 失效事件实现定时任务
业务场景我们以订单功能为例说明下:生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是每个订单的创建时间不一样,定时任务的规则无法设定,如果将定时任务执行的间隔设置的过短,太影响效率。还有一种想法,在用户进入订单界面的时候,判断时间执行相关操作。方式可能有很多,在这里介绍一种监听 Redis 键值对过期时间来实现订单自动关闭。实现思路在生成订单时,向 Redis 中增加一个 KV 键值对,K 为订单号,保证通过 K 能定位到数据库中的某个订单即可,V 可为任意值。假设,生转载 2020-05-21 16:27:39 · 237 阅读 · 0 评论 -
如何设计一个高性能短链系统
如何设计一个高性能短链系统原创 2020-03-21 16:24:17 · 403 阅读 · 0 评论 -
微信和淘宝扫码登录背后的实现原理
1、扫码登录功能的完整技术逻辑1.1、网页端与服务器的配合逻辑接下来就是对于这个服务的详细实现。首先用户打开网站的登录页面的时候,向浏览器的服务器发送获取登录二维码的请求。服务器收到请求后,随机生成一个uuid,将这个id作为key值存入redis服务器,同时设置一个过期时间,再过期后,用户登录二维码需要进行刷新重新获取。同时,将这个key值和本公司的验证字符串合在一起,通过二维码生成接口...原创 2020-02-22 11:30:19 · 422 阅读 · 0 评论 -
httpClient不是单例的导致OOM
案发现场昨天晚上突然短信收到 APM (即 Application Performance Management 的简称,我们内部自己搭建了这样一套系统来对应用的性能、可靠性进行线上的监控和预警的一种机制)大量告警画外音: 监控是一种非常重要的发现问题的手段,没有的话一定要及时建立哦紧接着运维打来电话告知线上部署的四台机器全部 OOM (out of memory, 内存不足),服务全部不可...原创 2019-12-21 13:08:34 · 898 阅读 · 1 评论 -
压缩 20M 文件从 30 秒到 1 秒的优化过程!
有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以后也能使用但是随着前端所传图片的大小越来越大的时候,耗费的时间也在急剧增加,最后测了一下压缩20M的文件竟然需要30秒的时间。压缩文件的代码如下。public static void zipFileNoBuffer...原创 2019-12-02 19:27:43 · 128 阅读 · 0 评论 -
SpringBoot自定义请求参数校验
最近在工作中遇到写一些API,这些API的请求参数非常多,嵌套也非常复杂,如果参数的校验代码全部都手动去实现,写起来真的非常痛苦。正好Spring轮子里面有一个Validation,这里记录一下怎么使用,以及怎么自定义它的返回结果。一、Bean Validation基本概念Bean Validation是Java中的一项标准,它通过一些注解表达了对实体的限制规则。通过提出了一些API和扩展性的...原创 2019-11-29 19:40:39 · 804 阅读 · 0 评论 -
Redis 缓存+定时写入数据库实现高性能点赞功能!
本文基于 SpringCloud, 用户发起点赞、取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储。点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。点赞、取消点赞是高频次的操作,若每次都读写数据库,大量的操作会影响数据库性能,所以需要做缓存。至于多久从 Redis 取一次数据存到数据库中,根据项目的实际情况定吧,我是暂...原创 2019-11-29 14:25:03 · 3863 阅读 · 6 评论 -
如果你们的系统 CPU 突然飙升且 GC 频繁,内存占用率比较大,如何排查
如果你们的系统 CPU 突然飙升且 GC 频繁,如何排查原创 2019-09-27 15:00:39 · 904 阅读 · 0 评论 -
设计千万级用户量网站的高并发架构的架构演进
1、单体架构一般一个网站刚开始建立的时候,用户量是很少的,大概可能就几万或者几十万的用户量,每天活跃的用户可能就几百或者几千个。这个时候一般网站架构都是采用单体架构来设计的,总共就部署3台服务器,1台应用服务器,1台数据库服务器,1台图片服务器。研发团队通常都在10人以内,就是在一个单块应用里写代码,然后写好之后合并代码,接着就是直接在线上的应用服务器上发布。很可能就是手动把应用服务器上的...原创 2019-09-19 15:59:05 · 405 阅读 · 0 评论 -
什么是中台?为什么需要中台?
什么是中台?为什么需要中台?原创 2019-09-18 16:41:09 · 863 阅读 · 2 评论 -
如何设计一个百万级用户的抽奖系统
1、抽奖系统的背景引入本文给大家分享一个之前经历过的抽奖系统的流量削峰架构的设计方案。抽奖、抢红包、秒杀,这类系统其实都有一些共同的特点,那就是在某个时间点会瞬间涌入大量的人来点击系统,给系统造成瞬间高于平时百倍、千倍甚至几十万倍的流量压力。比如抽奖,有一种场景:某个网站或者APP规定好了在某个时间点,所有人都可以参与抽奖,那么可能百万级的用户会蹲守在那个时间点,到时间大家一起参与这个抽奖。...原创 2019-09-17 19:24:33 · 225 阅读 · 0 评论 -
10万/s并发的BI系统的业务发展流程
这个所谓BI系统,很多开发业务系统的同学可能没接触过,所以简单介绍一下他的背景。简单来说,比如你是一个平台,然后有数十万甚至上百万的商家在你的平台上做生意,会使用你的这个平台系统此时一定会产生大量的数据,基于这些数据我们需要为商家提供一些数据报表比如:每个商家每天有多少访客?有多少交易?付费转化率是多少?当然实际情况会比这个简单几句话复杂很多,这里就是简单说一下它的概念。因此就需要一套B...原创 2019-08-12 14:35:15 · 294 阅读 · 0 评论 -
2000万条数据从A数据库中读取并为每条记录生成guid放到B数据库中,生成关联表插入数据库A中的架构优化思路
项目描述我将公司的项目内容抽象,大概是要做这样一件事情:1、数据库A中有2000万条用户数据;2、将数据库A中的用户读出,为每条用户生成guid,并保存到数据库B中;3、同时在数据库A中生成关联表;项目要求为:1、将用户存入数据库B的过程需要调用sdk的注册接口,不允许直接操作jdbc进行插入;2、数据要求可恢复:再次运行要跳过已成功的数据;出错的数据要进行持久化以便下次可以选择恢...原创 2019-08-16 12:11:56 · 593 阅读 · 2 评论 -
微信、QQ等第三方账号登录的具体思路
一、多账户登陆互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如:网易、微信、QQ等,我们把此称为多账户统一登陆。通过这篇文章, 我想阐释多账户登陆的技术方案细节,以及相应的表设计,流程设计。我这里不会有具体代码实现细节,只要方案做的对,有思路,代码咋写都不会太烂。二、初期归结为创业初期是因为这个时候用户量比较少,甚至还没有接入上面所说的其他第三方的账户系统,只是自建的体系就...原创 2019-08-17 15:53:47 · 1617 阅读 · 0 评论 -
SpringCloud的相关架构简单介绍
1、大的单体项目有多蛋疼以前我们做单机系统的时候,所有的代码都在一个项目里面,只是不同的模块按照包名来划分的。我们以前做的一个某省的教育项目,有学生信息和就业系统、有高校培训系统、有一个人资系统等一共六个,4个小伙伴都在一个代码里面进行开发,各个系统之间有一定的联系,但是大部分是不相关的,但管理页面在一起。那时候我们都在一个项目里面码代码,每次启动好几分钟,还有就是包版本冲突问题,搞得真是蛋疼...原创 2019-08-29 14:13:53 · 154 阅读 · 0 评论 -
线上部署Kafka和ES,为啥JVM堆内存分配越大,性能反而越低------同一台机器jvm的内存越大导致os cache内存越小
1、是否依赖Java系统自身内存处理数据?先说明一点,不管是我们自己开发的Java应用系统,还是一些中间件系统,在实现的时候都需要选择是否基于自己Java进程的内存来处理数据。大家应该都知道,Java、Scala等编程语言底层依赖的都是JVM,那么只要是使用JVM,就可以考虑在JVM进程的内存中来放置大量的数据。还是给大家举个例子,大家应该还记得之前聊过消息中间件系统。比如说系统A可以给系...原创 2019-09-05 17:48:04 · 457 阅读 · 0 评论 -
Kubernetes插画版理解---很有趣
有一天女儿走进书房问他什么是Kubernetes,于是就有了这本插画版的Kubernetes 指南,讲述了勇敢的 Phippy(一个PHP应用),在Kubernetes的冒险故事。Hope You Enjoy The Story~有一天,女儿走进书房问我:「亲爱的爸爸,什么是Kubernetes呢?」我回答她:「Kubernetes是一个开源的Docker容器编排系统,它可以调度计算集群...原创 2019-09-09 10:57:15 · 151 阅读 · 0 评论 -
频繁的反射代码的执行导致方法区满了触发FullGC 线上惨案的分析、排查、解决
1、本文背景本文会给大家讲解一个比较特殊的JVM优化案例,这个优化案例本身是因为新手工程师对JVM优化可能了解了一个半吊子,然后不知道从哪里找来了一个非常特殊的JVM参数错误的设置了一下,就导致线上系统频繁的出现Full GC的问题。但是我们后续大量的优化案例其实都是各种各样奇形怪状的场景,因为正是各种奇怪场景才能让大家逐步积累出来较为丰富的JVM优化实战经验了解的场景越多,自己未来在处理J...原创 2019-09-10 14:12:05 · 2554 阅读 · 3 评论 -
一次http请求由于开启了延时ACK确认,开启了Nagle算法导致请求时间延长的解决办法
1、业务场景最近项目测试遇到个奇怪的现象,在测试环境通过 Apache HttpClient 调用后端的 HTTP 服务,平均耗时居然接近 39.2ms。可能乍一看觉得这不是很正常吗,有什么好奇怪的?其实不然,我再来说下一些基本信息,该后端的 HTTP 服务并没有什么业务逻辑,只是将一段字符串转成大写然后返回,字符串长度也仅只有 100 字符,另外网络 ping 延时只有 1.9ms左右。...原创 2019-09-11 14:47:37 · 1717 阅读 · 1 评论 -
针对大数据量的系统(如hdfs的文件契约的续约扫描等)怎么优化一个系统扫描所有的客户端实例的租约信息
1、概要这篇文章,给大家聊聊分布式文件系统HDFS在大量客户端并发写数据时,如何进行性能优化?2、背景引入先引入一个小的背景,假如多个客户端同时要并发的写Hadoop HDFS上的一个文件,这个事儿能成吗?明显不可以接受啊,因为HDFS上的文件是不允许并发写的,比如并发的追加一些数据什么。所以HDFS里有一个机制,叫做文件契约机制。也就是说,同一时间只能有一个客户端获取NameNode...原创 2019-09-12 11:13:16 · 244 阅读 · 0 评论 -
从单体架构演变成微服务架构的过程
要理解微服务,首先要先理解不是微服务的那些,通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。1、最初的需求几年前,小明和小皮一起创业做网上超市。小明负责程序开发,小皮负责其他事宜。当时互联网还不发达,网上超市还是蓝海。只要功能实现了就能随便赚钱。所以他们的...原创 2019-09-16 16:11:57 · 990 阅读 · 2 评论 -
设计一个电商平台积分兑换系统的流程和技术选型
1、拉开差距的一类面试题现在面试经常会遇到一类问题,面试官让你现场设计出某个业务场景下的一个系统,这个系统往往在业务或者技术上有一定难度,主要考察的是你多年积淀下来的系统设计的能力以及技术思维的能力。类似的这类系统设计题目很多,比如:请你设计一个秒杀系统请你设计一个支撑百万用户的IM消息系统请你设计一个微信红包系统请你设计一个电商平台积分兑换系统这些题目本身都是开放式命题,没有固定答...原创 2019-09-17 11:57:37 · 1450 阅读 · 0 评论 -
一次 jvm 的 Full GC 导致的工作线程卡顿造成系统A宕机问题
1、业务场景简单来说,这是一套分布式系统,系统A需要将一个非常核心以及关键的数据通过网络请求,传输给另外一个系统B。所以这里其实就考虑到了一个问题,如果系统A刚刚将核心数据传递给了系统B,结果系统B莫名其妙宕机了,岂不是会导致数据丢失?所以在这个分布式系统的架构设计中,采取了非常经典的一个 Quorum 算法。1.1、Quorum 算法这个算法简单来说,就是系统B必须要部署奇数个节点,比...原创 2019-08-20 11:32:12 · 1694 阅读 · 0 评论