文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

货拉拉应用架构演进,堪称单体落地微服务避坑指南

2024-12-02 02:19

关注

一、应用架构的演进

应用服务架构一直处于不断演进的过程中,上图通过对比5种比较主流的架构模式,展示了应用架构的演进历程和变化。

1、单体架构

在业务发展初期,为了快速落地应用、满足客户需求,一般会使用All in One的单体架构。

单体架构的特点是:在每个节点服务器中,包换应用的全部功能模块代码等所有模块都耦合在一个进程里,系统完全封闭且很复杂,牵一发动全局;应用系统很臃肿,维护和版本升级开销非常大。使用负载均衡分散访问会话,提高并发处理能力。

单体架构是围绕web容器打包及部署的架构模式,随着业务的快速发展,要求实现服务的快速迭代和快速交付,应用架构也演进为以服务为中心的架构模式。

2、RPC架构

RPC架构在现在应用系统的早期还是比较常见的架构模式,就是增加服务层,把冗余的代码和可以复用的业务应用进行拆分提取,封装成服务。系统架构更加清晰,代码质量提高,利于升级和维护,稳定性高。应用层可以更专注于与前端用户交互。业务处理放在服务层来进行,服务和应用的管理不是自动化,服务层能够实现HA的功能,适用中小型WEB系统的场景和高并发场景,性能比较好。RPC就是一个典型的RPC架构。

RPC架构也存在一些问题,通过共享分布式对象实现远程方法调用,如果在其中一个对象中添加一个属性,就会对共享对象的生产者与消费者产生影响,所以RPC架构也是紧耦合的模式。系统交互采用RPC私有TCP协议,服务生产者和消费者存在强代码依赖,对异构系统集成不友好。

3、SOA架构

个人认为SOA架构经历了两个阶段,一是以ESB中心化的架构,二是以注册服务为中心的服务注册发现架构(上图)。

1)ESB中心化架构

ESB中心化架构实现了松耦合,依赖于ESB消息总线技术实现异构系统的信息交互和集成集中式架构管理,因此它虽然是面向服务的,但它本质上依旧是一个中心化的架构。

其优势在于:基于WebService技术,拥有重量级的消息通讯机制。当团队规模比较大、要实现异构系统集成时,它可以提供统一的解决方案和技术实现方式,快速集成异构系统对外服务。

2)以注册服务为中心的服务注册发现架构

以注册服务为中心的服务注册发现架构适用大型及超大型网站应用架构。所以ESB中心化架构的问题也比较明显:中心化架构难以满足灵活性的服务迭代和需求交付。

4、微服务架构

微服务架构实现了系统解耦和持续集成,有清晰的服务边界,相对ESB架构和传统SOA架构来说粒度更小,使用轻量级的通讯机制(HTTP+REST)交互,具备更强的扩展性和弹性,能够更灵活、更快响应业务变化。

5、服务网格架构

服务网格架构是容器化的产物,引入了类似代理的Sidecar,在微服务SDK里面保留协议编解码能力,把服务注册与发现、负载均衡、熔断、限流、降级等服务治理能力下沉到Sidecar。当该 sidecar 在微服务中大量部署时,这些 sidecar 节点自然就形成了一个网格。

服务网格架构的优势:支持用多语言开发业务、省去或轻量化SDK,为异构服务框架/平台创造了融合和发展的机会,让服务框架/平台的演进更自主、更敏捷,让业务开发聚焦业务本身,无需关心安全、灰度、熔断、限流、降级等普遍服务,治理能力更敏捷、更好管控,加速业务探索。

Service Mesh的终局:Mesh所有协议或框架。目前货拉拉已经实现了Redis Mesh。

通过上述对比,我们不难发现,应用服务架构是在不断演进的,而且其演进背后存在一定的逻辑,服务架构的演进主要取决于以下2个维度: 

综上所述,应用架构演进的底层逻辑就是: 一切为了敏捷(低投入,快速满足业务需求)。

二、货拉拉的All In One Web到微服务治理

货拉拉应用架构到现在为止经历了All In One Web的单体架构,RPC架构,与现在的微服务架构。

1、货拉拉微服务治理的背景

1)微服务化碰到的问题

从2020年开始微服务化改造,当时阶段属于类似的RPC架构,是基于域名+HTTP的服务交互方式(图上)。痛点在于:

2)微服务化需要解决的问题

2、货拉拉微服务治理的框架选型

综合上述需要解决的问题,技术选型和参考的框架:

公司内部基础设施还未全面容器化,所以服务网格架构方式Istio先淘汰,剩下就是Dubbo和Spring Cloud。我们选型思考的出发点:框架上的缺点或者不足点是不是我们能接受或者克服的。

1)Dubbo2.X的缺点

2020年Dubbo 3.0还未Release,所以我们研究了Dubbo 2.X。

2)Spring Cloud的缺点

3)自研微服务框架

我们对比后的结论是自研微服务框架,具体微服务体系中组件选型和设计思考如下:

3、货拉拉微服务治理的实现思路

框架设计参考Dubbo代码的分层架构和优秀设计:

1)泛化调用的实现方式

 ① 参考FeignClient定义接口方式

@FeignClient(value= “XC-SERVICE-MANAGE-CMS”)

其中XC-SERVICE-MANAGE-CMS为下游应用的APPID,FeignClient在Spring Cloud体系中以APPID的方式发现服务。

 ② 参考jsonrpc4j接口的定义方式

@JsonRpcService("/path/to/MyService")
interface MyService {
... service methods ...
}

 ③ 泛化调用的接口定义方式

 ④ 标准JSONRPC接口的定义方式

2)服务治理能力整体实现方式

服务治理管控平台:soa-admin控制台

3)Java Agent版本服务治理能力实现方式

4、货拉拉微服务治理的未来规划

未来往Service Mesh演进,但生产落地仍有挑战。

1)增加的复杂性

在一个已经很复杂的环境中引入代理、sidecar等组件会极大地增加运维的复杂性。

2)需要的专业知识

在容器编排器(如Kubernetes)之上添加Istio之类的服务网格,通常需要运维人员成为这两种技术的专家。

3)延迟

服务网格是一种入侵的、复杂的技术,它能向服务架构中添加显著的延迟。

4)平台的依赖性

服务网格的侵入性迫使开发人员和运维人员适应一个高度自治的平台,并遵守其规则。

来源:dbaplus社群内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯