教育大营销平台开发日志day1
1.DDD架构的思考
战略(如何划分边界,确定成领域)
战术(如何在领域内建模)
战役(如何用具体的代码实现具体的建模)
以下是具体的流程结果
签到、查询返利、参与抽奖,到系统校验、生成抽奖记录、扣减积分或余额,再到抽奖结果的生成和奖品的发放
关于软件架构
- 洋葱架构(Onion Architecture)
比喻:想象一下洋葱,它有很多层,从外到内逐渐接近核心。
解释:
核心层:最里面的部分,包含业务逻辑和规则。这是系统最核心的部分,不依赖于任何外部技术或框架。
领域层:包含业务逻辑和领域模型,负责处理业务规则。
应用层:处理应用程序的逻辑,比如用户请求的处理。
基础设施层:包含与外部系统交互的部分,比如数据库、消息队列等。
表现层:用户界面,用户通过这一层与系统交互。
特点:每一层都依赖于它下面的层,而下面的层不依赖于上面的层。这样可以确保核心业务逻辑的稳定性和灵活性。 - 整洁架构(Clean Architecture)
比喻:想象一个房子,房子的主体结构(核心)是独立的,而周围的墙壁、窗户和门(外围)可以随意更换。
解释:
实体:包含业务逻辑和规则,是系统的核心部分。
用例:处理应用程序的逻辑,比如用户请求的处理。
接口适配器:负责将用例与外部系统(如数据库、用户界面)连接起来。
框架和驱动:包含具体的技术实现,比如数据库访问、用户界面框架等。
特点:核心业务逻辑不依赖于任何外部技术或框架,这样可以确保系统的灵活性和可维护性。 - 菱形架构(Hexagonal Architecture)
比喻:想象一个六边形,六边形的中心是业务逻辑,而六个边是与外部世界的交互点。
解释:
核心层:包含业务逻辑和规则,是系统的核心部分。
应用层:处理应用程序的逻辑,比如用户请求的处理。
领域层:包含业务逻辑和领域模型,负责处理业务规则。
适配器层:负责将应用程序与外部系统(如数据库、用户界面)连接起来。
特点:系统与外部世界的交互通过适配器层进行,这样可以确保核心业务逻辑的稳定性和灵活性。
总结
这些架构的核心思想都是将业务逻辑与技术实现分离,确保系统的灵活性和可维护性。
洋葱架构:每一层都依赖于它下面的层,而下面的层不依赖于上面的层。
整洁架构:核心业务逻辑不依赖于任何外部技术或框架。
菱形架构:系统与外部世界的交互通过适配器层进行。
关于教育大营销平台的粗略规划:
将自制的网关,tj教育平台,lottery抽奖进行有效的合并。
领域的划分:
用户(Actor):这是参与抽奖的人。
HTTP:用户通过互联网(HTTP)来参与抽奖。
活动领域:这是管理抽奖活动的模块,用户通过这里参与抽奖。
活动库存:这里记录了抽奖活动的奖品数量。
用户参与领域:记录用户参与抽奖的信息。
抽奖策略领域:决定抽奖的规则和策略。
子领域规则:具体的抽奖规则,比如中奖概率等。
账户领域:管理用户的账户信息,比如抽奖后的扣减。
奖品领域:管理奖品的信息。
活动账户:记录活动相关的账户信息。
MQ(消息队列):用于处理抽奖后增加用户账户额度的操作。
JOB(任务):用于异步补偿,确保奖品发放的准确性。
整个流程是这样的:
用户通过互联网参与抽奖。
系统检查活动库存和用户参与信息。
根据抽奖策略和规则决定是否中奖。
如果中奖,系统会扣减用户的账户额度,并增加奖品账户的额度。
通过消息队列和任务系统确保所有操作的准确性和及时性
具体的xxl-job中间件能实现的问题是异步补偿:
关于xxljob的具体作用,XXL-JOB是一个轻量级分布式任务调度平台,它通过使用Java的线程池技术来实现异步调用机制。在任务调度过程中,XXL-JOB会创建一个线程池来执行异步任务。当任务触发时,XXL-JOB会将任务提交到线程池中执行,从而实现异步调用。这种设计使得任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰,理论上支持任意时长任务的运行。XXL-JOB的异步调用与回调机制的实现原理相对简单,主要依赖于Java的线程池技术和回调接口
流程的思考:
对上面这个流程图的思考与理解:
用户开始领取活动:
用户通过某个活动入口开始参与抽奖。
活动领域:
首先检查用户是否已经有领取记录,如果没有,继续下一步。
检查活动的状态、有效期和库存是否充足。
如果以上条件都满足,系统会写入领取记录。
执行抽奖:
系统会调用抽奖策略模块来执行抽奖。
抽奖策略:
从黑名单中排除某些奖品。
生成一个随机的“运气值”。
查询用户的账户额度,确保用户有资格参与抽奖。
根据抽奖规则(rule_weight)过滤出可用的奖品列表。
执行抽奖策略,计算可用的奖品模型(rule_lock)。
策略规则:
在抽奖前,先进行规则过滤,确保符合抽奖条件。
计算抽奖策略,判断用户是否有资格获得奖品。
判断抽奖库存是否充足。
如果库存充足,进行奖品发放。
奖品发放:
根据奖品类型进行发放:
如果是“兜底奖品”(rule.luck_award),直接发放。
如果是正常奖品,扣减库存。
随机积分(rule_random)。
异步发奖:
系统会异步地将奖品发放给用户。
账户额度:
在整个过程中,系统会查询用户的账户额度,确保用户有足够的余额参与抽奖。
总结:
用户开始参与活动,系统检查用户资格和活动状态。
系统执行抽奖策略,根据规则和库存情况决定是否发放奖品。
如果用户中奖,系统会扣减库存并发放奖品。
整个过程是异步的,确保奖品能够准确无误地发放给用户。
这个流程图展示了一个完整的抽奖系统的工作流程,从用户参与活动到奖品发放的每一个步骤。
软件架构图: