货拉拉应用架构演进,堪称单体落地微服务避坑指南徐少敏货拉拉?技术中心?核心基础设施部?Java技术专家主要负责

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

1、单体架构

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

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

单体架构是围绕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,为异构服务框架/平台创造了融合和发展的机会,让服务框架/平台的演进更自主、更敏捷,让业务开发聚焦业务本身,无需关心安全、灰度、熔断、限流、降级等普遍服务,治理能力更敏捷、更好管控,加速业务探索。

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

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

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

二、货拉拉的AllInOneWeb到微服务治理

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

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

1)微服务化碰到的问题

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

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

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

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

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

1)Dubbo2.X的缺点

2020年Dubbo3.0还未Release,所以我们研究了Dubbo2.X。

2)SpringCloud的缺点

3)自研微服务框架

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

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

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

1)泛化调用的实现方式

①参考FeignClient定义接口方式

@FeignClient(value=“XC-SERVICE-MANAGE-CMS”)其中XC-SERVICE-MANAGE-CMS为下游应用的APPID,FeignClient在SpringCloud体系中以APPID的方式发现服务。

②参考jsonrpc4j接口的定义方式

@JsonRpcService("/path/to/MyService")interfaceMyService{...servicemethods...}③泛化调用的接口定义方式

④标准JSONRPC接口的定义方式

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

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

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

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

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

1)增加的复杂性

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

2)需要的专业知识

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

3)延迟

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

4)平台的依赖性

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

THE END
1.Java:主要特点应用领域架构工具未来Java是一种广泛使用的编程语言和计算平台,由Sun Microsystems(现为Oracle公司)于1995年首次发布。Java的设计理念是“编写一次,处处运行”(Write Once, Run Anywhere),使得Java程序可以在任何安装有Java虚拟机(JVM)的设备上运行,具有高度的跨平台性。以下是有关Java的深入介绍,包括其特点、应用领域、相关技术框架等。 https://blog.csdn.net/Kemo_/article/details/144429671
2.设计模式概述北风飕飕的技术博客设计模式是软件开发中一类被广泛使用的解决方案,用于应对常见的编程问题。在 Java 编程中,设计模式帮助开发者构建高效、可扩展、易于维护的系统。本文将介绍几种常见的设计模式,并通过示例代码帮助大家理解如何在实际项目中使用这些模式。 1. 设计模式概述 https://blog.51cto.com/u_12795311/12750575
3.《Java:持续闪耀的编程之星》腾讯云开发者社区在当今的编程世界中,Java无疑是一颗耀眼的明星。它作为一种广泛使用的编程语言,一直处于热点之中,吸引着众多开发者的关注。 Java 的强大之处在于其高度的可移植性。无论是在桌面应用、服务器端开发还是移动应用领域,Java 都能展现出其卓越的性能。这使得开发者能够轻松地在不同的平台上部署他们的应用程序。 https://cloud.tencent.com/developer/article/2475023
4.备战金九银十,腾讯T4梳理2020年最全999道Java岗必备面试题答案23、类型通配符? 24、类型擦除 Java异常面试题 1、Java中异常分为哪两种? 2、异常的处理机制有几种? 3、如何自定义一个异常 4、try catch fifinally, try里有return: finally还执行么? 5、Exepti on与Error包结构 6、Thow与thorws区别 7、Error与Excepti on区别? https://maimai.cn/article/detail?fid=1676715301&efid=le0vn010vvt6jXpw7rrt0A
5.Java必备基础知识点(超全)JSE: 是SUN公司针对桌面开发和低端商务计算方案开发的版本。为笔记本电脑、PC机设计的; JEE: 是一种利用JAVA 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。 为企业级的、服务器端的高端应用而设计的; 5、 描述Java技术的主要特性 http://www.360doc.com/content/17/0511/17/40605730_653044218.shtml
6.H5手机App开发入门:技术篇如果已经掌握了 Web 技术,这个技术栈就主要学习容器提供的 API Bridge,网页通过它们去调用底层硬件的 API。 (3)跨平台 App 技术栈(cross-platform technology stack) 跨平台技术栈指的是使用一种技术,同时支持多个手机平台。它与混合技术栈的区别是,不使用 Web 技术,即它的页面不是 HTML5 页面,而是使用自己的语http://www.ruanyifeng.com/blog/2019/12/mobile-app-technology-stack.html
7.基于大数据的智能医院建设项目二期附件(3)技术商务部分 ①标的说明一览表 ②技术和服务要求响应表 ③商务条件响应表 ④投标人提交的其他资料(若有) ⑤招标文件规定作为投标文件组成部分的其他内容(若有) 10.3投标文件的语言 (1)除招标文件另有规定外,投标文件应使用中文文本,若有不同文本,以中文文本为准。 (2)投标文件提供的全部资料中,若原件属于https://zfcg.czt.fujian.gov.cn/upload/document/20210909/8617c11d53c640fcb9bcfb1c5e66cf37.html
8.Java开发web的几种开发模式(4)Java计算,基于Java技术的企业Internet/Intranet信息系统以及其他应用系统。 四、结语 Java自问世以来,以其得天独厚的优势,在IT业界掀起了研究、开发它的浪潮,显示了“鹏程万里”的美好前景。作为一种与底层硬件无关的、“编写一次,到处运行”的高级语言和计算平台,Java天生就具有将网络上的各个平台连成一体的能力https://www.yjbys.com/edu/jisuanjidengji/300226.html
9.IT技术交流分享平台JAVA+Vue+SpringBoot+MySQL码农集市专业分享根据您提供的项目信息,这是一个基于Java、Vue.js和SpringBoot的IT技术交流分享平台。该平台分为管理后台和用户网页端,可以给管理员和普通用户提供服务。平台包含以下模块: 1. 笔记类型模块:用于创建和管理不同类型的笔记。 2. 笔记档案模块:用于存储和管理用户的笔记。 3. 笔记分享模块:用于分享和管理笔记的分享https://www.coder100.com/index/index/content/id/4310056
10.达内教育IT培训官网IT培训班选达内IT培训机构专注IT培训22年,开设Java、云计算、网络安全、人工智能、物联网、WEB前端、软件测试、AI大模型、鸿蒙、智能办公、商业视效、商业变现、UI、新媒体电商等IT培训课程及IT培训证书相关课程,关注官网了解课程详解及优惠(www.tedu.cn)https://www.tedu.cn/
11.搜狗搜索引擎搜狗搜索是全球第三代互动式搜索引擎,支持微信公众号和文章搜索、知乎搜索、英文搜索及翻译等,通过自主研发的人工智能算法为用户提供专业、精准、便捷的搜索服务。https://www.sogou.com/
12.MES可重构平台技术基于MAS技术框架,可以MES系统中建立多种Agent类型,如管理Agent、加工任务Agent、资源Agent、监控Agent等,每个Agent可以对应一个具有分布式自主决策能力的业务功能模块,它们在分布式环境下实现信息共享和互操作,协同实现MES车间生产过程的管控功能。 图3所示是基于MAS的可重构MES体系结构。基于多智能体技术的MES系统具有良好https://www.clii.com.cn/lhrh/hyxx/202203/t20220330_3953477.html
13.23Java图形化编程AWT(Abstract Window Toolkit)是抽象窗口工具包,AWT是Java 程序提供的建立图形用户界面最基础的工具集。AWT支持图形用户界面编程的功能包括:用户界面组件(控件)、事件处理模型、图形图像处理(形状和颜色)、字体、布局管理器和本地平台的剪贴板来进行剪切和粘贴等。AWT是Applet和Swing技术的基础。 https://www.jianshu.com/p/9c6e86672618
14.Java核心技术(第12版)开发基础+高级特性(套装共2册)原版PDF电子书书籍类型:国产软件 书籍授权:免费软件 书籍类别:java电子书 应用平台:PDF 更新时间:2023-12-26 购买链接:京东异步社区 网友评分: 360通过腾讯通过金山通过 41.6MB 详情介绍 Java核心技术(第12版)由获Jolt大奖并拥有20多年教学与研究经验的资深Java技术专家撰写,针对Java 17进行了全面更新。 https://www.jb51.net/books/919300.html