Ryo's blog

标签 · Eng-Practices

首页

关于

归档

Eng-Practices

飞书 Multi-Geo 的落地和思考

一、背景 飞书需要支持 Multi-Geo 功能。 什么是Multi-Geo?简单的说就是:“将一个租户下不同用户/设备/组织等数据,分散存储在不同的地理位置的能力”,在同一个租下管理员可以配置任意用户的数据驻留地(Preferred Data Location简称PDL)。 该功能主要是解决跨国企业,数据合规存放的问题。支持同一个企业下,不用国家的用户,数据存放在不同的国家的机房。 Multi-Geo的功能涉及到几点核心能力。 数据的路由能力。比如,我们服务在CN收到一个User数据查询需求,首先我们要知道这个User是归属于CN还是i18n(国外)的Unit,然后再把请求转发给相应的Unit的服务。 数据的定位能力,管理员更新用户的PDL时候,我们需要把用户所有的数据(存量和增量)找出来,然后发..

更多
Eng-Practices

DDD在Message服务的实践

一、背景 我们message服务经过4年的迭代,项目的可维护性、代码的可读性、功能的可扩展性越来越差,经常改一个小功能牵一发而动全身,新来的同学对message服务不能快速上手,而且因为代码可读性不高,导致新同学修代码经常会出现bug。还有一部分原因是大多数人都是第一次用Golang,对项目的分层也没有一个统一的规范,导致最后成了一个四不像的框架。 然后我们今年的两个主要目标,一是项目的稳定性、二是为了支持KA私有划部署战略,我们需要合并微服务数量,降低运维和部署成本。 基于上背景,老板让我牵头对Message服务基于DDD做一次大规模重构,重构目标很明确: 对项目有个明确的分层,提高项目代码可读性、可维护性、可扩展性。降低新人上手成本。 升级RPC框架,合并Message相关服务,提高优化项目资源利用..

更多
Eng-Practices

DDD-领域驱动设计

一、DDD的基础概念 1.1 什么是 DDD 2004 年埃里克·埃文斯(Eric Evans)发表了《领域驱动设计》(Domain-Driven Design –Tackling Complexity in the Heart of Software)这本书,从此领域驱动设计(Domain Driven Design,简称 DDD)诞生。DDD 核心思想是通过领域驱动设计方法定义领域模型,从而确定业务和应用边界,保证业务模型与代码模型的一致性。 领域驱动设计,主要是用来指导如何解耦业务系统,划分业务模块,定义业务领域模型及其交互。领域驱动设计这个概念并不新颖,早在 2004 年就被提出了,到现在已经有十几年的历史了。不过,它被大众熟知,还是基于另一个概念的兴起,那就是微服务。 不过,我个人觉得,领域..

更多