忘川彼岸|我只是下了个订单,鬼知道我在微服务里经历了什么?
【51CTO.com原创稿件】面试的时候 , 面试官问:用户在电商网站中购买成功了 , 那么它在微服务中经历了什么?你该如何作答?
当我傻啊 , 用户在电商网站购买成功 , 还在微服务中 , 那肯定就是有一套微服务架构的电商系统 。
设计一套电商系统还不简单?简单想象一下 , 既然是一个电商系统 , 有用户去购买 , 就肯定得有一个用户模块 , 购买什么东西总不是西北风吧 , 购买肯定是商品吧 , 省掉购物车 , 就得有商品模块吧 。
商品总得有库存吧 , 库存就暂时跟商品放一起吧 , 什么仓储物流先别管 , 就当作是虚拟商品好了 , 反正题目也没说不能是虚拟商品 。 ^_^
购买成功了 , 那就必须有订单吧 , 加个订单模块 , 下完单总得支付吧 , 不付钱人家凭什么把东西给你 , 那就得有个支付模块 。
简单粗暴 , 四个模块 , 如上图:
- 用户模块
- 商品模块(库存)
- 订单模块
- 支付模块
等等 , 貌似题目说是微服务 , 既然是微服务就涉及到拆分服务的问题 。
DDD 领域驱动设计
刚刚确实是梳理了一下模块 , 既然是微服务 , 就得进行服务的拆分 , 服务怎么进行拆分呢?
貌似按照刚次梳理模块来划分也是可以的 , 不过这样好像显得我很是不专业 , 听说现在很多人都要使用 DDD(领域驱动设计)来指导微服务的拆分 。
参考 DDD 的设计 , DDD 官方的架构草图 , 总体架构分为四层:
- Infrastructure(基础实施层)
- Domain(领域层)
- Application(应用层)
- Interfaces(表示层 , 也叫用户界面层或是接口层)
不过对于领域设计而言 , 代码层其实不是最重要 , 最重要的是如何去划分领域 , 划分好边界 。
而对于微服务而言 , 非常适合从业务上去划分各个 Modules , 划分好各个业务板块 , 微服务 + DDD , 个人觉得首先从微服务的角度考虑去划分大的业务模块 , 每个微服务都应该是一个可以独立部署 , 各司其职的模块 。
简单的说 , 在微服务实际的开发中 , 结合 DDD 的思想去划分所有属于自己的领域 。
实施 DDD 的关键
第一点是使用通过的语言建立所有的聚合 , 实体 , 值对象 。
第二点也就是最关键的“建模”:
划分“战略建模” , 从一种宏观的角度去审核整个项目 , 划分出“界限上下文” , 形成具有上帝视角的“上下文映射图” 。
还有一个建模是“战术建模” , 在我们的“战略建模”划分出来的“界限上下文”中进行“聚合” , “实体” , “值对象” , 并按照模块分组 。
构建电商系统的上下文映射图
- |申花希望租借格德斯遭鲁能拒绝,马丁内斯尚未加盟只是试训
- 忘川彼岸|启迪设计中标微软(中国)苏州科技园区二期办公楼项目设计总包
- UZI|Uzi玩游戏输给邹市明?二人只是小打小闹,真打还得看寒夜毒纪
- 卡玛拉|《复仇者联盟》:不只是游戏,更是一部优秀的电影
- 伽德鲁|《没落要塞》如果一切只是一场游戏,那么活着是否还有意义?末日中的假象看似命运的安排其实是一场游戏活着是否还有意义
- 澎湃新闻|签协议时不知要搬驻以使馆?塞尔维亚总统:只是再检查一遍
- 美国有线电视新闻网|《大西洋月刊》总编辑:有关特朗普骂阵亡美军的报道,只是“冰山一角”
- 环球网|大西洋月刊总编辑:特朗普骂阵亡美军的报道,只是“冰山一角”
- 环球网|《大西洋月刊》总编辑:有关特朗普骂阵亡美军是“失败者”的报道,只是“冰山一角”
- 帅不过三秒|求赵露思别再穿娃娃裙了,裙摆只是加了层褶,腿就显瘦到我崩溃