电商资讯 2021-08-12 12:36:33
在Java生鲜电商平台中,微服务系统的分层设计和领域划分应该是怎样的?
看标题,感觉这个东西很理论化。与“高并发、多线程”、“分布式CAP、一致性、Paxos”、“高可用性SLA”等具体干货技术点相比,软件系统知识非常“湿”。似乎每个人都有自己的理解,但很少有人能说它是完整的。有一点是肯定的,如果未来需要独立设计一个复杂的系统,让它成为未来,在合理定义边界之后,即使一个微服务不好,投入和产出都可以用很少的人力投入来重构。相反,一招触发全身,业务需求来得频繁,很容易失败或达不到预期效果。
事实上,很多技术专家在某个技术点上是很擅长的,但他们很可能对整体软件系统考虑不多。每个人都有自己的设计方法。大多数易于思考的设计方法足以处理普通系统。待会再解决问题。当我们面对各种需求变化陷入发展困境时,我们应该思考一下。我们系统的系统设计有问题吗?本文不打算讨论领域建模和设计模式等代码级细节,而是讨论如何对复杂的大系统进行分层和拆分,这是设计一个漂亮系统的第一步。相信对于BU同仁快速搭建系统的中间平台也有很大的参考意义。
你可能在本文中遇到过一些例子。如果在开发中遇到困难,可以来圈子里交流发布问题,一起学习,一起进步。如果知道内容的背景,可以直接跳到第3部分。如果你想知道如何为一个大项目安排科学人员,你可以直接看第5.4节。如果您的团队中有人使用数据库模型作为接口契约,您可以建议他们阅读第5.1节。如果你在开发过程中遇到了一些别人的开发设计习惯,你觉得不是很好,但是你又不知道怎么说服他,可以去评论区一起聊聊,讨论一下。
1.摘要
本文描述了将分层设计和DDD域设计思想应用于微服务架构的方案实践,这也是个人的最佳实践。
对于大多数互联网公司,我们提倡他们的Web服务架构可以分为五层:基础设施层、域服务层、应用服务层、网关层和用户界面层(表示层)。域服务层和应用服务层都可以通过微服务设计进行拆分,其中域服务层将按照DDD域设计进行域划分,设计为域模块微服务。每个微服务都是高度内聚的,只关注自己的业务,域服务通过接口调用松散耦合。这种设计方案可以大大简化大型系统,其优势将在后期维护中日益凸显。然而,将大系统划分为微服务也对架构师和开发人员提出了更高的要求。
第二部分介绍了相关背景,第三部分讨论了分层设计和各层的功能,第四部分用微服务和DDD对域服务层的服务模块进行了划分和设计。第五部分梳理了分层设计和DDD域设计中常见的问题。
2.背景介绍
我想写这样一篇文章已经很久了。虽然我的专业是软件工程,但是由于能力有限,从2008年写代码开始就断断续续的思考。项目模块设计和分层结构设计,从来没有找到一个能让我感到满足,没有纠结的答案。假设一定的设计,我很快就会在实践中发现一些问题。直到2014年毕业工作了解到DDD领域驱动设计,才有了一个相对明确的方向。
其实早在2004年,Eric Envas的《领域驱动设计:软件核心复杂性应对之道》就已经出版了。毕竟,自从计算机普及以来,软件开发已经存在了很长时间。早期的国外程序员也在努力研究软件开发理论。现在,当他们成熟时,他们做的研究相对较少。
DDD领域驱动设计对软件设计的各个方面都有很高的要求。用《领域驱动设计》的话说,它需要一个“领域驱动的团队”[1],这就要求从分析阶段开始,产品经理、项目经理、架构师和开发工程师使用统一的模型语言进行沟通,他们都知道一些代码、产品和建模的相关知识。事实上,这在中国很难实施。国内的产品经理大概等于需求整理员,对其计算机基础要求很少。在我的公司,有过产品经理直接指导开发的案例,以至于双方理解的同一个词有不同的含义。
因此,本文并不打算解释DDD域的代码级建模实践,甚至本文也不认为贫血模型不好。本文主要讨论域之间的划分和分层设计,正如在引言中提到的,这是设计一个漂亮的系统的第一步。此外,实际上,合理设计的微服务系统中的服务都是功能单一、边界清晰的小应用,那么贫血和DDD域建模就可以胜任。
近年来,随着分布式的发展,传统的面向中小型计算机的集中式服务器不再流行,因此微服务系统成为各大互联网公司的主流选择。直觉上,微服务和DDD似乎是一个微系统的设计方法,另一个是一个大系统。看起来它们自然是互斥的,微服务小系统不需要DDD。事实上,DDD是整个复杂软件解决方案的科学设计方法。微服务还将复杂的大系统拆分成小系统,便于维护和管理,所以两者都有一个
随商信息技术(上海)有限公司 b2b2c多用户商城系统是基于PHP技术的企业级电子商务平台系统,系统支持平台自营、招商加盟和多商家入驻、集成微信商城、移动端APP商城、微信小程序于一体。公司主营业务包含商城系统定制开发、新零售系统解决方案、电商平台系统定制开发、商城网站建设服务等等,随商为大、中、小企业提供一个安全、高效、强大的电子商务解决方案,协助企业快速构建、部署和管理其电子商务平台,拓展企业销售渠道,致力于推动PHP技术和电子商务行业的发展而不断努力。