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

    文章

    147

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    微服务架构几种典型的基础框架,你了解吗?

    SpringCloud、Dubbo、Dropwizard、Akka等是常见微服务框架。SpringCloud基于SpringBoot,生态丰富;Dropwizard轻量且继承SpringBoot优点
    的头像 发表于 03-04 11:05 797次阅读

    NVIDIA发布全新NIM AI Guardrail微服务

    NVIDIA近期推出了一项旨在保障代理式AI应用安全性的重要技术——NIM AI Guardrail微服务。这一全新微服务是NVIDIA NeMo Guardrails软件工具系列的重要组成部分
    的头像 发表于 01-18 11:48 1049次阅读

    NVIDIA NeMo Guardrails引入三项全新NIM微服务

    NVIDIA NeMo Guardrails 包含全新 NVIDIA NIM 微服务,能够为各行业构建 AI 的企业提高 AI 的准确性、安全性和可控性。
    的头像 发表于 01-18 09:39 1140次阅读

    NVIDIA 发布保障代理式 AI 应用安全的 NIM 微服务

    NVIDIA NeMo Guardrails 包含全新 NVIDIA NIM 微服务,能够为各行业构建 AI 的企业提高 AI 的准确性、安全性和可控性。   AI 智能体有望成为能够完成各种任务
    发表于 01-17 16:29 282次阅读

    微服务容器化部署好处吗?

    微服务容器化部署好处有很多,包括环境一致性、资源高效利用、快速部署与启动、隔离性与安全性、版本控制与回滚以及持续集成与持续部署。这些优势助力应用可靠稳定运行,提升开发运维效率,是现代软件架构的优质选择。UU云小编认为微服务容器化
    的头像 发表于 01-17 10:22 550次阅读

    容器化能替代微服务吗?两者有何区别

    容器化不能替代微服务,但它是微服务的解决方案之一。微服务架构的核心在于将大型应用程序拆分为一系列小型、独立的服务,每个
    的头像 发表于 01-13 10:40 697次阅读

    Java微服务中如何确保安全性?

    在Java微服务架构中确保安全性,可以采取以下措施: 身份验证与授权: 使用OAuth 2.0和OpenID Connect框架进行身份验证和授权。OAuth2允许用户在不分享凭证的情况下授权第三方
    的头像 发表于 01-02 15:21 1030次阅读

    宝藏级微服务架构工具合集

    大量数据流。这些工具各有特色,可根据具体需求和场景选择合适的来构建和管理微服务架构。以下是UU云小编整理的几个热门的微服务架构工具及其概括性
    的头像 发表于 12-21 16:33 910次阅读