首页 > 其他分享 >微服务设计10个需要考虑的要素

微服务设计10个需要考虑的要素

时间:2024-09-10 21:04:47浏览次数:8  
标签:10 需要 服务 异步 设计 考虑 单一 要素

微服务是开发可扩展云原生系统的强大工具,但为了避免严重的系统灾难,需要认真设计才能成功。微服务并不是解决所有架构问题的普适方案,过度的设计、不当的应用和错误的理解容易导致系统灾难。选择正确的应用方向对于成功开发微服务极其重要,而权衡利弊做出正确的设计决策同样重要。下面详细讨论设计微服务时需要考虑的一系列因素:

一、确定微服务的边界。

微服务设计最常见的一个问题就是服务的大小问题。设计微服务边界,最可行的办法就是通过一系列方案来模拟现有的业务场景,某些特定的业务可能会同时匹配多个要素条件,此时就需要架构师权衡利弊。

1,工具类函数,加密解密引擎或者通知引擎。

2,恰当的子域,比如半数请求是搜索的情况,可以考虑将搜索功能独立出来

3,事务一致性,比如预定酒店需要保持事务一致性,而搜索不需要,就可以考虑将其独立出来

4,团队分工,比如搜索服务需要用到推荐算法机器学习等专家系统,可以由独立的专家团队开发成一个独立的微服务

5,单一责任,理论上单一责任可以用到方法、类或者服务上。但在微服务的上下文中,单一责任不一定需要映射到某个服务上,更可行的办法是将单一责任理解为单一业务功能或者单一技术能力。比如酒店客户信息的读取和写入操作可以使用命令查询职责分离CQRS方式来实现两个微服务

6,创新和速度,满足业务功能和快速交付,如何最快实现并产生价值是微服务最为重要的

7,耦合和内聚,设计微服务时,应尽量避免服务间过多的频繁通信和循环同步依赖

8,把微服务视为产品,综合考量服务的目标群体、部署灵活性和可复用行

二、设计微服务的通信方式

1,同步和异步的方式如何取舍,从原则上看,异步才是最适合开发微服务系统的,但异步机制会让系统设计极其复杂。最好的做法是开始时先用同步请求响应的方式,之后在异步通信有需要时再进行重构,也可以使用响应式编程框架,来必满用户的异步请求系统复杂化

三、服务编排

1,在一个微服务内部组装或调用多个微服务接口的做法是可以考虑的,但要因此新建一个微服务可能会创建很多细粒度、非自治跟业务不对应的组合微服务。可以考虑将上游服务数据向外推送的方式,下游微服务通过监听缓存或者消息中间件来获取需要的数据。

四、每个虚拟机应该运行多少个微服务

1,最好先在一台虚拟机部署关联的多个微服务

五、规则引擎和工作流引擎

1,如果规则或者工作流比较简单,数量也不多,尽量服务内编写规则或工作流,反之应该使用独立的引擎

六、数据库

1,原则上每个微服务应该都使用独立的数据库,某些简单场景就几张表,可以只使用一个数据库。 比如客户主数据和客户详情

七、确定事务边界

1,尽量避免分布式事务

八、服务的版本化

1,对REST服务进行版本化有三种方式:URL包含版本号,Http请求头设置版本号和自定义头部版本号信息

九、跨域设计

1,一种做法是在REST接口添加@CrossOrign ,另外一种做法是用API网关作为客户端唯一信任的域名

十、日志存放

1,由于各个微服务有可能独立部署,其日志文件也分散在各处,最好是将日志汇总到一处进行存储并提供查询分析功能。ELK和Graylog都是可以考虑的解决方案

 

标签:10,需要,服务,异步,设计,考虑,单一,要素
From: https://www.cnblogs.com/chuyuan/p/18407181

相关文章

  • (喜报)于翱睿:下面,我正式宣布,逐梦工作室人数破10 热度破70000 成为猿编程中规模工作室
    截至2024年9月8日,于翱睿所负责的逐梦工作室人数正式破10,热度值破7万,升级成为猿编程中规模工作室,未来可期,再接再厉!我们非常高兴地宣布,经过一段时间的努力和发展,我们的工作室已经成功吸引了10名新成员加入,这一里程碑式的成就标志着我们的团队不断壮大,为未来的项目和发展奠定了坚......
  • jsp超市管理系统设计与实现5ojjs本系统(程序+源码+数据库+调试部署+开发环境)带论文文档
    jsp超市管理系统设计与实现5ojjs本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能会员,商品分类,员工信息,热卖商品,订单信息,商品采购开题报告内容JSP超市管理系统设计与实现(5OJJS)开题内容报告一......
  • jsp超市管理系统的设计与实现103v4 本系统(程序+源码+数据库+调试部署+开发环境)
    jsp超市管理系统的设计与实现10本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能超市公告,商品分类,用户,商品信息,商品入库,用户订单,商品出库,商品盘点技术要求:   开发语言:JSP前端使用:HTML......
  • jsp超市管理系统的设计s6kuk
    jsp超市管理系统的设计s6kuk本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能员工,商品信息,商品分类,仓库信息,供应商,进货信息,退货信息,销售信息,进货结算,退货结算,销售结算技术要求:   开......
  • 2024.9.10
    DATE#:202409010ITEM#:DOCWEEK#:TUESDAYDAIL#:捌月初捌TAGS<BGM="和光-闫东炜"><theme=oi-contest><[NULL]><[空]><[空]>```“不白”“不净”“不能”“不悟”```A.SpireRound#1红裤衩时间限制:1s 内存限制:512MB 测评类......
  • 2024.9.10 搜索引擎+字体
    今天是人工智能的第一节课!我们主要学了引擎的搜索以及字体两部分,干货满满!有一种走了20年弯路的感觉(⊙︿⊙)第一次拥有了博客账号,在我小学的时候我妈妈会用博客记录生活,对于博客有一种熟悉的陌生感hhha【知识小课堂1】搜索引擎分为两类:一、目录式分类搜索引擎,其特点是检索的准确......
  • Springboot车辆充电桩管理系统的设计与实现mv56d
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景与意义随着新能源汽车的普及,车辆充电桩的数量急剧增加,如何高效、智能地管理这些充电桩成为亟待解决的问题。一个完善的车辆充电桩管理......
  • P1110
    delicious#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f3f3f3f;multiset<int>delta,full;intst[500100],ed[500100];intsrt=inf;intn,m;voidupdate_srt(intx){ multiset<int>::iteratorit=full.lower_bound(x); intnw=*it......
  • 1001 害死人不偿命的(3n+1)猜想
    卡拉兹(Callatz)猜想:对任何一个正整数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结......
  • 房屋租赁|基于springboot的房屋租赁管理系统设计与实现(附项目源码+论文+数据库)
    私信或留言即免费送开题报告和任务书(可指定任意题目)目录一、摘要二、相关技术三、系统设计四、数据库设计   五、核心代码    六、论文参考 七、源码获取一、摘要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息......