事件驱动+推拉结合:智慧社区服务解耦新玩法

开发 前端
在实现了基础微服务的通信与解耦后,智慧社区可以引入增值服务,通过服务的关联进一步丰富社区应用场景。例如,智能充电、云广播、出入提醒等服务可以依据不同的用户需求,自动化推送与定向推荐。

Hi,大家好!今天我们要聊聊“关联微服务”的设计,这是在智能社区项目中常见的一个大方向。如何利用微服务让各个业务模块灵活互联、互通,帮助物业实现信息整合、数据清洗,同时能够提供丰富的增值服务。我们将主要围绕四大模块来展开:

  • 智慧通行:打破物业多品牌系统的信息孤岛;
  • 安全社区:集成视频识别、传感监控,形成预警体系;
  • 全屋智能:为业主提供更智能、便捷的生活体验;
  • 增值服务:提供多种智能服务及定向增值服务。

限界上下文下的微服务拆分

微服务拆分的核心,是根据限界上下文将领域模型划分成多个子域。这个过程确保每个子域独立、清晰,服务职责明确,为后续的业务独立拓展提供基础。

1.1 限界上下文划分

在智慧社区的项目场景中,限界上下文非常重要,它明确了微服务的边界、职责,并确保各个模块能够有独立的生命周期和自治管理。以下我们结合各个服务模块,分析如何进行限界上下文的划分:

  • 通讯录、短信、推送通知、支付、文件服务:这些是核心的基础服务模块。由于各个业务系统都需要这些基础服务,我们可以将其拆分为独立的子域模块供其他微服务调用。这样的设计让通讯、支付等不依赖某个业务,变得非常通用。
  • 人脸门禁、可视对讲、电梯梯控、停车系统、访客预约:这些属于智慧通行子域,是对社区智慧管理的支撑系统。将这一子域独立,能够让“通行”部分更加集中在智慧管理功能上,而不掺杂其他功能。
  • 视频监控、周界报警、高空抛物、跨域追踪:这类服务属于安全社区子域。安全社区的所有服务以保障安全为主,聚焦视频图像识别、传感器数据的采集处理等安全相关功能,并提供报警预警。
  • 超级面板、无线门锁、烟感雾感:这是全屋智能子域,主要针对业主的家庭智能化需求。这里的服务应该集中在家居控制、环境监测等,以满足全屋智能设备对接的需要。
  • 智能充电、云广播、出入提醒、定向投放:这一部分属于增值服务子域。增值服务可以通过matrix引擎实现智能场景裂变,支持多品牌产品融合,为业主提供个性化的增值体验。

1.2 微服务的组织形式

限界上下文的划分后,每个模块的服务依赖关系变得清晰。这种拆分带来的核心好处就是解耦合、聚焦服务的“单一职责”,使各个模块可以独立维护、扩展。比如支付服务可以完全独立实现支付功能,不会因升级影响其他模块。各个微服务之间的依赖性降低,适合高并发、高扩展需求的场景。

充血模型与贫血模型的微服务设计

在限界上下文划分清晰后,接下来我们要考虑的是如何设计微服务内部的业务逻辑层次。微服务中,业务模型一般分为充血模型与贫血模型。简单来说,充血模型更适合需要领域强逻辑、复杂的业务场景,而贫血模型更注重数据传递的简洁性。

2.1 贫血模型应用

贫血模型的设计思路是将数据和业务逻辑分开。对于数据结构简单、业务逻辑轻量的微服务,比如通讯录、短信、文件服务等,这种模型尤其适用。

在贫血模型下,服务中的Entity只负责数据存储,不承担复杂的业务逻辑。Service层承担业务逻辑,负责调用底层的数据操作。因此,贫血模型的微服务结构会非常简洁,方便与其他服务的接口交互。

2.2 充血模型应用

充血模型则适合复杂的业务服务,例如智慧通行和安全社区的某些业务模块。这些模块往往包含复杂的业务逻辑和状态维护。在充血模型中,Entity不仅包含数据,还封装业务逻辑,使得领域模型更加贴合业务逻辑。

以智慧通行模块中的人脸门禁服务为例,系统不仅需要处理基本的用户验证,还需要考虑用户权限、时间段限制等。因此,这样的业务逻辑就可以直接封装在Entity中,实现权限和状态的闭环控制。

充血模型能在微服务的业务逻辑层体现更丰富的业务语义,减少Service层的业务逻辑复杂度,提高代码的可读性。

通过领域事件通知机制实现服务解耦

为了让微服务系统能高效工作,还需要让各个服务间的通信保持松耦合。我们可以利用领域事件通知机制,实现微服务间的事件推送和数据同步。领域事件是解耦微服务之间逻辑的重要手段,它能够将业务变化以事件形式广播给其他服务,极大地降低了模块间的耦合度。

3.1 事件推送

在推送事件的场景下,每个微服务只负责发布自己的事件,不需要关心哪些服务会消费这些事件。例如,当安全社区子域中的“周界报警”触发警报时,它可以通过领域事件通知视频监控、跨域追踪等服务,立即同步启动相关联动机制。

领域事件的核心是每个微服务发布的事件能够自动化通知到需要接收的其他微服务。这样,推送通知服务只需监听事件,并将通知发送给指定用户,无需与其他微服务的代码紧密耦合。

3.2 数据同步的拉取机制

在有些场景下,事件推送可能无法满足数据实时一致性的需求。这时可以采用拉取机制,即各服务通过定时任务,主动从相关服务中拉取数据。这种方法适用于对数据实时性要求相对宽松的场景,比如全屋智能模块可以定期从增值服务模块拉取最新的用户场景偏好数据。

例如,全屋智能中的“超级面板”需要实时掌握用户的智能控制需求和定制场景,来更新面板的推荐项。这样即便事件推送发生延迟,面板也能保证在下一个时间周期内更新到最新状态。

智慧社区的增值服务:跨品牌服务互联

在实现了基础微服务的通信与解耦后,智慧社区可以引入增值服务,通过服务的关联进一步丰富社区应用场景。例如,智能充电、云广播、出入提醒等服务可以依据不同的用户需求,自动化推送与定向推荐。

增值服务的核心是“个性化”,我们可以基于matrix引擎进行用户画像和场景化管理,为不同用户推送特定内容。比如,定向投放功能可以针对住户的历史操作习惯,投放他们可能感兴趣的活动或社区团购服务。

关联微服务的设计,通过限界上下文的明确划分和业务模型的设计,使得微服务模块的职责清晰、独立。在此基础上,通过事件通知机制将服务解耦合,并通过推拉结合的方式保持数据同步,实现各个子域模块之间的高效、松耦合协作。

责任编辑:武晓燕 来源: 软件求生
相关推荐

2024-03-08 16:27:22

领域事件DDD项目跨层解耦

2017-12-18 10:53:20

大数据云平台社区服务

2009-02-16 15:36:41

SNS

2022-09-02 08:23:12

软件开发解耦架构

2009-10-22 18:42:48

2016-11-30 15:30:42

架构工具和方案

2013-09-16 10:19:08

htmlcssJavaScript

2023-09-26 01:18:55

解密系统业务

2023-07-12 08:30:52

服务架构事件驱动架构

2017-07-06 12:52:12

智慧社区APP智慧城市

2021-03-10 05:50:06

IOCReact解耦组件

2020-11-20 15:22:32

架构运维技术

2020-10-23 14:18:00

智慧社区互联网科技

2016-04-25 14:12:46

Top Show虚拟现

2015-07-31 15:29:21

智慧社区昆明广福城华为

2018-04-18 08:47:17

Alluxio构建存储

2022-04-15 11:46:09

轻量系统解耦鸿蒙操作系统

2015-08-25 10:56:21

大数据
点赞
收藏

51CTO技术栈公众号