0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

微服务架构多微才合适

lhl545545 来源:电子发烧友网 2018-02-07 17:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、互联网架构为什么要进行服务化-总结

上一篇和大伙交流了一下,随着数据量、并发量、业务复杂度的增长,互联网架构会出现以下问题:

(1)代码到处拷贝

(2)底层复杂性扩散

(3)基础库(so/jar/dll)耦合

(4)SQL质量得不到保障,业务相互影响

(5)数据库耦合

“服务化”是一个很好的解决上述痛点的方案。

服务化之后,可能会引发分布式事务的问题,“没人愿意引入分布式事务,当基于业务水平拆分的时候,要业务专家介入,合理拆分服务化,以后就服务内高内聚,事务可以保证,对于夸服务调用,通过补偿等手段,只要最终一致性就行,毕竟连现在的银行转账都不是强一致性。”

分布式事务是业界没有彻底解决的难题,任何架构设计都是一个折衷,吞吐量?时延?一致性?哪个是主要矛盾,优先解决哪个问题。大数据、高并发、业务复杂性是主要矛盾的时候,或许“最终一致性”是一个替代“事务”更好的,或者说业务能够接受的方案。

多了一层服务层,架构实际上是更复杂了,需要引入一系列机制对服务进行管理,RPC服务化中需要注意:

(1)RPC服务超时,服务调用者应有一些应对策略,比如重发

(2)关键服务例如支付,要注意幂等性,因为重发会导致重复操作

(3)多服务要考虑并发操作,相当单服务的锁机制比如JAVA中的synchronized

二、互联网微服务架构多“微”才适合

大家也都认可,随着数据量、流量、业务复杂度的提升,服务化架构是架构演进中的必由之路,今天要讨论的话题是:微服务架构多“微”才合适?

【粗粒度:一个服务层】

微服务架构多微才合适

最粗犷的玩法,所有基础数据的访问,都通过一个service访问,在业务不是特别复杂的时候还好,一旦业务变复杂了,这个service层会变得非常重,成为耦合点之一,以微信场景为例,假设有一个通用的服务层来访问基础数据,这个服务层可能是这样的:

微服务架构多微才合适

有一个统一的service层,用户信息,好友信息,群组信息,消息信息都通过这个service层来走。

细节:微信单对单消息是一个写多读少的业务,故没有缓存。

【一个子业务一个service】

如果所有的信息存储都在一个service里,那么一个地方出bug,就将影响整个业务,所以更合理的做法是在服务层进行细分,架构如何细分?垂直拆分是个好的方案,将子业务一个个拆出来,那么微信的服务化架构或许会变成这个样子:

微服务架构多微才合适

(1)用户相关的子业务有user-service

(2)好友相关的子业务有friend-service

(3)群组相关的子业务有group-service

(4)消息相关的子业务有msg-service

这样的话,一个service出问题也不会影响其他service,同时数据层也按照业务垂直拆分开了。

服务粒度变细之后,出现一个新的问题,业务与服务的连接关系变复杂了,有什么好的优化方案么?

微服务架构多微才合适

常见的,加入一个高可用服务分发层集群,并在协议设计时加入服务号,可以减少蜘蛛网状的依赖关系:

(1)调用方依赖分发层,传入服务号

(2)分发层依赖服务层,通过服务号参数分发

【一个数据库对应一个service】

数据访问service最初是从DAO/ORM的数据访问需求过来的,所以有些公司也有一个数据表一个service的玩法。

一个子业务对应一个service的玩法是:

微服务架构多微才合适

(1)服务层,整个群业务是一个service

(2)存储层,实际可能对应了群信息、群成员、群消息等多个数据表

拆分成一个数据表一个service,则架构会变成这样:

微服务架构多微才合适

群信息表,群成员表,群消息表等各个数据表之间也解耦开了,不会相互影响了。

【一个接口对应一个service】

微服务架构中更极端的,甚至一个接口对应一个微服务,这样的话,架构就从:

微服务架构多微才合适

(1)修改群信息服务

(2)增加群信息服务

(3)获取群信息服务

多个服务操纵同一个数据表,使用同一片缓存,每个接口出问题,都不会影响其他接口。

三、粒度粗细的优劣

上文中谈到的服务化与微服务,不同粒度的服务化各有什么优劣呢?

总的来说,细粒度拆分的优点有:

(1)服务都能够独立部署

(2)扩容和缩容方便,有利于提高资源利用率

(3)拆得越细,耦合相对会减小

(4)拆得越细,容错相对会更好,一个服务出问题不影响其他服务

(5)扩展性更好

(6)…

细粒度拆分的不足也很明显:

(1)拆得越细,系统越复杂

(2)系统之间的依赖关系也更复杂

(3)运维复杂度提升

(4)监控更加复杂

(5)出问题时定位问题更难

(6)…

关于微服务架构的“粒度”问题,以及各粒度的优劣,大伙有什么好的看法,欢迎补充,建设性的意见将在后续文中和大伙share。

四、结束的话

聊了许多,有网友问,笔者对待服务化以及微服务粒度的看法,个人觉得,以“子业务系统”粒度作为微服务的单位是比较合适的:

微服务架构多微才合适

末了,讨论完微服务架构的粒度,后续文章和大家聊一聊微服务的最佳实践,需要什么样的框架、组件、技术能够将服务化在较短的时间内开展起来,下周和大伙再聊。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微服务
    +关注

    关注

    0

    文章

    150

    浏览量

    8141
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电网系统架构:集群协同与能量互济的网络设计

    在新型电力系统建设与 “双碳” 目标推进的进程中,单个电网的 “孤岛效应” 逐渐凸显 —— 高比例新能源消纳能力有限、能量调配灵活性不足、故障时供电保障能力薄弱,难以适配区域级能源协同需求。
    的头像 发表于 04-17 14:21 156次阅读
    <b class='flag-5'>多</b><b class='flag-5'>微</b>电网系统<b class='flag-5'>架构</b>:集群协同与能量互济的网络设计

    电网集中式架构vs分布式架构:设计差异与选型依据

    电网作为整合“源、储、荷、网”的新型能源系统,其架构设计直接决定系统的运行效率、可靠性、扩展性与经济性,是电网规划建设的核心环节。在电网主流
    的头像 发表于 04-02 11:40 430次阅读
    <b class='flag-5'>微</b>电网集中式<b class='flag-5'>架构</b>vs分布式<b class='flag-5'>架构</b>:设计差异与选型依据

    西格电力电网总体架构设计:分层分布式控制体系构建

    随着分布式新能源规模化渗透、负荷需求多元化升级,电网作为整合“源、储、荷、网”单元的新型能源系统,其安全稳定、高效经济运行的核心诉求,对总体架构设计与控制体系提出了更高要求。电网
    的头像 发表于 03-31 11:44 510次阅读
    西格电力<b class='flag-5'>微</b>电网总体<b class='flag-5'>架构</b>设计:分层分布式控制体系构建

    Springboot+SpringData+SpringCloud微服务架构课程

      后端进阶必学:SpringCloud 微服务高可用落地实战 在互联网技术飞速迭代的今天,单体应用架构已逐渐难以承载亿级流量的重担。对于渴望突破瓶颈、迈向架构师行列的后端开发者而言,掌握微服
    的头像 发表于 03-19 16:08 338次阅读

    光伏四可装置软件系统架构微服务化设计与容器化部署方案

    ,某一模块升级需整体停机,无法适配光伏场景对实时性与连续性的要求;物理机部署模式则导致环境一致性差,跨场景迁移成本高。为此,基于微服务化设计与容器化部署的软件架构应运而生,通过“功能解耦、弹性部署、高效
    的头像 发表于 03-03 15:47 535次阅读

    基于OpenTelemetry的全链路追踪微服务可观测性实践

    微服务拆分到第三年,我们的服务数量从最初的5个膨胀到了47个。一个用户下单请求要经过API Gateway -> 用户服务 -> 商品服务 -> 库存
    的头像 发表于 02-26 15:43 559次阅读

    华纳云VPS容器服务网格流量管理:实现微服务高效路由

    在云计算和微服务架构日益普及的今天,华纳云香港VPS凭借其优越的地缘优势和网络自由,成为众多企业部署容器化应用的热门选择。复杂的微服务架构带来了流量管理的巨大挑战。本文将深入探讨如何利
    的头像 发表于 10-16 17:09 668次阅读

    基于RFID与微服务架构的智能仓库管理系统:实现仓储数据的全链路精准采集与管控

    针对传统仓储管理中普遍存在的账实不符、流程效率低下及信息孤岛等问题,本文介绍一套基于RFID射频识别技术与微服务软件架构的智能仓库管理系统。系统通过“一物一码”的电子身份标识,实现了对物资从入库
    的头像 发表于 10-13 11:18 948次阅读
    基于RFID与<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>的智能仓库管理系统:实现仓储数据的全链路精准采集与管控

    如何基于Nginx构建微服务网关

    今天,我将分享我们团队如何基于Nginx构建了一个日均处理10亿+请求的微服务网关,以及踩过的那些坑。这套方案已经稳定运行2年+,经历过多次大促考验。
    的头像 发表于 09-02 16:29 962次阅读

    Jtti海外VPS微服务架构下的日志采集与分析优化方案

    随着跨境业务和分布式应用的普及,越来越多的企业在海外VPS上构建微服务架构,以提升系统扩展性和灵活性。然而,微服务化带来了一个新的挑战:日志数据分散在多个服务和节点中,若缺乏统一采集与
    的头像 发表于 08-27 17:13 700次阅读

    深入剖析RabbitMQ高可用架构设计

    微服务架构中,消息队列故障导致的系统不可用率高达27%!如何构建一个真正可靠的消息中间件架构?本文将深入剖析RabbitMQ高可用设计的核心要点。
    的头像 发表于 08-18 11:19 1091次阅读

    电商API的微服务架构优化策略

    ​ 随着电子商务的快速发展,API(应用程序编程接口)已成为电商平台的核心组件,负责连接用户、商家和后台系统。微服务架构通过将应用拆分为独立、可扩展的服务单元,显著提升了系统的灵活性和可维护性。然而
    的头像 发表于 07-23 14:30 731次阅读
    电商API的<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>优化策略

    蔡司“微服务”——全能在线售后管家,24小时守护您的设备!

    还在为设备故障烦恼? 急需技术支援却找不到人? 想快速获取用户手册或软件升级? 现在 只需信扫一扫设备上的蓝色标签二维码 蔡司“微服务”一键触达! 9大功能板块 全方位解决您的售后需求 服务更高
    发表于 07-10 16:44 1686次阅读
    蔡司“<b class='flag-5'>微服务</b>”——全能在线售后管家,24小时守护您的设备!

    超级电容阻值多少合适

    本文主要介绍了超级电容的核心参数——等效串联电阻(ESR),并讨论了如何在高功率脉冲设备和储能系统中找到合适的ESR值。此外,还提到了温度、电压和材料工艺对ESR的影响,并探讨了如何优化阻值的工程路径。
    的头像 发表于 07-03 09:36 1447次阅读
    超级电容阻值多少<b class='flag-5'>才</b><b class='flag-5'>合适</b>?

    企业使用NVIDIA NeMo微服务构建AI智能体平台

    已发布的 NeMo 微服务可与合作伙伴平台集成,作为创建 AI 智能体的构建模块,使用商业智能与强大的逻辑推理模型 (包括 NVIDIA Llama Nemotron) 处理更多任务。
    的头像 发表于 04-27 15:05 1484次阅读