求仁得仁
05.分布式唯一ID 05.分布式唯一ID
全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增、单调递增:保证下一个ID一定大于上一个ID。 信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL 即可;如果是订单号就更
2023-07-09
04.微服务全链路灰度发布 04.微服务全链路灰度发布
灰度发布 Gray Release(又名金丝雀发布 Canary Release)。不停机旧版本,部署新版本,高比例流量(例如:95%)走旧版本,低比例流量(例如:5%)切换到新版本,通过监控观察无问
2023-07-08
03.微服务架构拆分 03.微服务架构拆分
微服务拆分时机 微服务不仅仅是技术的升级,更是开发方式、组织架构、开发观念的转变。 业务规模:业务模式得到市场的验证,需要进一步加快脚步快速占领市场,这时业务的规模变得越来越大,按产品生命周期来划分(导入期、成长期、成熟期、衰退期)这时一
2023-07-08
02.多数据源架构 02.多数据源架构
01. AbstractRoutingDataSource(Spring) @Component @Primary public class DynamicDataSource extends AbstractRoutingDataSou
2023-07-08
01.单体VS微服务 01.单体VS微服务
单体服务的优点 应用的开发很简单,IDE 和其他开发工具只需要构建这一个单独的应用程序 易于对应用程序进行大规模的更改:可以更改代码和数据库模式,然后构建和部署测试相对简单。 开发测试简单:开发者只需要写几个端到端的测试,启动应用程序,调
2023-07-08
Redis-单线程+IO多路复用+SCAN Redis-单线程+IO多路复用+SCAN
单线程 Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的
2023-06-13
SpringBoot-自动配置流程 SpringBoot-自动配置流程
@SpringBootApplication @EnableAutoConfiguration @AutoConfigurationPackage @Import(AutoConfigurationImportSele
2023-06-11
SpringBoot-核心流程模拟实现 SpringBoot-核心流程模拟实现
核心流程 模拟springboot注意事项(启动流程,自动装配,依赖控制): springboot选择一个webserver启动(只能有一个),run启动spring容器,将app作为配置类,随后启动webserver 根据依赖选择哪个b
2023-06-10
DDD-主要概念 DDD-主要概念
软件的核心复杂性 a. 技术主动理解业务(领域驱动) b. “刚刚好”解决问题(兼顾灵活性-分层抽象) 领域设计 a. 构建领域地图(边界) b. 使用四层架构 c. 领域的内敛(业务上的限界,而非技术上的隔离) d. 单体优先 ->
2023-06-09
DDD-通用型领域 DDD-通用型领域
可以构建领域仓库,实现领域复用:也可以用于优化中台战略,并且取缔大中台(中台拆分),因为一个中台组不可能同时满足所有其他项目组的需求 通过消息契约层,不光保证逻辑边界清晰,同时也保证数据边界也很清晰
2023-06-09
DDD-领域划分设计 DDD-领域划分设计
高内聚,低耦合:单一职责原则、依赖反转原则、开放封闭原则 构建领域地图(边界) a. 在DDD中推荐了事件风暴会议这样的具体形式,也强调了统一语言的理论模型。 b. 针对各个核心环节,优先构建单元测试案例,从而形成一些TDD测试驱动设计的
2023-06-09
DDD-MVC与DDD四层架构 DDD-MVC与DDD四层架构
一个需求非常确定的项目,不管多复杂,都没有必要非转型成DDD,短平快的设计方式更为快捷。 如果项目中有很多不确定性,以往的设计模式会遇到非常多的变数,这时DDD就是一个很好的选项了。 DDD 重构 抽象数据持久层 - 建立仓库(让业务逻辑
2023-06-09
DDD-软件的核心复杂性 DDD-软件的核心复杂性
很多软件设计上的不足,表面上看,似乎是技术架构的问题。因为如果架构师经验足够丰富,就能提前考虑到这些问题。如果开发团队技术足够过硬,就可以最快速度解决这些问题。但是,如果你将视野放开,放到到整个项目团队。你就会发现,一味的要求技术人员能够未
2023-06-09
架构-订单系统设计 架构-订单系统设计
幂等 一件事情做几次结果都一样(防止用户提交两次订单) 唯一性索引:生成订单ID的操作提前到核对订单页面并在页面携带此ID,提交订单时直接使用此ID ABA问题(使用版本号): 如用户修改订单详情,物品颜色(更新订单信息的ABA问题):
2023-06-04
SpringCloud-分布式唯一ID-Leaf SpringCloud-分布式唯一ID-Leaf
为什么需要分布式唯一ID而不是UUID:因为数据库存储采用B树(有序),无序数据导致B树不断旋转 所有业务都需要分布式唯一ID吗?订单主表:全局唯一;订单详情表:1. 不需要全局唯一;2. 一次性获取所有ID 方案(推荐 Leaf-Snow
2023-06-03
微服务-拆分 微服务-拆分
拆分时机 业务规模 团队规模 技术储备 人才储备 研发效率 拆分原则 闭包原则(CCP) 服务自治、接口隔离原则 持续演进原则 避免影响产品的日常功能迭代 服务接口的定义要具备可扩展性 避免环形依赖与双向依赖 阶段性合并 自动化驱动
2023-06-01
8 / 12