架构设计
业务架构、技术架构的文章会放入到这个专栏里面
Sam_Deep_Thinking
你有价值了,这个世界会打赏你的。
展开
-
系统的限流功能真的很重要
系统的限流功能就是保命用的。原创 2021-12-19 20:52:25 · 728 阅读 · 0 评论 -
利用DB实现分布式锁的思路
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域和SystemB域这几个JAVA应用,可能同时修改同一份库存数据。如果不做协调的话,就会有脏数据出现。对于跨JAVA进程的线程协调,可以借助外部环境,例如DB或者Redis。下文介绍一下如何使用DB来实现分布式锁...原创 2020-01-06 16:17:54 · 5642 阅读 · 4 评论 -
没有财务系统如何对账?
没有财务系统如何对账?原创 2020-12-28 12:35:58 · 1480 阅读 · 2 评论 -
netty实战-netty client连接池设计
概述最近有很多网友在咨询netty client中,netty的channel连接池应该如何设计。这其实是个稍微有些复杂的主题,牵扯到蛮多技术点,要想在网上找不到相关的有相对完整的参考文章,确实不太容易。在本篇文章中,会给出其中一种解决方案,并且附带完整的可运行的代码。如果网友有更好的方案,可以回复本文,我们一起讨论讨论,一起开阔思路和眼界。阅读本文之前需要具备一些基础知识知道netty的一些基础原创 2017-09-15 13:58:31 · 27299 阅读 · 12 评论 -
索引表和ES的一点点思考
索引表设计在电商项目中,物理库存系统是个极其重要的系统,订单支付后,就会开始来占用物理库存。一般情况下,库存系统都是要分库的,因为主要的操作是写操作,例如占用/释放/取消等写操作。使用分库可以降低数据库写的压力。尽管写操作为主,但是读操作也是有的。比如说,库存占用的时候,得先查询是否有库存,而这个查询操作并不都会带上分库因子(用于路由到具体的某个数据库),而是一些比较宽松的查询条件,这些查...原创 2018-03-01 12:22:47 · 13435 阅读 · 35 评论 -
创建订单实现幂等的一点思考
幂等的概念大部分文章都会说,同一个操作,进行多次操作后,结果是一样的,就可以说这个操作是支持幂等的。感觉不太准确,比如一个http get操作,可能每次的结果都不一样,但是其实是幂等的。看了很多文章,感觉下面的定义比较准确: 一个操作如果多次任意执行所产生的影响(或者叫副作用),都是相同的。创建订单的幂等如果一个用户分两次下单,购买的商品都是一样的。第一次...原创 2018-03-06 13:55:49 · 8134 阅读 · 0 评论 -
业务流水号(交易号)生成方法
概述在大流量下订单号生成方法一文中介绍了如何生成不重复的订单号,主要原理是利用数据库自增ID。但是像业务流水号之类的,其实不利用数据库也是可以的,只是要保证唯一性,做起来不太好做。下文介绍一种方法来生成流水号,如果不是那种特别变态的调用量,产生重复的机会还是很少的。但是如果是那种无论如何都不能重复的,不建议用本文的方法了。流水号生成规则 时间+四位的机器号+10位的...原创 2018-03-09 12:56:16 · 28275 阅读 · 3 评论 -
大流量下订单号生成方法
流量不大的情况下,订单号生成很久之前写过一篇利用DB生成业务主键的文章,介绍了利用DB来生成唯一的ID。当时便是用这种方式来生成订单号的。只不过拿到ID后,根据订单业务,简单加个前缀而已。@Servicepublic class KeyGen{ @Autowired private KeyGenRepository keyGenRepository; publi...原创 2018-03-08 12:30:02 · 4685 阅读 · 0 评论 -
重构购物车的过程
背景公司目前所有的核心业务都在一个应用中,属于单体应用,随着业务的快速发展和开发人员的不断增加,单体应用的开发模式就开始暴露出各种各样的问题。经历过这个过程的开发人员,想必深有体会。我举个最近才遇到的一个例子。今年的八月份,有5个大需求要在同一天上线,由于只有一个单体应用,5个需求又都不同,因此拉了5个开发分支,对应5个需求。好了,在八月的某个相同时间段,各个测试人员都要开始测试自己负...原创 2018-08-26 15:31:31 · 2068 阅读 · 4 评论 -
Spring Cloud工程模块划分
Spring Cloud工程模块划分现在网络上都在讲Spring Cloud的各个组件,但当我们自己也把Spring Cloud引入进来的时候,却发现第一个要解决的问题是:工程的模块如何划分在之前我写过一篇重构购物车的过程的文章,下面就以这个购物车工程,来说明当时我是如何思考和如何做的。工程要分几个模块API模块当时的购物车工程是基于Spring...原创 2018-08-28 16:37:56 · 18583 阅读 · 1 评论 -
设计要做到扩展性强还挺难的
从营销工具-【满减活动】谈代码设计扩展性原创 2018-11-21 10:47:40 · 3353 阅读 · 15 评论 -
连续调用多个外部系统的写接口-如何保证数据一致性(思路)
概述某些场景下,我们将业务数据落地之前,是需要先调用外部系统的多个写接口,当这些写接口都操作成功了,我们才将业务数据落地到自己本地的数据库里面。比如说:public void updateProductInfo(Product product) { //1、将商品价格更新到价格系统 priceService.updatePrice(product); //...原创 2018-04-28 13:35:52 · 16471 阅读 · 6 评论 -
遇到过的判断营销活动状态的两种方案
利用活动开始时间和结束时间像天猫、京东、唯品会,经常会推出各种各样的营销活动来吸引用户购买,营销活动是有状态的,一般来说,有以下几种状态。 活动未开始,活动已开始、活动已结束、活动已废弃活动未开始、已开始、已结束,这三个状态可以使用活动开始时间和活动结束时间来得出。public int getActivityState(Activity activity,Date cur...原创 2018-05-20 12:17:28 · 2795 阅读 · 0 评论 -
利用DB生成业务主键
概述利用DB生成业务主键,生成业务主键的方法各种各样,其中一种是利用DB表主键自增的方式来生成唯一性的业务主键,下文简单介绍一下。 代码以MySql作为例子,操作DB的数据层是Mybatis。CREATE TABLE `key_gen` ( `business_no` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',原创 2016-10-10 14:04:21 · 1959 阅读 · 0 评论 -
思路:针对某个业务场景,独立增加服务器集群去处理大流量
背景随着用户数越多,系统需要承受的冲击越来越大。举个例子,一般的电商应用都会搞双11这种活动,这个时候用户都会先收藏自己喜欢的商品,以便活动开始的时候,及时的抢购。当用户抢购的时候,系统必须应付瞬时大流量的冲击。处理这种情况,有很多种方案,像限流、增加服务器、多级缓存、应用跨机房部署等等。如果你清楚自己系统在哪种业务场景下会遭受瞬时大流量冲击,那么可以针对这种业务场景,单独...原创 2016-10-17 14:05:02 · 1172 阅读 · 0 评论 -
实时刷新缓存-处理mysql主从延迟的一些设计方案
在项目开发当中,经常有这样一种场景,对数据库进行添加、修改、删除操作的应用直接连接master库,只对数据库进行查询的应用,会先建立一个中央缓存,例如redis或者memcache,如果缓存没有命中,那么直接访问slave库。下文会介绍一下在刷新中央缓存时,如果发生主从延迟,应该如何处理。也即是,当应用System-A 把数据库写入master库的时候,System-B应用在读取slave库的时候...原创 2016-05-23 09:38:53 · 4268 阅读 · 0 评论 -
中央缓存结合本地缓存-本地缓存数据刷新方案
互联网应用通常都需要应付大并发量,为了提高QPS,通常会使用中央缓存(例如memcache)和本地缓存的方式。请求先经过本地缓存,如果不命中,则请求穿透到中央缓存,如果还是不命中,则会直接查询数据库,并把查询到的数据刷新到中央缓存中。如果采用这种方式的话,必须要解决一个问题,如何刷新本地缓存的数据。 每个应用中都提供一个刷新接口之前参与过的一个项目,应用的部署图大概如下: ...原创 2016-07-12 09:19:55 · 7337 阅读 · 0 评论 -
支付系统资料整理
最近在倒腾支付系统的设计,查阅大量的网上资料,有些有用,有些没用,针对对自己有用的文章,我这边做了一些记录,分享一下给大家。原创 2021-03-13 17:14:32 · 738 阅读 · 7 评论