货拉拉应用架构演进,堪称单体落地微服务避坑指南徐少敏货拉拉?技术中心?核心基础设施部?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.流行的Web应用开发框架web开发框架Spring框架由多个模块组成,如Spring Core(核心容器)、Spring MVC(用于构建Web应用的MVC框架)、Spring Boot(简化Spring应用的开发和部署)、Spring Cloud(用于构建微服务架构)等。这种模块化的设计使得开发者可以根据项目需求选择使用不同的模块。例如,在开发一个企业级Web应用时,可以使用Spring MVC来构建Web层,Spring https://blog.csdn.net/weixin_62879005/article/details/142549602
2.Web快速开发框架(精选八篇)在早期WEB开发中, 网页的数据嵌入在页面中, 无论页面打开多少次, 页面内容也不会发生变化, 这种页面称为静态网页。而MVC框架中View视图中的数据来源于数据库, 随着数据库数据的变化, 页面中的数据也会随着发生改变, 称之为动态网页, 现在比较流行的动态网页开发技术由Jsp、Asp和Php。Java的MVC模型就是采用的Jsphttps://www.360wenmi.com/f/cnkey4a7mlx0.html
3.《Web框架技术(Struts2+Hibernate+Spring3)教程(高等学校计算机Web框架技术-教程(第2版)Struts2+Hibernate框架技术教程(第2版)Java程序设计与项目实训教程(第2版)JSP程序设计实训与案例教程Web框架技术-教程Struts2+Hibernate框架技术教程JSP程序设计与项目实训教程Java程序设计与项目实训教程 清华大学出版社有限公司当当自营 http://product.dangdang.com/23257161.html
4.RESTfulWebServicesWeb技术基础:HTTP应用协议、URL命名标准、XML标记语言 Web设计原则(REST):表示性状态转移(Representation State Transfer) ROA:面向资源架构(Resource-Oriented Architecture) RESTful web services:REST式Web服务 HTTP方法(HTTP method):GET 获取、HEAD、PUT 改写、DELETE 删除、POST https://www.jianshu.com/p/271e2902b3fe
5.全景式详解Cosmos技术原理设计框架以及生态全览Web3世界详解 Optimistic Rollups 技术和设计原理。尽管单片链从一定程度上解决了以太坊上的 state boat 问题,比如低交易手续费,以及快速交易等问题,但是却牺牲了安全以及去中心化程度。 区块链已经逐步从单片链演变为模块化区块链,对于这个话题感兴趣的同学,可以看我们之前的文章区块链设计演变之路,详细介绍了不同区块链的https://www.web3sj.com/project/1279/
6.轻量级JavaWeb框架技术选型OSCHINA轻量级 Java Web 框架技术选型 本文是《轻量级 Java Web 框架架构设计》的系列博文。 前面已对该 Java Web 框架做了一些简要描述,目标就是打造一个轻量级的 Java Web 开发框架。我们不考虑使用 Struct、Spring、Hibernate 以及 MVC 模式,我们只是取其精华、去其糟粕,我们不是要重造轮子,而是要改造轮子,努力打造https://my.oschina.net/huangyong/blog/158546
7.14个最佳的HTML/CSS设计和开发框架7)Web框架——Kube Kube框架也是网页设计过程中的重要组成部分。它是一个自适应和响应式的工具,可用于支持网站设计。它有效的功能和可靠的性能有助于我们快速轻松地创建网站。 官方网站:http://imperavi.com/kube/ 8)CSS框架——Columnal columnal框架是一个有效的CSS网格系统,并有少许的自定义代码。这是一个弹性https://www.51html5.com/a76.html
8.WEB前端设计9篇(全文)关键词:Web2.0,web应用前端,开发框架设计,Java Script插件 Web2.0属于一种全新的传播方式, 它不仅是互联网技术的改进, 而且强调公开个人的真实表达和共同建设互联网的开发理念, 其应用过程中的网站数据允许用户随意上传和下载, 信息共享程度高;每个用户在网站系统中都拥有独属于个人的数据, 通过直接的浏览器既可以实现https://www.99xueshu.com/w/ikeymo06qzaw.html
9.常用的Web扩展开发框架组件化开发:Plasmo 采用组件化开发方式,允许开发者将复杂的 Web 应用拆分成一系列独立的、可复用的组件。这种组件化的设计有助于简化开发过程,提高代码的可维护性和可重用性。 支持多种前端框架:Plasmo 框架支持多种主流前端框架,如 React、Svelte 和 Vue,开发者可以根据自己的技术栈和喜好选择适合的框架进行开发,提https://www.51cto.com/article/783359.html
10.Web技术1498新一代基于 Web Components 的跨框架UI组件库 Quark ,输出标准的 Custom Element,组件可以同时在 React、Vue、Preact、Angular 或原生 JS 等任意框架或无框架中使用。 Quark Design 是什么? Quark(夸克) Design 是由哈啰平台 UED 和增长 & 电商前端团队联合打造的一套面向移动端的跨框架 UI 组件库。与业界第三https://cloud.tencent.com/developer/article/2164480