侵入式服务治理方案,读这一篇就够(1)

简介: 侵入式服务治理方案,读这一篇就够(1)

尽管在程序执行效率上,Java不如C、C++,在开发效率、易用性以及学习难度上,Java又不如Ruby、Python、Go,但Java无疑是当今后端系统开发中使用最为广泛的语言。


Java所累积的大量生态体系是其他任何开发语言都不具备的。基于Java开发的“杀手级”应用数不胜数,互联网后端的很多复杂系统也都是用Java开发的。因此,如何治理基于Java开发的分布式应用系统,是互联网公司面对的首要问题。


侵入式服务治理方案指的是,在应用端使用框架提供的API开发程序并提供服务治理方案。Java提供了很多一站式服务化框架,可以有效地与应用系统深度配合,形成完善的服务治理体系。由阿里巴巴公司开源的Dubbo,以及由Pivotal公司开源的SpringCloud是业界采用最多的侵入式服务治理方案。


Dubbo是阿里巴巴公司于2012年前后开源的分布式服务框架。从开源至今,它由于设计理念超前、性能出色、稳定性较强而累积了大量国内忠实用户。虽然中间有几年停止了更新,但现在Dubbo又重新开启被维护,这使得它又焕发了新的活力。


在远程通信一章中,我们已经介绍过Dubbo的RPC部分。严格地说,Dubbo目前并非一款完善的服务治理框架,它更偏重RPC部分。



Dubbo 概述


提起Dubbo,就不得不再次给出Dubbo刚刚开源时发布的架构演进图,如图6-1所示。


微信图片_20220123181419.jpg


图6-1架构演进图


在图6-1中,互联网架构的演进过程分为四个阶段,每个阶段对应一种架构模式,具体如下。


  • 单体应用架构

在系统访问流量不大时,应用所需的所有功能都在开发和部署时被集中在一起。单体应用架构获取数据的主要途径是与数据库进行交互。由于关系型数据库与面向对象的阻抗不匹配,因此,开发出能够简化增删改查工作的数据库访问(ORM)框架是重中之重。


  • 垂直应用架构

在系统访问流量逐渐增大时,像单体式应用架构一样通过服务器硬件加速带来的承载量提升的方式已经无法满足业务需要。因此,需要将应用按照业务线进行垂直拆分,将系统部署为多个相对独立的应用。垂直应用架构获取数据的途径除了系统内部与数据库的交互外,也包括系统间的交互。通过灵活的Web MVC框架提供数据,供前端系统及其他外围系统展示和使用,这是垂直应用架构关注的重点。


  • 分布式服务架构

随着系统访问流量进一步增大,越来越多的垂直应用被拆分出来,独立应用间的共同特征越来越多。因此,我们要将核心业务抽取出来形成独立的后端服务,再对前端进行进一步抽离,使其能够更加快速地响应市场需求。此时,前端与后端的交互以及后端服务之间的交互,若采用基于RESTful API的WebMVC显然并不适合,因此RPC成了获取数据的重要方式。


  • 弹性计算架构

后端服务的增多,使得服务的治理成本越来越高,手动进行服务发现、负载均衡、连接管理、限流保护等工作已经变得不现实,因此提供一个服务治理中心是弹性计算架构的关键所在。另外,越来越多的细小服务的资源评估工作也变得非常烦琐,服务的资源浪费问题也需要重点关注,因此,提供一个调度中心来管理和分配集群容量进而提高集群利用率,是另一个关键所在。


Dubbo所关注的重点在于第三点和第四点的前半部分。对于分布式应用间的RPC交互而言,Dubbo采用透明化的方式,让使用者无须关心方法的调用是本地的还是远程的。Dubbo采用以ZooKeeper为主的注册中心和治理中心来提供服务治理,并未提供调度中心的实现方案。图6-1成型于2012年,当时并没有Docker和Kubernetes这样的产品出现,Dubbo所提出的调度中心管控资源的概念,与Docker和Kubernetes的理念不谋而合,展现出了极具前瞻性的眼光。


图6-2是官方提供的采用Dubbo作为服务化框架的应用架构图,除了调度中心,其他都已开源。


微信图片_20220123181449.jpg


图6-2 采用Dubbo作为服务化框架的应用架构图


Dubbo将服务划分为提供者和消费者,根据需求不同,每个应用都可以既是服务的提供者,又是服务的消费者。应用开发方可以将服务进行合理分层。在图6-2中,服务被划分为前端服务、集成服务以及核心服务三层。其中前端服务是服务的消费者,核心服务是服务的提供者,集成服务对于前端服务而言是提供者,对于核心服务而言则是消费者。







相关文章
|
7月前
|
存储 网络协议 网络虚拟化
交换机工作原理(MAC地址表、VLAN)
交换机是局域网中的核心设备,工作在OSI模型的数据链路层,通过MAC地址表和VLAN技术实现高效的数据帧转发与网络隔离。其基本原理包括根据目的MAC地址智能转发数据帧,利用MAC地址学习、老化机制维护地址表。同时,VLAN(虚拟局域网)技术可将网络划分为多个逻辑子网,提供流量隔离、增强安全性和灵活管理等功能。实际应用中,交换机与VLAN广泛用于企业、学校和数据中心等场景,满足不同用户群体的需求并优化网络性能。
686 8
|
11月前
|
人工智能 运维 安全
AI 驱动,全面升级!操作系统服务套件体验评测
作为一名运维工程师,我体验了阿里云的操作系统服务套件,选择了Alibaba Cloud Linux作为测试环境。通过安装SysOM和OS Copilot组件,轻松管理集群健康数据、进行系统诊断并获得优化建议。OS Copilot智能解答技术问题,节省查阅资料时间;订阅管理帮助我及时升级操作系统,保障安全。整体功能强大,提升了约20%的工作效率,值得推广。建议增加更多系统版本支持及自动优化功能。
|
12月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
384 6
|
11月前
|
自然语言处理 数据处理 索引
mindspeed-llm源码解析(一)preprocess_data
mindspeed-llm是昇腾模型套件代码仓,原来叫"modelLink"。这篇文章带大家阅读一下数据处理脚本preprocess_data.py(基于1.0.0分支),数据处理是模型训练的第一步,经常会用到。
360 0
|
前端开发
CSS3:hover&demo
本文介绍了CSS中`hover`伪类的基本用法,包括改变元素自身样式、影响子元素及相邻或后续兄弟元素样式的技巧。同时,还探讨了`:before`和`:after`伪元素的使用方法,以及如何通过CSS实现边框流动效果、创建登录页面、设计轮盘游戏界面和平滑处理文本溢出等实用案例。每个示例都配有代码块,便于理解和实践。
324 4
|
XML 前端开发 Java
深入理解SpringMVC工作原理,像大牛一样手写SpringMVC框架
对于SpringMVC相信诸位并不陌生,这是Java开发过程中使用最频繁的框架,在你的项目中可能不一定用MyBatis,但绝对会使用SpringMVC,因为操作数据库还有Hibernate、JPA等其他ORM框架选择,但SpringMVC这个框架在其领域中,可谓是独领风骚
418 2
六自由度Stewart平台的matlab模拟与仿真
**摘要** 探索MATLAB2022a模拟6-DOF Stewart平台,模拟动态变化及伺服角度。平台实现XYZ平移及绕XYZ轴旋转。结构含中心动平台、固定基座及6个伺服驱动的伸缩连杆。运动学原理涉及球铰/虎克铰的转动自由度。通过动力学分析解决输入力矩到平台加速度的转换。核心算法与模型揭示了平台的精密定位能力。仿真结果显示动态性能。
|
前端开发 JavaScript Java
前端和Java验签以太坊钱包签名实现中心化登录
前端和Java验签以太坊钱包签名实现中心化登录
1261 8
|
前端开发 JavaScript 测试技术
理解回调函数
理解回调函数
732 0