10个微服务架构设计的最佳实践
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
微服务极大的改变了服务端引擎的架构方式。微服务不是一个单一的巨型的用来托管应用程序所有业务逻辑的代码库,而是反映了分布式系统模型,在该模型中,一组应用程序组件协同工作来满足业务需求。通过遵循十项基本的微服务最佳实践,你可以实现一个高效的微服务生态系统,从而避免不必要的架构复杂性。
微服务架构的收益
当从单体应用正确的迁移到微服务架构的时候,可以获得以下收益:
- 你可以根据自己的意愿选择一门语言开发微服务,按照自己的节奏独立发布它,并独立扩展。
- 组织中的不同团队可以独立的拥有自己特定的微服务,并且随着并行开发以及重用的增加,产品发布的时间会更快。
- 可以更好的隔离故障,因为发生在特定微服务中的错误会在对应的服务中被处理掉,因此不会影响到生态系统中的其他服务。
但是,如果在构建微服务时未遵循正确的原则,则最终可能会陷入像纠缠在一起的意大利面一样的状态。
这让维护变得非常困难,因为这需要不同的团队一起协作来做变动,发布或者实现容错。
充分利用微服务是一门科学并且需要一些刻意练习。以下微服务最佳实践和设计原则将帮助你构建松散耦合,分布式和优化的微服务,以实现最佳价值。
10个微服务最佳实践
1.单一责任原则
就像代码中的类一样,它仅仅在单个原因情况下改变,微服务也是采用类似的方式建模。构建可能会改变一个以上的业务这种臃肿的服务是一个坏的实践。
例如:你正在构建用于订购披萨的微服务。你可以基于功能构建下面这些组件,诸如InventoryService,OrderService,PaymentService,UserProfileService,DeliveryNotificationService等。InventoryService仅仅有获取或更新披萨种类或配料库存相关的API,同样的,其他也只会提供对应功能的API。
2.独立的数据存储
如果你的所有微服务都共享一个数据库,这就违背了使用微服务的目的。对这个数据库的任何的改变或者故障都会影响使用该数据库的所有微服务。根据微服务的需要选择正确的数据库,定制化基础设施以及对应数据的存储,并且让你的服务独占它。理想情况下,任何需要访问该数据的其他微服务只能通过拥有写权限的微服务提供的API来访问。
3.使用异步通信实现松散耦合
为了避免构建出一个紧密耦合的组件网格(mesh),可以考虑在微服务之间使用异步通信。
a.对依赖的服务异步调用,如下例子。
例如:有一个服务A依赖服务B的例子。当服务B返回响应消息,服务A再返回成功给调用服务A的调用者。如果调用者对服务B的内容不关心,那么服务A可以异步调用服务B,并且这个时候可以立即返回成功给调用者。
b.一个更好的选择是在微服务通信之间使用事件机制。你的微服务可以发布一个事件消息到消息总线上,可以用来通知一个状态的改变或者一个失败事件,并且任何对该事件感兴趣的微服务都可以获得该消息然后做出相应的处理。
例如:上面提到的披萨订单系统中,当客户的订单被接收到或者订单已经完成以及运输的状态消息都可以使用异步通信给客户发送通知消息。通知服务可以监听订单提交的消息事件然后将相应的通知推送给客户。
4.使用熔断器快速实现故障容错
如果你的微服务依赖于另一个系统来提供响应,并且该系统需要很长时间才会响应,那么你的总体响应SLA将会受到影响。为了避免这种场景并且快速做出响应,你需要遵循的一个简单的微服务最佳实践是使用熔断器来使外部的调用超时,然后返回一个默认响应或者错误。熔断器模式可以参考最下面的引用。这种方式可以隔离故障服务,而不会导致级联故障,可以让你的服务保持在健康的状态。你可以选择使用流行的产品,比如Netflix开发的Hystrix。这要比使用HTTP CONNECT_TIMEOUT和READ_TIMEOUT设置更好,因为它不会启动超出配置范围的其他线程。
5.通过API网关代理微服务请求
相比于系统中的每个微服务都单独提供API授权,请求/相应日志以及限流功能,使用一个单独API网关做这些事情会更有价值。调用你微服务的客户端可以连接到API网关而不是直接调用微服务接口。这种方式可以让你的微服务避免做那些额外的调用,并且微服务内部URL可以被隐藏,这可以让你更灵活的从API网关重定向流量到一个微服务的更新版本。当允许第三方访问你的微服务时,那么更有必要使用这种方式,因为你可以在请求到达微服务之前对传入流量进行限流以及拒绝来自API网关的未授权请求。你也可以选择一个单独的外部网关,让它可以接收外部网络的流量。
6.确保API变更向后兼容
你可以安全的对API进行变更并且快速的发布它们,只要这些改变不影响已有的调用者。一种可能的选项是通知你的调用者,让他们通过集成测试来对做出的变更进行验证。但是,这种代价会比较高,因为所有依赖项都需要在一个环境中排队,这会使你的协调工作变慢。一个更好的选项是对你的API使用合约测试。你的API消费者对API提供预期响应结果的合约。作为API提供者的你可以集成这些合约测试作为你构建的一部分并且这些可以安全的保证重大的API变更。消费者可以测试你发布的存根(stubs)作为他们构建的一部分。这种方式可以让你通过独立测试合约变更来更快速的发布产品。
7.版本化微服务重大变更
不可能让变更总是保持向后兼容。当你做了一个重大的变更的时候,同时需要继续支持老的接口,这时候可以暴露一个新版本的接口。消费者可以在方便的时候选择新的版本。但是有太多版本的API对于维护相应的代码人来说会是一场噩梦。因此,有一种规范的方法是通过和客户端一起协作或在内部将流量重新路由到较新的版本,从而弃用较旧的版本。
8.使用专用基础设施托管微服务
你已经开发出了满足所有检查的最好的微服务,但是使用了一个很差的托管平台,那么最终的效果依然会表现的很差。将你的微服务基础设施与其他组件隔离可以实现故障隔离和最佳性能。隔离微服务依赖的组件基础设施也同样重要。
例如:上面披萨订单的案例中,库存微服务使用库存数据库。使用专用的托管机器不仅对于库存微服务很重要,而且对于库存数据库同样也很重要。
9.创建独立的发布通道
你的微服务需要有一个单独的发布通道,这个通道不和你所在组织中的其他组件关联。这样的话你就不会和别人有冲突以及浪费和多个团队协调的时间。
10.建立组织效率
尽管微服务给你提供了独立开发和发布的自由,但是对于跨领域关注(cross cutting concerns)来说,某些标准还是需要遵循的,这样才不会让每个团队都花费时间为这些问题创建独特的解决方案。这在诸如微服务分布式架构中是非常重要的,在这种架构中,你需要能够连接难题(puzzle)中的所有部分才能看清全局。因此,对于API安全,日志聚合,监控,API文档,秘钥管理,配置管理,分布式追踪等,企业级解决方案是必须要有的。
通过遵循这些微服务最佳实践,你可以获得一个松散耦合,分布式以及独立的微服务系统,同时你可以获得本文开头列出的微服务架构的真正好处。
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-08-06
本文作者:w9527
本文来自:“dockone”,了解相关信息可以关注“dockone”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Gitee Talk | 人工智能技术如何为业务赋能?首期直播分享已开启报名
欢迎大家参加首期 Gitee Talk ! 作为首期直播分享,Gitee Talk 为各位开发者带来的是 「AI 应用实战专题」。我们邀请了四位在人工智能领域颇有建树的嘉宾,通过四个不同的主题,为各位开发者分享人工智能技术如何更好地为业务赋能,真正发挥出其价值。 直播观看方式 扫描下方二维码,免费加入 Gitee Talk 直播群。 群内将为大家推送课程直播间的链接、直播时间,以及 AI 学习资料大礼包,观看直播互动的伙伴将有机会获赠奖品,公仔、文化衫、鼠标垫、路由器等你拿! 直播内容 智能推荐技术应用案例 分享时间 8月12日 19:30-20:15 分享嘉宾 连诗路 –《产品经理进化论:AI+时代产品经理的思维方法》作者、《AI赋能:AI重新定义产品经理》作者 前阿里巴巴产品专家、前爱奇艺产品总监、现AI领域创业者。80后,毕业于浙江大学软件工程专业,超过387000+人次阅读认可,前阿里巴巴需求挖掘产品经理,具有丰富的高并发系统设计、大数据挖掘经验。 爱奇艺奇秀产品第一任产品总监,曾为多家互联网企业、智能硬件企业和投资者担任产品顾问,策划过多款软件和硬件产品。畅销书《AI+时代产...
- 下一篇
AI和物联网在零售环境中的长期应用
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 物联网摄像头可以使零售环境更有效率,更方便客户,更重要的是更有保障和安全。 AI应用程序可通过可行的智能数据协助多个零售部门改善客户体验并增加销售转换率 通过将智能相机与IoT中的其他系统连接,安全过程可以完全自动化 在面对数十年来最富挑战性的时代之后,全球零售商都在谨慎地重新开放自己的大门,而在世界某些地区,最艰难的时期可能仍在眼前。由COVID-19大流行引起的短期破坏是显而易见的,但其对零售业务未来的影响尚待观察。这种不确定性给零售商带来了看不见的挑战,他们正在寻求对技术进行明智的投资,一旦健康与安全指南和限制解除,这些投资就不会过时。 许多零售商集中精力实施技术,主要是为了减轻持续的大流行带来的风险。然而,今天对新型智能监控摄像头的投资使零售商能够设计一个可持续的系统,无论是在大流行期间还是随着运营开始正常化,都可以为多种类型的场景提供强大的应用程序。这些摄像机可以灵活地配备和重新配备各种视频分析应用程序,并且可以随时重新调整用途,以满足企业最紧迫的需求。在过去的几个月中,许多零...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度