您现在的位置是:亿华云 > IT科技类资讯
微服务设计的十条参考指南
亿华云2025-10-04 00:56:15【IT科技类资讯】9人已围观
简介微服务,是一种新型的应用架构术语,而最准确的定义来自于两位大神James Lewis和Martin Fowler)。原文翻译后,简单来说就是:将软件应用程序设计为可独立部署运行的一种方式。这些服务主
微服务,微服务设是条参一种新型的应用架构术语,而最准确的微服务设定义来自于两位大神(James Lewis和Martin Fowler)。
原文翻译后,条参简单来说就是微服务设:将软件应用程序设计为可独立部署运行的一种方式。这些服务主要围绕业务能力进行构建,条参可以采用不同的微服务设编程语言和不同的数据存储技术,并且在组织架构上存在一些共同的条参特征。
当下,微服务设越来越多的条参组织在应用架构上逐步从单体架构再向微服务架构进行演进,殊不知,微服务设盲目的条参跟风,只会让软件开发及运维成本日益剧增,微服务设我们应该始终坚持以“拆是条参手段,合是微服务设目的”为原则,从而提升应用交付效能,实现可持续演进的架构体系。
今天就跟大家来讲一讲,我在日常工作中常用的一些微服务设计参考,服务器租用但我想说,它并不是万能的,也不是绝对的,所以不要指望它,能解决你所有的微服务设计问题,而且,有时候还需要考虑一些客观因素的存在,特别是历史遗留系统。
指南一:服务无状态微服务内部应确保为无状态,即:将有状态信息从微服务中进行剥离,从而单纯的成为一个无状态的计算节点,以便可快速实现动态伸缩的横向扩展能力,同时对应用系统不产生额外的成本投入或代码侵入。例如:将会话信息剥离出来,放入分布式缓存中托管。
传统的应用通常会将前端代码与后端代码融合在一起,导致前后端代码强耦合,不便于后续的管理维护,建议进行前后端分离,前端更强调的站群服务器是交互体验和灵活性,而后端更强调的是能力抽象和稳定性,而微服务仅承接后端服务或者接口,不承接前端展现或渲染。
通常设计人员会站在技术视角,采用数据驱动这种自下而上的设计模式,强调的是数据结构,即:优先确定数据结构,然后再根据数据结构的关系进行微服务拆分,但微服务一般适用于解决业务复杂度较高的场景,建议从业务视角,采用领域驱动这种自上而下的设计模式,更强调的是业务能力,即:优先明确业务场景,然后再根据业务场景建立统一语言,并对业务概念进行边界定义。
根据业务场景流程需要识别微服务间的调用关系,并对其进一步进行合理性的验证,在通常情况下我们建议用例跨越的服务越少越好,高防服务器一方面能够降低系统的响应延迟,另一方面能够减少服务之间的依赖程度,若依赖链路过长,那么依赖链条上的任何一个微服务发生变更,其链条后的任何微服务均可能需要改变。
在某些业务场景下,需要两个或多个微服务间针对某个实体信息进行单向或双向同步,即:某个实体由多个微服务来管理,从而降低微服务间的依赖程度,但可能会引发数据一致性的问题,建议相同的实体所跨越的微服务不能太多,实体参与同步的微服务越多,其数据一致性问题就越容易暴露。
微服务的内聚性越高,设计模型的可理解性就越强,根据业务流程和场景识别所有实体后,需对实体间进行关系分析,优先识别出生命周期一致的实体进行归类,然后根据实体与聚合根的区别,明确每个聚合根的边界,微服务的最小单元通常是一个聚合根,可根据技术成本来评估并确定一个微服务中包括几个聚合根,但不建议对一个聚合根进行割裂。
类型
唯一标识
生命周期
是否只读
判断相等
聚合根
全局唯一
独立生命周期
否
标识
实体
聚合内唯一
从属对应的聚合根
否
标识
值对象
无唯一标识
无生命周期
是
属性
微服务的耦合性越低,设计模型就能更快适应系统需求的变化,若微服务间联系越紧密,其独立性就会变得越差,微服务的管控治理也会变得十分困难,例如:某个微服务契约发生变化后,那么依赖的微服务将都会受到影响,因此需要深度分析微服务间的调用关系强弱,并根据依赖的强弱梳理上下游关系,从而将此影响减少到最低。
以业务领域视角对服务进行垂直拆分,在屏蔽任何技术实现细节的情况下,先对业务能力进行服务分类,然后再根据服务间的关联程度将其划分到一个微服务中,其满足每个微服务仅承担一类业务能力,且后续仅因这类业务发生变化而变化,以及这些变化尽可能在一个微服务中闭环完成,不需要影响其他服务,最后再根据拆分后所引入的技术债务进行权衡决定是否合并。
以非功能性视角对微服务进行水平拆分,通常会从服务的隔离性、可靠性、扩展性等几个方面进行综合评估考虑。可根据迭代的变化速率进行拆分,避免敏态服务的改动升级影响稳态服务,根据业务的服务水平进行拆分,在出现故障时优先确保关键核心服务的正常运作,根据服务的性能要求进行拆分,避免因性能隔离性问题导致服务整体瘫痪,最后再根据拆分后所引入的技术债务进行权衡决定是否合并。
自组织能力是实施微服务的关键所在,每一个团队需要对微服务的整个生命周期负责,所有团队成员的工作能够在独立的微服务上下文中,即:微服务应用架构需要尽可能的适配团队间的组织架构,从而能够独立决策独立治理,而团队和团队之间也是以一种松耦合性的方式进行交互连接。
综上所列,是我常用的一些招数,希望它能够对你有所帮助,但请永远记住,「拆」永远不是目的,它是一种手段,通过「拆」,是让微服务间能够更好的协同工作,最终达到「合」的效果。
很赞哦!(8115)
相关文章
- 投资各类域名就像到处打游击战,结果处处失败。因为这样,对任何一个中国域名市场的走势和价格都没有准确的把握,所以最好缩小范围,准确把握战场态势,埋伏。
- 太好用了,这个更人性化的正则库 -- Humre
- Google可视化编程工具Blockly入门
- 求职中最吃香的编程语言:JavaScript、Java 和 Python
- .net 适用于从事Internet相关的网络服务的机构或公司
- VS Code Go 语言扩展将默认启用 gopls
- 任务调试太麻烦?教你一招搞定
- 花了两天,终于把 Python 的 Setup.py 给整明白了
- 在数以亿计的网站中,我们应该抓住每一个可能带来宣传的机会,域名可以带有企业的名字,一般可以使用汉语拼音或者英语单词或者是相关缩写的形式,只要用户记住了你企业的名字,就能很容易的打出你的网站域名,同样的,记住了网站域名也能很快的记住你公司的名字。
- 为什么要读Nodejs源码?
站长推荐
因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
重拾JAVA:这种编程语言为什么不行了?
2021年低代码开发会成为主流软件开发模式吗?
设计模式 | 单例设计模式
互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
写代码的16个好习惯,减少80%的bug
鸿蒙通信开发Wi-Fi IoT套件连PCF8563实现电子钟功能
Python将在2021年死亡吗?