架构
归海一刀之渔舟唱晚
这个作者很懒,什么都没留下…
展开
-
分布式唯一ID创建
一,题记所有的业务系统,都有生成ID的需求,如订单id,商品id,文章ID等。这个ID会是数据库中的唯一主键,在它上面会建立聚集索引!ID生成的核心需求有两点:全局唯一趋势有序二,为什么要全局唯一?著名的例子就是身份证号码,身份证号码确实是对人唯一的,然而一个人是可以办理多个身份证的,例如你身份证丢了,又重新补办了一张,号码不变。问题来了,因为系统是按照身份证号码做唯一主键的。此时,如果身份证是被...转载 2018-03-06 22:57:15 · 223 阅读 · 0 评论 -
手写基于redis实现分布式限流器-pdlr
一.限流器介绍 简单来讲,限流器就是控制流量访问速率的一种机制,在短时间内大量流量访问时,不至于使服务器崩溃。比如,一分钟之内,如果限制1000个请求可以访问,当第1001个请求到达时,请求被拒绝(这时最好对其进行监控)。二.限流器的实现方式 目前常用两种: 1.使用计数器法。一段时间内,限制请求可以访问的个数,guava框架里面有一个ratelimit。 ...原创 2018-08-04 13:18:35 · 1256 阅读 · 2 评论 -
延时job设计
一.设计初衷 目前系统系统job任务是每10分钟重试一次,总共重试7次。所有需要重试的请求都在10分钟之内堆积,如果请求量过大,这个时间点压力都有可能落到数据库上面,从而造成数据库崩溃。 此外时间配置不够智能化。如果两小时之后所依赖的第三方系统稳定,而目前的重发机制相当于失效了。 基于上面两个原因,提出了改进方案,使用延时job实现功能!二.功能原理 ...原创 2018-11-23 17:50:14 · 425 阅读 · 5 评论 -
接口幂等设计
一.引言 在系统设计时,经常会出现每次操作结果都需要一致的场景。比如典型的restful get请求 ,每次请求url/student/1(查询第一个学生),结果都是一样的。当然排除再修改学生信息后又查询的情况。 接口幂等,通俗的定义可以为:每次同样的请求操作该接口,得到的结果都是一样的。二.实现方式 先给个场景,同样的订单编号发起两笔支付,按道理数据库...原创 2018-10-24 21:55:33 · 390 阅读 · 1 评论 -
《effective java》builder模式一些思考
在java中,对于类中属性赋值,大部分情况下会使用set,get,可能还有些boolean的属性有些框架会用is做为前缀。但是对于一个类中有多个参数,总不能set多个参数或者构造函数中写多个参数的构造吧。在idea中生成构造函数和set/get方法都是有快捷方式的,但是在使用的时候就痛苦了。对于这个问题,有没有什么好的解决方法呢?《effective java》中推荐使用bulder模...原创 2018-05-05 22:45:41 · 819 阅读 · 1 评论 -
分布式锁实现方案
在高并发场景中,我们需要对资源上锁。比如在秒杀商品时,大量请求过来,不上锁可能导致超卖等现象的发生。大家都知道在java中,它自身就提供了很多锁,synchronized,lock,ReentrantLock....它们可以工作在单机项目里面,但是在分布式项目里面,他们就不能保证对全局资源的掌控了。那如何实现在分布式环境中对全局资源的掌控呢?(声明,此处只探讨数据库和redis实现)1.数据库实现...原创 2018-05-05 19:25:24 · 491 阅读 · 1 评论 -
Leaf——美团点评分布式ID生成系统
背景在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,那业务系统对ID号的要求有哪些呢?全局唯一性:不能出现重...转载 2018-02-25 10:23:28 · 4057 阅读 · 0 评论 -
浅谈后端高并发的几种设计方法
在高并发的应用场景中,前端需要更快的渲染速度,而后端不仅需要更快的接口速度,而且还需要保证数据的一致性。前端设计中可能会有静态页面,cdn等的优化手段,在后端架构中,通常也需要引用高并发程序的解决方案。下面主要谈谈后端的处理方案。分层后台主要有两块,一块是数据库,一块的业务块,当然业务层里面还可能包含对别的服务调用。数据库层使用的优化手段1.分库分表。但是在做设计的时候最好考虑到在不停机的状态下可...原创 2018-04-23 01:33:17 · 8709 阅读 · 5 评论 -
Web系统大规模并发:电商秒杀与抢购
大规模并发带来的挑战在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常状态。我们现在一起来讨论下,优化的思路和方法哈。请求接口的合理设计一个秒杀或者抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是参与秒杀的Web后台请求接口。通常静态HTML等内容,是通过CDN的部署,一...转载 2018-04-15 00:52:28 · 234 阅读 · 0 评论 -
从分布式一致性谈到CAP理论、BASE理论!
一、问题的提出在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景。1、火车站售票假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车 票,然后拿着车票去检票口,再坐上火车,开始一段美好的旅行----一切似乎都是那么和谐。想象一下,如果他选择的目的地是杭州,而某一趟开往杭州的火车 只剩下最后一张车票,可能在同一时刻,不同售票窗口的另一位乘客...转载 2018-03-20 12:55:23 · 156 阅读 · 0 评论 -
SOAP webserivce 和 RESTful webservice 对比及区别
简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME),基于“通用”传输协议是 SOAP的一个优点。它还支持从消息系统到远程过程调用(Remote Procedure Call,RPC)等大量的应...转载 2018-03-12 13:38:28 · 165 阅读 · 0 评论 -
消息顺序调度器--pmoc
一.说明 框架主要解决消息按顺序消费问题,比如 1,2,3,4,5 ,可以一次性将消息消费完。 3,2,7 第一次只能消费3,第二次可以消费2,7 项目中主要支持两个配置方式,redis模式,mysql模式 具体配置看代码[pmoc-core]config.driver包二.架构设计 项目中主要完成了redis模式的实现 redis: 设计了...原创 2019-05-19 18:52:40 · 552 阅读 · 1 评论