22 Dec 2020
一、What's DDD? 从定义入手: DDD全称Domain-Driven Design,即领域驱动设计,由Eric Evans于2003年提出。那既然是一种设计方法,ddd的作用对象是什么呢?这个问题光从定义是看不出来的,我们再往下看看。 换一个更高的视角: 我们在谈论到架构设计的时候,可以简化为三个层面:系统架构、技术架构和业务架构,这三者从三个不同的视角来描述我们的系统。系统架构关注系统的架构分层,技术架构决定使用的技术栈和框架。而作为一个偏向业务开发的工程师,我们日常施展拳脚的平台离不开业务架构这一层面,它根据业务需求设计相应的业务模块及其关系,决定了业务系统是否有足够的灵活性来面对业务的发展。…
Read More
23 Oct 2020
一、背景 为保障消费者权益,有赞提供基础消费保障服务。买家确认收货后,资金才可结算到卖家店铺余额,普遍的结算周期在7天左右。从商家的角度出发,结算账期的产生使得资金周转变慢,这为扩大生产交易规模制造了困难。于是快速回款产品应运而生,有赞通过引入保理机构,以应收账款保理转让的模式来帮助商家实现资金快速回笼。 二、保理简介 2.1 什么是保理 在开始前我们会问,什么是保理。保理即保付代理,是一项集保理融资、销售分户(分类)账管理、…
Read More
19 Jun 2020
Java多线程开发中,如果涉及到共享资源操作场景,那就必不可少要和Java锁打交道。 Java中的锁机制主要分为Lock和Synchronized,本文主要分析Java锁机制的使用和实现原理,按照Java锁使用、JDK中锁实现、系统层锁实现的顺序来进行分析,话不多说,let's go~ Java锁使用 在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而JavaSE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、…
Read More
11 Mar 2020
一、业务背景 1.1 零售SaaS业务架构概览 上图是有赞零售SaaS业务整体业务架构概览,大体上可以分为前台业务、中台业务、后台业务。 前台业务主要是面向前端消费者,包含全渠道销售、各业务单元的商品、订单、会员、营销、进销存、智能导购等业务。前台业务的特点是变化快、差异性大;细节性体验、综合性体验;跨平台、多触点。 中台业务承担承上启下、数据打通、…
Read More
11 Mar 2020
7月份某个平凡的下午,我们突然收到大量的线上告警:应用A的老年代内存使用率大于95%。登陆到监控管理平台可以看到3点半之后该应用的老年代内存使用率一路飙升,直逼100%,接着年轻代也一路上升。 图1 我们查看了一下进来的请求也很平稳,并没有突然爆发,那这个地方的罪魁祸首会是谁呢?为了方便读者接下来的阅读,在介绍这次故障之前,我们首先介绍一下我司的dubbo服务发现的流程。 dubbo服务发现流程 我们的开发人员在使用远程服务的时候首先需要配置一个dubbo xml文件或者在使用的地方加上@Reference,二者都是用来对dubbo消费者引用服务进行一些配置,然后应用在启动的时候会将配置信息转化为一个ReferenceBean对象,并调用createProxy方法创建一个远程服务接口的代理对象。因为我们的消费者并不是和服务端直接地址相连的,…
Read More