Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用一个实例项目重新认识分布式系统

用一个实例项目重新认识分布式系统

作者头像
智慧zhuhuix
发布于 2020-09-07 07:13:10
发布于 2020-09-07 07:13:10
6800
举报

目录

  • 前言
  • 背景
  • 单机系统的弊病
  • 尝试分布式改造
  • 为什么要分布式
  • 分布式系统特性
  • 分布式系统的最大问题
  • 写在最后

前言

对于分布式系统的理解不能光停留在理论上,本文旨在通过一个实际的案例来阐述分布式系统框架的基本概念,起到抛砖引玉的效果。

背景

  • 第一次提到分布式系统,应该还是十几年前,当时的互联网还没有这么火热,相关的技术也没有如今这样成熟。
  • 那是一个涉及银行安全系统的集成项目,项目的需求主要是对企业用户的票据加密与支付核验服务,项目的难点在于:1、安全服务系统做为一个独立的子系统 ,需要跟银行现有支付后台业务系统进行完美对接;2、系统集成后整个业务处理过程不会影响原有业务系统的性能。
  • 当时的系统架构是这样的:

单机系统的弊病

  • 我们暂且不说银行业务系统后台那庞大的小型机集群,只看项目集成的这套系统:这是一个典型的单机系统架构,该系统只做为一个中间系统嵌入原有银行系统框架中,系统使用C语言编程,与客户端及接口通信均采用底层Socket通信。

  1. 客户端组织报文将信息提交给支付密码系统;
  2. 支付密码系统进行密码核验,得出核验结果,并将核验日志保存到数据库中,保存完成后将核验结果与用户报文转交给银行业务接口;
  3. 银行业务接口进行校验,若核验结果错误,则返回客户端核验错误信息;若核验成功,则交由后台系统继续业务处理过程。
  4. 银行业务后台系统处理完毕,返回最终结果。
  • 由于前期业务逻辑设计的不合理,支付密码系统被错误地架在了客户端与银行支付后台业务的中间;没有管理功能,后台管理只能通过配置文件进行。
  • 另外单机版的系统架构,远远达不到高可靠高性能的要求,系统一旦宕机,银行系统企业票据远程支付业务就处于瘫痪状态。
  1. 应用服务与数据库未分离,导致单机负载高;
  2. 应用服务只能单机多进程运算不支持并发,更没有负载均衡处理,导致业务堵塞。
  3. 交易业务存储依赖于关系型数据库,且没有缓存处理技术,数据库读写压力大。
  4. 底层通讯以BIO方式进行,通讯效率低下。
  5. 日志处理不支持异步处理模式,抢占系统资源。
  6. ...
  • 当然,这个项目还是上线了,付出的代价是把系统的服务器进行了高配的升级,并加入了EMC的存储,通过双机热备的方式来保证系统的高可用性;其次银行在业务端也做了限制,每个银行网点只允许一台终端有权限能处理该业务....

尝试分布式改造

  • 假设一下,如果我们通过现在成熟的中间件及框架对该系统进行分布式改造,应该怎么做?
  • 我觉得应该主要解决以下两个问题:
  1. 业务逻辑的合理性:业务功能分层并梳理出合理的业务逻辑是首要任务,(微服务拆分、中台化管理其实说的也是这个道理)
  2. 引入合适的分布式框架或中间件,解决一切单点的问题:比如分布式RPC框架、异步消息日志系统、负载均衡机制等

为什么要分布式

  • 分布式架构与传统的单机架构最大的区别在于分布式架构能解决两个方向的扩展问题:一是横向扩展,二是纵向扩展;
  1. 横向扩展:主要解决的是容量的扩展问题,不管单台服务器的性能多高,支撑的能力总是有上限的,所以我们在架构上必须能做到支持横向扩容,即理论上随着请求的无限增长,系统的容量也是具备无限增长的能力。比如:上述案例中交易系统的RPC接口与管理系统中的API接口都具备容量横向扩展的能力。
  2. 纵向扩展:主要解决的是业务的扩展问题。当业务扩展时,业务逻辑的复杂度也会不断上升,所以在架构上需要根据功能定义进行纵向层次的划分,且该功能层次划分能符合业务快速迭代的要求。比如:上述案例中将系统功能纵向划分为3次层次,RPC接口定义为与银行交易系统交互的业务功能层次,API接口定义为与外部查询与审计系统交互的业务功能层次,管理应用定义为后台管理功能层次。
  • 用一句话来概括:分布式系统目的就是能利用更多的机器,处理更多的业务与数据。

分布式系统特性

  • 看了上面的案例,我们首先厘清了这样一个概念:分布式系统不是一个专门面对互联网的架构(虽然目前绝多大数的互联网应用系统都是分布式甚至是微服务架构),那分布式架构的主要特性有哪些呢?
  1. 透明性:用户根本不会感知到这是一个分布式系统,对于用户来说从请求到最终业务完成,是一个黑匣子。
  2. 可扩展性:分布式系统具备横向容量扩展、纵向业务扩展的能力。
  3. 高性能:单位时间内处理的任务越多越好,每个任务步骤处理的平均时间越少越好。
  4. 可用性:一般来说,分布式系统是需要长时间甚至7*24小时提供服务的,系统可用性需要达到99.999% 。

分布式系统的最大问题

分布式系统的最大问题,我们必须要深刻理解和牢记一点:分布式系统是不可靠的。 分布式系统中重要的理论和设计都是建立在分布式系统不可靠这一基础上的,因为系统不可靠,所以我们需要增加一些额外的复杂设计和功能,来确保由于分布式系统的不可靠导致系统不可用性的概率降到最低。

分布式系统一般会引入冗余机制,在任务执行序列中不管是主节点还是冗余节点,都需要达到一致的状态。比如:在上述案例中,交易系统调用核验接口,如何保证所有核验的节点的状态一致性需要用到中间件进行解决。

写在最后

  • 前段时间读了许多关于“分布式系统”的书及文章,有基础理论的,有技术发展趋势的,有实际案例解析的...,为了让自己带着思考,真正去了解这个概念,于是动手写了这篇文章。
  • 分布式系统解决问题的思路是早就有的,分布式系统也不仅局限于互联网行业的应用,我们把这个思想掌握了,研究透了,在遇到实际项目时才能从架构师的角度去解决问题。
  • 很多Java程序员在初入学习分布式框架时,往往只对各种中间件进行生搬硬套,但真正掌握好计算机基础知识,如操作系统、计算机网络,对学习分布式系统是大有益处的。
  • 参考资料 《大型网站系统与Java中间件实践》 《大型网站技术架构演示与性能优化》 《架构解密:从分布式到微服务》 《淘宝技术这十年》 《什么是分布式系统,如何学习分布式系统》
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
易鲸捷分布式数据库支撑银行核心交易系统带来的启示
金融核心系统,尤其是银行核心交易系统对数据库的要求极为严苛,一直都是国产数据库想要攻克的难关,是检验国产数据库能否挑起大梁的标志。
用户6543014
2023/03/02
3060
易鲸捷分布式数据库支撑银行核心交易系统带来的启示
移动互联网没有让传统银行业失去自信
在互联网公司把移动支付做到妇孺皆知的时候,传统银行业也再一次显示出了十分的自信与活力。而在此之前,它们的创新能力曾受到了质疑。
IT创事记
2022/06/24
4860
移动互联网没有让传统银行业失去自信
分布式理论与分布式事务
CAP理论又称为布鲁尔定理, 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
leobhao
2022/06/28
6200
分布式理论与分布式事务
华锐技术何志东:证券核心交易系统分布式改造将迎来规模化落地阶段
近年来,数字化转型成为证券业发展的下一战略高地,根据 2021 年证券业协会专项调查结果显示,71% 的券商将数字化转型列为公司战略任务。
PingCAP
2023/10/30
4380
读《新一代银行IT架构》有感
在规划整体架构之前,我们首先需了解业务,然后据此明确架构目标及科技发展战略。互联网银行在建设之初,就与传统银行存在诸多不同之处(如下表所示)。
用户5548425
2019/08/14
3.7K0
读《新一代银行IT架构》有感
Java工程师必须学习分布式架构技术吗?
在回答这个问题之前,首先我们要明白,为什么会出现分布式架构技术?要了解这个问题的话我们需要往前回溯,从主流互联网系统发展的历程来看,我们可以看到在不同阶段,流行的系统架构其实是不一样的。比如一开始的单体应用把所有东西都部署在一起就可以满足业务需求,然后随着业务规模的发展,用户量和访问量逐步增加,这时系统会不断面临性能压力和存储压力,具体体现就是:
用户7353950
2022/06/23
3000
Java工程师必须学习分布式架构技术吗?
工作多年,如何从 CRUD Boy 转型为分布式系统架构师?解锁分布式系统的艺术:从零开始理解分布式系统架构与设计原理!
65 哥已经工作5年了,一直做着简单重复的编程工作,活活熬成了一个只会 CRUD 的打工 boy。
码哥字节
2024/03/27
2370
工作多年,如何从 CRUD  Boy 转型为分布式系统架构师?解锁分布式系统的艺术:从零开始理解分布式系统架构与设计原理!
微服务与分布式系统设计看这篇就够了!
后台分布式架构形形色色,特别是微服务和云原生的兴起,诞生了一批批经典的分布式架构,然而在公司内部,或者其他大型互联网企业,都是抛出自己的架构,从接入层,逻辑层,数据层都各有特点,但这些系统设计中到底是出于何种考量,有没有一些参考的脉络呢,本文将从云原生和微服务,有状态服务,无状态服务以及分布式系统等维度探讨这些脉络。
腾讯云开发者
2024/10/22
3.9K0
微服务与分布式系统设计看这篇就够了!
张升:农业银行的分布式架构应用实践与展望
近年来,以阿里为代表的互联网企业提出的“去IOE”,在业界引起了广泛的讨论。“去IOE”直接含义是不使用传统IT巨头的产品,这些厂商产品虽然好,但基本处于市场垄断地位,用户议价能力较弱,成本高昂,技术受制于人,供应链风险较大。“去IOE”更深层次的含义是采用分布式的架构替代集中式的架构,构建高可用、易扩展、低成本的分布式架构。 随着国家安全可控政策的实施,移动互联网的兴起,业务量的迅速提升,以及利率市场化所带来的成本约束日益显现,银行业信息系统采用分布式架构是大势所趋。近年来,农业银行在分布式架构方面进行了
CSDN技术头条
2018/02/09
1.1K0
张升:农业银行的分布式架构应用实践与展望
分布式数据库系统环境的“无感”升级
本文聚焦于杭州银行在数字化转型背景下,通过高可用机制实现关键业务系统“无感”升级的探索实践。随着金融行业加速线上化和移动化转型,业务系统的连续性要求显著提升,传统的数据库变更方式已无法满足新时期的需求。杭州银行基于 TiDB 分布式架构设计的新一代关键业务系统,通过节点冗余、数据副本、故障转移和负载均衡等机制,实现了系统的高可靠性与可维护性。
PingCAP
2024/09/05
1580
分布式系统是什么
分布式系统奠基者 Leslie Lamport [1] 在其最重要的论文之一 ”Time, Clocks, and the Ordering of Events in a Distributed System“ [2] 中提到:
木鸟杂记
2021/10/14
1.9K0
分布式系统与消息的投递
消息是一个非常有趣的概念,它是由来源发出一个离散的通信单元,被发送给一个或者一群接受者,无论是单体服务还是分布式系统中都有消息的概念,只是这两种系统中传输消息的通道方法或者通道不同;单体服务中的消息往往可以通过 IO、进程间通信、方法调用的方式进行通信,而分布式系统中的远程调用就需要通过网络,使用 UDP 或者 TCP 等协议进行传输。
哲洛不闹
2018/09/14
1.5K0
分布式系统与消息的投递
【分布式系统设计】:漫谈幂等
因为笔者对分布式系统有着狂热的兴趣,因此开了【分布式系统设计】这一专题,不仅可以分享学习成果,帮助大家面试,根据费曼方法,还能在写文章的过程过发现自己认识的不足。
TechFlow-承志
2020/03/05
6270
【分布式系统设计】:漫谈幂等
分布式概念-分布式系统是什么?
故事从一次内部分享开始,我们每周组织组内分享,会分享一些技术,中间件,研发流程规范或者业务系统架构等内容,在进行了一系列中间件技术分享之后,会发现其中提及一系列通用的概念,这些是分布式系统所共有的,所以我们简单聊聊分布式概念。
春哥大魔王
2020/02/19
6.3K0
分布式概念-分布式系统是什么?
阿里P7架构师总结分布式系统的经典基础理论
首先,分布式系统的首要目标是提升系统的整体性能和吞吐量。如果最终设计出来的分布式系统占用了10台机器才勉强达到单机系统的两倍性能,那么这个分布式系统还有存在的价值吗?另外,及时采用了分布式架构,也仍然需要尽力提升单机上的程序性能,是的整体性能达到最高。所以,我们忍让需要掌握高薪更难单机程序的设计何编程技巧,例如多线程并发编程、多进程高性能IPC通信、高性能的网络框架等。
美的让人心动
2018/05/21
1.5K0
Java微服务系统分布式事务解决方案
可容忍一段时间的数据不一致,最终通过超时终止,调度补偿等方式,实现数据的最终状态一致性。
JavaEdge
2022/11/30
5960
Java微服务系统分布式事务解决方案
阿里P7架构师总结分布式系统的经典基础理论
分布式系统从诞生发展到现在已经走过十几个年头了,其中伴随着一些很重要的基础理论,正式这些影响深渊的基础理论,奠定了分布式系统的见识基础,造就了分布式领域的一座座宏伟大厦。为了练就一身武功,让我们从这些
Java架构
2018/06/20
4070
分布式架构之美
一、前言 我们都知道,当今无论在BAT这样的大公司,还是各种各样的小公司,甚至是传统行业刚转互联网的企业都开始使用分布式架构,那么什么叫分布式架构呢?分布式架构有什么好处呢?分布式架构经过了怎样的发展呢?是哪家企业开启了分布式架构的时代呢?读完本文,你就会得到这些答案,下面让我们一起来开启分布式概述的奇妙之旅吧! 二、分布式架构的发展历史 1946年2.14日,那是一个浪漫的情人节 , 世界上第一台电子数字计算机在美国宾夕法尼亚大学诞生了,她的名字叫ENIAC。这台计算机占地170平米、重达 30 吨,每
纯洁的微笑
2018/07/20
7650
分布式架构那些事儿
首先我们要了解什么叫分布式架构。简单来说,就是把一个系统拆成多个子系统,在不同地理位置部署,相互协作完成任务。现在云计算、5G这些大热的技术都离不开它。其实生活中也有很多类似的例子,比如外卖小哥手里的送餐工具:订单被拆分到各个区域的小哥,他们快速找到顾客送到手里。这样我们才能足不出户吃遍美食!
35岁程序员那些事
2023/08/18
4410
分布式架构那些事儿
趋势解读 | 分布式架构是数据中心的未来吗?
[ 亿欧导读 ]本文分析了传统集中式数据中心和分布式架构数据中心的主要区别,探索了未来数据中心架构发展的趋势。
Java_老男孩
2019/12/03
2K0
推荐阅读
相关推荐
易鲸捷分布式数据库支撑银行核心交易系统带来的启示
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档