百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

【分布式技术专题】「架构实践之谈」深入剖析常用分布式技术难题

ccwgpt 2024-10-31 12:32 33 浏览 0 评论

分布式架构

互联?架构演进

单体应?架构

定义

?个归档包(例如war格式)包含所有功能的应?程序,我们通常称为单体应?。?架构单体应?的? 法论,就是单体应?架构。

架构示意图

优缺点分析

  • 初期:架构简单,统一化管理真个服务和生态体系开发、测试、部署都很?便
  • 随着项?的发展,项?越来越臃肿,问题出现了:复杂性?只有逻辑性的模块化,物理不隔离,随着代码的增?也越来越混乱、复杂。?个百万?级别的单体应?为例,整个项?包含的模块?常多,模块的边界模糊,依赖关系不清晰,代码质量参差不?,混乱地堆砌在?起……整个项??常复杂。每次修改代码都?惊胆战,甚?添加?个简单的功能,或者修改?个BUG都会带来隐含的缺陷。技术债务时间推移、需求变更和?员更迭,会逐渐形成应?程序的技术债务,并且越积越多。“不坏不修(Not broken,don’t fix)”,这在软件开发中?常常?,在单体应?中这种思想更甚。已使?的系统设计或代码难以被修改,因为应?程序中的其他模块可能会以意料之外的?式使?它。部署频率低随着代码的增多,构建和部署的时间也会增加。?在单体应?中,每次功能的变更或缺陷的修复都会导致我们要重新部署整个应?。全量部署的?式耗时?、影响范围?、?险?,这使得单体应?项?上线部署的频率较低。?部署频率低?导致两次发布之间会有?量的功能变更和缺陷修复,出错概率?较?。

可靠性较差,影响范围大

极端场景下,某个BUG,例如死循环、OOM等,可能会导致整个应?的崩溃。

扩展能?受限

单体应?只能作为?个整体进?扩展,?法根据业务模块的需要进?伸缩。

  • 模块是计算密集型的,它需要强劲的CPU;
  • 模块则是IO密集型的,需要更?的内存。

由于这些模块部署在?起,我们不得不在硬件的选择上做出妥协。

阻碍技术创新

单体应?往往使?统?的技术平台或?案解决所有的问题,团队中的每个成员都必须使?相同的开发语?和框架,要想引?新框架或新技术平台会?常困难。例如,?个使?Struts 2构建的、有100万?代码的单体应?,如果想要换?Spring MVC,毫?疑问切换的成本是?常?的。

微服务架构

诞?背景

  1. 互联?的迅速发展 => 敏捷
  2. 快速验证、快速试错 => 持续交付
  3. 更频繁的部署频率 => 要?动化,DevOps
  4. 单体架构?法满?要求

微服务是什么

微服务架构?格是?种将?个单?应?程序开发为?组?型服务的?法,每个服务运?在??的进程中,服务间通信采?轻量级通信机制(通常?HTTP资源API)。这些服务围绕业务能?构建并且可通过全?动部署机制独?部署。这些服务共??个最?型的集中式的管理,服务可?不同的语?开发,使?不同的数据存储技术。

TPS分布式架构

Martin Fowler《微服务》博客原?:http://www.martinfowler.com/articles/microservices.html,译 ?:http://blog.cuicc.com/blog/2015/07/22/microservices/

微服务优缺点

优点:

  • 单个服务更易于开发、维护
  • 单个微服务启动较快
  • 局部修改容易部署
  • 技术栈不受限
  • 按需伸缩

缺点:

  • 运维要求?
  • 分布式固有的复杂性
  • ?络延迟、容错、分布式事务…
  • 重复劳动

微服务 vs SOA

微服务设计原则

  • 单?职责原则 SOLID
  • 服务?治原则
  • 轻量级通信机制
  • 合理的微服务粒度
  • ?动化机制:?动化测试、部署、运维,?切。

调?关系设计原则

  • 尽量缩短链路
  • 避免循环依赖

微服务架构通览

服务发现原理+负载均衡原理剖析

最初的模式

单体应用集中式部署

多个应用集中式部署(集群式)

多应用分布式部署(分布式)

多应用分布式部署+TDDL分布式代理数据

微服务拆分?方案

领域驱动设计(DDD)

  • 领域模型:为了准确定义需要解决的问题?构造的抽象模型。
  • 领域语? - 定义领域模型时,?定要基于某个特定场景,建??个?歧义的交流语?。例如UML
  • 界限上下? - 限定某个特定边界的上下?。对于相同的模型??,在不同的场景强调的场景是不太?样的。例如:对于订单??,从?户的视?分析,?户关?的是订单的价格、快递到的时间;从库存的?度分析,库存更关注订单的库存的告警等等。

?向对象

  • by name:对象模型
  • by verb:对象?为。

微服务拆分最佳实践

初期使??向对象/DDD建模后拆分即可,不要过分纠结微服务粒度,也不宜拆分得过细(防?出现很多不合理的拆分粒度),满?当前要求即可。当随着业务的发展,业务场景需要我们进?步细化拆分的粒度再去细化拆分或改造。

项?改造成微服务

改造前须知

  1. 改造不是?蹴?就的,往往很??段时间内,新?架构是共存的

改造原则

  1. 初期只做必要的微服务治理
  • 缩?改造范围,?范围试?
  1. 降低对已有系统的侵?性
  • 尽量减少对现有系统的改动,降低?险,保证可?性初期挑选相对独?、耦合性较?的上层应?进?改造,积累经验经验丰富后,再进??规模的改造

新?架构共存

  1. 只能?点?点改造,并逐步将遗留项?迁移?微服务架构。

老应用依赖新应用

调用模式

新应用依赖老应用

?服务暴露基于HTTP的API,新?服务之间通过Spring Cloud Sidecar进?通信,Sidecar原理解析。

代码改造方式

绞杀者模式

  • 对于遗留系统Legacy
  • 不改动?系统Legacy,?是另起微服务Modern,实现对Legacy的改造
  • 外层创建?个??,做接?的转发,对于已经改造完的API,转发到Modern,对于未改造的API,
  • 依然转发到Legacy使??关配置转发规则
  • 随着迁移的不断深?,最终绞杀掉Legacy

修缮者模式

  • 识别出应?要拆的部分(Flawed Supplier)
  • 为(Flawed Supplier)抽象接?层(Abstraction Layer),从?隔离(Flawed Supplier)内部发
  • ?的变化
  • “客户端”通过接?层(Abstraction Layer)调?(Flawed Supplier)
  • 为要拆的部分(Flawed Supplier)编写新的实现(New Supplier)
  • “客户端”通过接?层调?新的实现(New Supplier)
  • 删除Flawed Supplier

数据库层?的改造

  • 废弃掉掉触发器、存储过程
  • ?掉跨模块的join,使?API调?的?式实现原有功能
  • 将API按照模块拆出去
  • 将相关的表拆到对应的微服务种
  • 业务改造期间,通过双写?式
  • 切少量流量到新库,进?测试与验证
  • 流量全切到新库
  • 逐步退化?库,直?废弃
  • 迁移失败预案

相关推荐

滨州维修服务部“一区一策”强服务

今年以来,胜利油田地面工程维修中心滨州维修服务部探索实施“一区一策”服务模式,持续拓展新技术应用场景,以优质的服务、先进的技术,助力解决管理区各类维修难题。服务部坚持问题导向,常态化对服务范围内的13...

谷歌A2A协议和MCP协议有什么区别?A2A和MCP的差异是什么?

在人工智能的快速发展中,如何实现AI模型与外部系统的高效协作成为关键问题。谷歌主导的A2A协议(Agent-to-AgentProtocol)和Anthropic公司提出的MCP协议(ModelC...

谷歌大脑用架构搜索发现更好的特征金字塔结构,超越Mask-RCNN等

【新智元导读】谷歌大脑的研究人员发表最新成果,他们采用神经结构搜索发现了一种新的特征金字塔结构NAS-FPN,可实现比MaskR-CNN、FPN、SSD更快更好的目标检测。目前用于目标检测的最先...

一文彻底搞懂谷歌的Agent2Agent(A2A)协议

前段时间,相信大家都被谷歌发布的Agent2Agent开源协议刷屏了,简称A2A。谷歌官方也表示,A2A是在MCP之后的补充,也就是MCP可以强化大模型/Agent的能力,但每个大模型/Agent互为...

谷歌提出创新神经记忆架构,突破Transformer长上下文限制

让AI模型拥有人类的记忆能力一直是学界关注的重要课题。传统的深度学习模型虽然在许多任务上取得了显著成效,但在处理需要长期记忆的任务时往往力不从心。就像人类可以轻松记住数天前看过的文章重点,但目前的...

不懂设计?AI助力,人人都能成为UI设计师!

最近公司UI资源十分紧张,急需要通过AI来解决UI人员不足问题,我在网上发现了几款AI应用非常适合用来进行UI设计。以下是一些目前非常流行且功能强大的工具,它们能够提高UI设计效率,并帮助设计师创造出...

速来!手把手教你用AI完成UI界面设计

晨星技术说晨星技术小课堂第二季谭同学-联想晨星用户体验设计师-【晨星小课堂】讲师通过简单、清晰的语言描述就能够用几十秒自动生成一组可编辑的UI界面,AIGC对于UI设计师而言已经逐步发展成了帮助我们...

「分享」一端录制,多端使用的便捷 UI 自动化测试工具,开源

一、项目介绍Recorder是一款UI录制和回归测试工具,用于录制浏览器页面UI的操作。通过UIRecorder的录制功能,可以在自测的同时,完成测试过程的录制,生成JavaScr...

APP自动化测试系列之Appium介绍及运行原理

在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。Appium介绍Appium概念Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序...

【推荐】一个基于 SpringBoot 框架开发的 OA 办公自动化系统

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍oasys是一个基于springboot框架开发的OA办公自动化系统,旨在提高组织的日常运作和管理...

自动化实践之:从UI到接口,Playwright给你全包了!

作者:京东保险宋阳1背景在车险系统中,对接保司的数量众多。每当系统有新功能迭代后,基本上各个保司的报价流程都需要进行回归测试。由于保司数量多,回归测试的场景也会变得重复而繁琐,给测试团队带来了巨大的...

销帮帮CRM移动端UI自动化测试实践:Playwright的落地与应用

实施背景销帮帮自2015年成立以来,移动端UI自动化测试的落地举步维艰,移动端的UI自动化测试一直以来都未取得良好的落地。然而移动互联网时代,怎样落地移动端的UI自动化测试以快速稳定进行移动端的端到端...

编写自动化框架不知道该如何记录日志吗?3个方法打包呈现给你。

目录结构1.loguru介绍1.1什么是日志?程序运行过程中,难免会遇到各种报错。如果这种报错是在本地发现的,你还可以进行debug。但是如果程序已经上线了,你就不能使用debug方式了...

聊聊Python自动化脚本部署服务器全流程(详细)

来源:AirPython作者:星安果1.前言大家好,我是安果!日常编写的Python自动化程序,如果在本地运行稳定后,就可以考虑将它部署到服务器,结合定时任务完全解放双手但是,由于自动化程序与平...

「干货分享」推荐5个可以让你事半功倍的Python自动化脚本

作者:俊欣来源:关于数据分析与可视化相信大家都听说自动化流水线、自动化办公等专业术语,在尽量少的人工干预的情况下,机器就可以根据固定的程序指令来完成任务,大大提高了工作效率。今天小编来为大家介绍几个P...

取消回复欢迎 发表评论: