微服务中的模式和反模式

24、软件开发中的反模式与移动应用架构解析 本文探讨了软件开发中的常见反模式及其解决方案,并深入解析了移动应用架构的设计与实现。通过案例研究,分析了动态配置需求和数据显示问题的解决策略,同时对比了MVC、MVP、MVVM和VIPER等主流架构模式的优缺点及适用场景。最后,文章展望了移动应用架构的未来发展趋势,包括微服务架构、无服务器架构和人工智能技术的集成。 阅读详情

微服务中的常见设计模式

软件开发者对“四人帮”的《设计模式》一书应该都很熟悉,微服务中也会有一些常见的模式:

部署模式

如何部署服务是微服务中的一个重要问题,微服务的部署方式非常灵活,有以下的不同选项可供选择 (参考 http://www.open-open.com/lib/view/open1462434484246.html)

  • 多服务共享主机/虚机
  • 单服务部署单一主机/虚机
  • 单服务部署单一容器(Docker)
  • 无服务部署(serverless),例如AWS Lambda
  • 使用服务部署平台 (Kubernetes,Docker Swarm,Mesos, AWS ECS)

不同的部署方式各有优缺点,重点推荐使用容器编排系统的服务部署平台,能够提供各种灵活的部署方案。

横向关注点

微服务的开发过程中常常会花很多时间来处理一些各个服务都会遇到的问题,例如

  • 如何管理配置信息,例如用户名和口令,服务器的网络地址,等等
  • 日志管理
  • 健康检查
  • 业务度量数据(Metrics)的收集和分析
  • 分布服务的追踪

这里推荐使用一个稳定的微服务框架来处理这些问题,例如基于Java的spring boot,基于Golang的Micro等

API网关 

API网关类似服务代理,所有的客户端都通过API网关提供的统一服务API来消费服务内容。

下面是几个开源的API Gateway

服务发现

服务发现是指API网关或者客户端如何获得微服务的地址,主要有以下几种发现方式:

  • 客户端发现
  • 服务器端发现

    这种方案中的Router可以并入API网关,客户端直接和网关通信。

两种方案需要用到服务注册,,区别在于是否把服务注册直接暴露给客户端使用。常见的提供服务发现的注册开源解决方案有:

断路器

当微服务系统中的某个服务出现问题的时候,或者网络出现时延的时候,调用客户端会被阻塞,导致大量的调用占用大量的资源。这时候需要引入类似断路器效果的代理,当出现不健康的服务的时候,断路器会返回出错,阻止更多的客户端掉用,直至服务的健康状态恢复。

netflix的hystrix提供了类似的服务 https://github.com/Netflix/Hystrix

数据管理

在设计微服务的时候要考虑是否每一个服务拥有自己的数据库或者是共享数据库

  • 每个服务拥有自己的数据库
  • 共享数据库

这两种方式各有优缺点:

  • 独立数据库使得各个服务完全解耦合,并且可以根据需要选用不同种类的数据库,但是没有办法或者很难在服务之间共享数据
  • 共享数据库能简化维护和技术栈,但是数据库成为所有服务的依赖,系统更多的耦合,带来了不灵活,没有办法根据业务需要选择不同的数据库种类。

微服务中的反模式

相对于《设计模式》,《反模式》一书可能知道的相对少一点,其实同样的道理,反模式归纳总结了一些常见的容易犯的设计问题,那么,微服务中有哪些反模式呢?

聚合混乱
软件设计的一个主要思想“高内聚,低耦合”同样适用于微服务,随着系统的发展,应该避免某一个服务变的一场庞大,或者服务之间不必要的过多依赖。

不认真对待自动化
持续集成和交付和微服务相辅相成,自动化的测试,集成,交付和部署是微服务成败的关键。一个自动化成都不高的微服务是很难成功的。

层级的软件架构
在设计微服务的时候,应该尽可能避免分层的架构,服务之间更多应该是流式调用。例如为所有的服务提供一个数据接入层的数据服务,似乎不是一个好的选择,因为这样的化就使得所有的服务依赖该数据服务。微服务更多应该基于业务来设计,每个服务应该自包含。

以下的架构虽然是一种层级架构,但也是可以采用的,条件是不同的服务不应该共享数据。

依赖客户签核
当服务有不同的客户渠道来消费的时候,不应该依赖客户的签核,自动化的测试应该覆盖所有的使用场景。

手工化的配置管理
应该尽量避免手工化地配置管理,实现自动化

避免版本管理
在微服务中,如果你的系统只有一个版本,那么这肯定是有问题的。前向兼容是一个需要支持的目标,也就是说不同的客户端版本不应该收到服务升级的影响。这也就意味这API一旦发布,就不应该有不兼容的修改。

为每一个服务创建网关
这个就不用多说了,看着就很傻



参考

  • http://microservices.io/patterns/microservices.html
  • https://www.infoq.com/articles/seven-uservices-antipatterns
人大金仓的‘影子表’sys_user:搞懂Schema优先级,告别字段不存在的报错 本文深入解析人大金仓数据库中‘影子表’sys_user的Schema优先级问题,帮助开发者解决字段不存在的报错。通过分析Schema搜索路径机制,提供四种解决方案,包括连接时指定Schema、动态调整搜索路径、永久修改用户设置和使用完全限定表名,确保查询准确无误。 阅读详情

相关推荐

SwissADME:一款在线预测小分子药动学性质的工具

是一个免费的在线工具,由瑞士生物信息学研究所(SIB)开发,用于预测和分析小分子的药物相似性、理化性质、药代动力学特性以及合成可行性等。它是药物设计和开发中常用的工具之一,帮助研究人员快速评估化合物的成药潜力。

药研猿的博客 5023

微服务体系中的分层设计和领域划分!

这里的反模式是指《领域驱动设计:软件核心复杂性应对之道》这本书里提到的与DDD相违背的模式,也是Eric极其反对的一种模式,即SmartUI模式(注意反模式不等于SmartUI,只是在本书中作为一个反模式的例子而已),这是一种什么样的模式呢,其实我很早之前做C++ Builder(和Delphi很像)的时候还不知道,C++ Builder就是一种SmartUI模式。但其实SmartUI并没有错,对于小规模的PC本地应用开发来说也是有很多好处的。

2401_83916326的博客 1513

WGCNA加权基因共表达网络分析(1)简介、原理

WGCNA简介 WGCNA(Weighted Gene Co-Expression Network Analysis, 加权基因共表达网络分析),鉴定表达模式相似的基因集合(module),解析基因集合与样品表型之间的联系,绘制基因集合之间的调控网络并鉴定关键调控基因 WGCNA适用于复杂的转录组数据(样本数目较多) 研究不同器官/组织类型和不同阶段的发育调控、生物和非生物胁迫的不同时间响应机制 WGCNA原理 原理概要 1.构建基因共表达网络:先构建基因共表达网络,通常利用两两基因之间的表达模式来计算

qq_44520665的博客 3万+

mysql 说说反模式设计_sql反模式(二) — 单纯的树

场景:有这么个需求:设计开发一个评论系统,要求用户可以评论文章以及相互回复,无层级数限制。这个需求开发人员基本都遇到过,可以先回忆或考虑这个数据表如何设计!定义:存在递归关系的数据很常见,数据常会像树或者以层级方式组织。在树形结构中,实例被称为节点(node),每个节点有多个子节点和一个父节点,最上面的节点叫根(root)节点,它没有父节点,最底层的没有子节点的节点叫叶(leaf), 中间的节点简...

weixin_35988311的博客 288

Fluent后台计算中Journal文件的自动化编写与优化实践

本文深入探讨了Fluent在Linux/Unix环境下进行后台计算时,Journal文件的自动化编写与优化实践。Journal文件作为Fluent后台计算的“灵魂”,是实现仿真流程自动化、保证计算可重复性与准确性的关键。文章从基础脚本骨架搭建、命令简写技巧,到进阶的参数化研究与批量计算实现,提供了详实的实战指南,帮助工程师大幅提升仿真效率。

postgres8guard的博客 758

Windows: 深入剖析pip install SSLError与SSL模块缺失的根源及系统级修复

本文深入分析Windows系统下pip install SSLError与SSL模块缺失的根本原因,提供系统级修复方案。从Python安装包缺失SSL支持、OpenSSL库冲突到环境变量配置问题,详细讲解四大成因及对应的解决方案,包括重新安装Python、手动修复OpenSSL依赖等实用技巧,帮助开发者彻底解决HTTPS连接问题。

weixin_28595749的博客 459

【架构与设计】常见微服务分层架构的区别和落地实践

软件工程的方方面面都遵循一个最基本的道理:没有银弹,架构分层模型更是如此,每一种都有各自优缺点,所以请根据不同的业务场景,并遵循简单、可演进这两个重要的架构原则选择合适的架构分层模型即可。

京东科技开发者 839

Windows Server+SqlServer Always On实战:5步搞定高可用集群搭建

本文详细介绍了在Windows Server环境中,通过5个关键步骤搭建SQL Server Always On高可用集群的实战指南。内容涵盖从底层故障转移集群配置、SQL Server实例启用Always On功能,到创建可用性组和侦听器的完整流程,并提供了核心运维与故障排查思路,帮助企业构建稳定可靠的数据库高可用架构。

milk5的博客 860

微服务项目分层

一,起因 铁打的营盘流水的兵,在后人接手前人留下的项目时,经常咆哮一番,其中一个重要问题就是项目分层架构不清晰,分工不明确,可读性很差,没有办法维护和升级。经常出现推翻了重做,要不就忍着哪里出BUG补哪里。 二,经典分层 controller层为控制层,用来接受用户的请求。不会涉及太多的业务处理操作,一般交给service层来处理。 service层主要用来处理一些业务逻辑,不做...

夏壹分享 2357

Altium Designer学习---如何进行SI仿真

Altium designer 如何进行SI仿真。         1、仿真电路中需要至少一块集成电路;             2、器件的IBIS模型;              3、在规则中必须设定电源网络和地网络;              4、建立SI规则约束;              5、层堆栈必须设置正确,电源平面必须连续;     建立的文件必须是一个工程,并把相应的文件放在工程目...

weixin_34050519的博客 4905

飞腾Ubantu22.04.3安装OpenNebula测试

因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包,借此用源码编译进行测试。

坚持就是胜利的博客 1012

微服务架构分层和前后端分离

本文依旧主要参考沈剑大佬的微服务设计相关的五篇博文及其精彩评论,文末是完整参考。 程序就是:数据的传输、数据的转换、数据的存储。 1、分层架构 1.1 典型的互联网分层架构 客户端层 web 站点层 业务服务层:整个多个相关单一服务的数据,对外提供通用功能,减少重复代码 数据库访问层:对外提供某个系统的数据访问服务、 数据存储层:db/缓存 1.2 分层架构的本质 互联网分层架构的本质,...

Lucky小黄人的博客 1710

麒麟v10系统安装

麒麟v10系统安装

喜文BLOG 1万+

告别烂代码,一文理解微服务中的模式和反模式

软件开发者对“四人帮”的《设计模式》一书应该都很熟悉,微服务中也会有一些常见的模式:部署模式如何部署服务是微服务中的一个重要问题,微服务的部署方式非常灵活,有以下的不同选项可供选择 (参考open-open.com/lib/view/)多服务共享主机/虚机单服务部署单一主机/虚机单服务部署单一容器(Docker)无服务部署(serverless),例如AWS Lambda使用服务部署平台 (Ku...

weixin_45583158的博客 242

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

微服务的优缺点_微服务中的模式和反模式

微服务中的常见设计模式软件开发者对“四人帮”的《设计模式》一书应该都很熟悉,微服务中也会有一些常见的模式:部署模式如何部署服务是微服务中的一个重要问题,微服务的部署方式非常灵活,有以下的不同选项可供选择 (参考 http://www.open-open.com/lib/view/open1462434484246.html)多服务共享主机/虚机单服务部署单一主机/虚机单服务部署单一容器(Docke...

weixin_39609407的博客 136

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

有几种部署模式_微服务中的模式和反模式

微服务中的常见设计模式软件开发者对“四人帮”的《设计模式》一书应该都很熟悉,微服务中也会有一些常见的模式:部署模式如何部署服务是微服务中的一个重要问题,微服务的部署方式非常灵活,有以下的不同选项可供选择 (参考 http://www.open-open.com/lib/view/open1462434484246.html)多服务共享主机/虚机单服务部署单一主机/虚机单服务部署单一容器(Docke...

weixin_35626356的博客 312

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于批量启动微服务的jar包_微服务设计 10 大反模式和陷阱!

作者:飒然HangO’Reilly的电子书《Microservices AntiPatterns and Pitfalls》讲述了在微服务设计实现时十种最常见的反模式和陷阱。本文基于此书,将这十个点列出。数据驱动迁移反模式(Data-Driven Migration)如上图所示,此种反模式的问题在于微服务的粒度没有最终确定之前就做了数据迁移,如此当不断的调整服务粒度时,那么数据库就免不了频繁迁移,...

weixin_35594924的博客 716

7种微服务反模式

什么是微服务\u0026#xD;流行术语为那些逐步形成的、需要一个好的“标签”来方便交流的概念提供了一个上下文。微服务就是这样的一个新“标签”,它定义了一个领域,这个领域我自己也发现了,并且现在已经使用了一段时间。我慢慢认识到,相关文章和会议所描述的东西,我已经从自己过去几年的个人经历中引申出来。行业和专家对微服务的讨论让Netflix、亚马逊、谷歌等已经成功实现微服务的公司成为了焦点,而我有一些...

cpongo011702 236

什么是微服务 —— What are microservices? 来自 IBM

微服务是一种云原生架构方法,将单体应用拆分为多个松散耦合、可独立部署的小型服务。每个服务拥有独立的技术栈和数据库,通过API、事件流等方式通信。核心优势包括:灵活更新功能、支持异构技术栈、精准扩展组件。微服务需配合DevOps和容器化工具(如Docker/Kubernetes)使用,与单体架构和SOA的主要区别在于服务粒度和治理范围。典型应用场景包括电商订单系统等需快速迭代的业务。IBM调查显示,87%采用者认为微服务值得投入,未来两年将有56%企业计划采用。实施时需避免过度拆分、忽视自动化等常见误区。

RR1335 之代码才是动力源 3510

微服务:微服务的分解和组合模式。

使用微服务架构划分服务和团队是微服务架构实施的重要一步,良好的划分和拆分使系统达到松耦合和高内聚的效果,然后通过微服务的灵活组装可以满足上层的各种各样的业务处理需求。 在微服务架构的需求分析和架构设计过程中,通常使用领域的动词和名词来划分微服务的,例如,对于一个电商后天系统,可以分解为订单、商品、商品目录、库存、购物车、交易、支付、发票、物流等子系统,每个名词和动词都可以是一个微服务,将这几个微...

孤芳不自赏 4949

小鸟云:浅谈5 种典型的云原生架构反模式

云服务器,就上小鸟云。 反模式是随着项目的推进演变而来的,主要的原因,如重大需求调整,但架构没有对应的变化,性能和安全需求对当前架构的硬性改变,团队或组织强行调整技术等。本文将为大家讲解云原生架构中常见的反模式。 庞大单体应用 如果你有过维护或者开发巨型单体应用的经历,肯定遇到过诸多令人痛苦的问题,比如,Git 仓库过于庞大、IDE 打开慢、编译慢、应用启动慢、依赖的服务太多……对于新人来说,能够将代码复制下来,并且编译成功,能正常启动应用,那将是极其幸运的事情。更多的情况则是,运维人员至少要花费 1

tspyunjisuan的博客 1102

Java架构反模式深度解析:从God对象到微服务的重构实践

将可变业务逻辑抽象为独立策略接口,具体实现类封装不同算法,上下文类负责调用策略,实现业务规则的集中管理和灵活替换。通过定义领域事件,各微服务只需监听感兴趣的事件并异步处理,不再需要直接调用其他服务的API。在实际项目中,可以先用SonarQube扫描识别代码中的反模式,再结合Lombok等工具减少样板代码,最后通过持续集成确保重构不会引入新问题。在数据库操作中尤为致命,当处理分页数据时,系统会先执行1次主查询,再对每条记录执行N次关联查询,导致数据库负载指数级增长,响应时间急剧上升。

GoldenleafTiger89的博客 461

软件体系结构的结构模式_反模式的模式:体系结构

软件体系结构的结构模式 我们一直在寻找构建我们的应用程序和平台的最佳方法,以便它们可维护,可扩展,可观察,适应性强且易于发展(这绝不是我们想要拥有的属性的完整列表,而是基础属性的完整列表) )。 分层体系结构 , 基于组件的体系结构 , 六边形体系结构 , 微服务体系结构 (以及许多其他 体系结构 )主张使用出色的设计原则和准则来实现这些目标。 例如, 分层体系结构建议在不同的层(持久性,...

danpu0978的博客 359

【微服务】专家组:在过去十年的微服务中,我们学到了什么?

瓦特(Watt):这是微服务专家组。Chris早些时候谈到了最小化微服务中的设计时耦合。他是microservices.io的创建者,《微服务模式》一书的作者。他也是Java冠军,在微服务领域非常有经验。我期待着与你们一起深入研究其中的一些领域。当然,我们有詹姆斯·刘易斯,他是最早创造和定义术语或架构风格的人之一,我们今天称之为微服务。James是ThoughtWorks...

全网:架构师研究会 435
上一篇: 微服务部署方式的演进
下一篇: 持续交付的架构成熟度模型
刚是程序员
博客等级 码龄9年 47粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值