首页 首页

可扩展性: 系统应具有随着业务增长而扩展的能力,处理更高的交易量和更多用户。

简介

在设计企业系统时,可扩展性是一个至关重要的考虑因素。可扩展性是指系统随着业务增长而扩展的能力,处理更高的交易量和更多用户。忽略可扩展性可能会导致严重的性能问题和业务中断,最终损害企业声誉和客户满意度。

可扩展性设计原则

为了确保系统的可扩展性,可以通过遵循以下原则:

  1. 模块化设计:系统应被分解成独立且松散耦合的模块。这使得可以轻松添加、替换或删除组件,而不会影响系统的其余部分。
  2. 水平扩展:系统应设计为能够通过添加更多服务器来水平扩展。这比升级现有的服务器更具成本效益和灵):将静态内容(如图像和视频)存储在全球各地的服务器上,以提高内容交付速度。
  3. 可扩展性测试和监控

    为了确保系统的可扩展性,至关重要的是进行严格的测试和监控:

    • 负载测试:模拟高流量条件以评估系统的性能和容量。
    • 压力测试:模拟极端负载条件,以确定系统的极限。
    • 性能监控:使用工具和指标持续监控系统的性能,以识别潜在瓶颈。

    结论

    可扩展性是企业系统设计中的一项关键原则。通过遵循可扩展性设计原则、采用可扩展性技术并进行严格的测试和监控,企业可以确保其系统能够适应业务增长并提供高水平的性能和可靠性。

可扩展性系统应具有随着业务增长而扩展的能力

五大赛道、八位专家,银行局中人眼里的AI江湖

谁说大象不能跳舞?

2020于全体银行而言,是一场无预告的终极考验,一轮最直观的金融 科技 对决。 疫情让网点流量骤降到接近于0,全方位挑战银行线上服务水平,检验那些连年增加的 科技 投入,有多少真正变作数字化、智能化的一点一滴。

踏进2021,银行们迎来周密复盘、整装待发的最好时间节点。

在过去这一年,银行更努力地摆脱大象转身的刻板印象,告别以往被各路创新推着走的窘况,试图在金融 科技 和数字新基建的浪潮里承担更主动、开放的角色,以轻快敏捷的步伐持续向前。

没有一家银行不想拥抱AI,没有人愿意错过数智化转型的未来。 在梳理数十家银行AI全布局,以及 「银行业AI生态云峰会」 多位嘉宾的分享过程中,我们逐渐发现银行业AI的那些挑战和困境,那些艰险之处同样是机遇所在。

数据安全与隐私保护

银行业AI,首先被AI本身正面临的数据困境,和日渐收紧的数据监管尺度拦住。

在技术维度不断向前奋进的同时,银行必然要思考的一个议题是:业务创新与隐私保护如何兼顾?

雷锋网AI金融评论主办的 《联邦学习系列公开课》 曾对这一问题展开过系统深入的探讨。 第一节课上, 微众银行首席人工智能官杨强 就直接点明:“人工智能的力量来自于大数据,但在实际运用过程中碰到更多的都是小数据。 ”

平安 科技 副总工程师王健宗 也在课上指出,“传统的AI技术必须从海量的数据中学习或者挖掘一些相关的特征,利用数学理论,去拟合一个数学模型,找到输入和输出的对应关系,比如深度学习中训练网络的权重和偏置,模型效果与数据量级、质量、以及数据的真实性等有着密切的关系。”

一个典型例子就是银行信贷风控:现在大部分AI应用都由数据驱动,信贷风控更需要大量数据训练,但大额贷款风控的案例又非常少。 “要是来做深度学习模型,只用少量这种大额贷款的样本远远不够。 ”杨强解释。

小数据需要“聚沙成塔”,同时又面临侵犯隐私的可能。 为此,网络安全与数据合规领域的立法进入了快车道,滥用数据和爬虫也受到过严厉整治。

虽然目前《数据安全法》还只是处于草案的状态,但是草案明确提出要关注数据本身的使用,需要在保护公民组织、相关权益的前提下,促进数据为关键要素的经济发展。

数据被称作是新时代的油田,但银行该怎样通过AI摸索出更高效、更合规的开采工具?

在「银行业AI生态云峰会」第一场演讲中, 微众银行区块链安全科学家严强博士 就对银行必备的数据安全与隐私保护思维,进行了深入讨论。他指出:

在数字经济时代下,银行业AI发展 必须要尊重“数据孤岛”作为数据产业的原生态,隐私保护技术则是打破数据价值融合“零和博弈”的关键,需要打通隐私数据协同生产的“双循环”。

而 区块链 是承载数据信任和价值的最佳技术,对于隐私计算和AI应用中常见的数据品质等难题,都可以通过区块链进行互补或提升效果。

联邦学习、TEE可信计算、安全多方计算等多个AI技术路线也正尝试落地于银行的核心业务场景。

AI金融评论了解到,除了微众银行, 江苏银行 2020年也已开展联邦学习方向的 探索 ,他们与腾讯安全团队合作,基于联邦学习技术对智能化信用卡经营进行联合开发和方案部署,在联邦学习技术支持下进行金融风控模型训练。

银行数据库

以“数据”为线,银行前中后台的升级轨迹清晰可见。

如果说前些年的银行 科技 ,讨论度更集中在前台智能化应用,那么如今中后台建设开始更多地来到聚光灯下,讨论它们为银行数字化转型呈现的价值和意义。

这当中的一个重要模块,就是 银行数据库 的改造升级。

我们曾经报道,Oracle自进入中国市场以来,在银行数据库市场,一直具有压倒性优势,也是许多银行的采购首选。

由于长期使用Oracle,不少银行形成较严重的路径依赖。 平安银行分布式数据库技术负责人李中原也曾向AI金融评论表示,系统迁移和重新建设需要大量成本,从单机变为多机群体,故障发生的故障发生的概率和维护成本都会加大,对整体系统运维将是巨大挑战。 (详见 《银行业“求变”之日,国产数据库“破局”之时》 )

而云计算的出现,让Oracle在数据库市场接近垄断的地位有所动摇,各大互联网云厂商杀入战场。

腾讯云副总裁李纲就表示,云化数据库胜在成本低、易扩容两大特点,任意一台X86的PC服务器就可以运行,理论上也有着无限的横向扩展能力,这都是Oracle等传统数据库难以企及的优点。

中国数千家银行由此获得更多选择余地,开始从集中式数据库迁移到分布式数据库,一场事关“大机下移”的漫长征途就此展开。

这场变革已有先行者,例如 张家港行 在2019年就将其核心业务系统放在了腾讯云TDSQL数据库上,传统银行首次为核心系统选用国产分布式数据库;2020年,平安银行信用卡的核心系统也完成切换投产,新核心系统同样采用了国产数据库。

以 平安银行 为例,其体量之大,意味着应用改造更具挑战性。 张文解释道,为了配合此次改造,应用引入了微服务架构对应用进行了拆分和解耦。 对账号的分布进行了单元化划分,以DSU为一个逻辑单元,单个DSU包含200万个客户信息,单个DSU同时处理联机和账务两种业务。

但国产分布式数据库也同样还在成长当中,张文也指出了目前金融级分布式数据库面临一系列挑战点,除了有可伸缩、可扩展的能力,更要解决高可用性、数据强一致性,同时 探索 更具性价比的性能成本,以及为金融机构打造更易上手的、更产品化的成熟解决方案。

中台建设

“中台建设”这个热门关键词,不再是互联网公司的专属。 银行也不例外,甚至更需要中台。

银行这样的大型机构,架构极其复杂,还有跨部门多团队的协作,海量数据日积月累之下如同年久失修的危楼,更需要及时、持续的治理。

在看来,银行拥有大量的数据、技术和人才,资源却往往“各行其是”,部门之间没有配合意识、独立造烟囱;技术流于表面,无法链接、深入,这造成了银行资源的大量浪费。

中台 的体系化建设和顺利运转,才能将这庞大体系中的“死结”一一梳开。

建设银行 监事长王永庆就曾指出:中台建设是商业银行数字化经营转型的关键环节,认为商业银行数字化转型的必然归宿是生态化、场景化。

尽管商业银行在多年经营过程中沉淀了一定的竞争优势,形成了各具特色的内部生态系统,但目前仍是封闭的、高冷的,还无法满足数字经济对开放式生态化经营可交互、高黏性、有体感、无边界的要求。

因此,建行也已在数据中台先行一步,其落地上概括为5U(U是统一的意思),包括统一的模型管理、统一的数据服务、统一的数据视图,统一的数据规范以及统一的数据管理。

为求轻松支撑亿级用户,实现高时效、高并发场景化经营, 招商银行 近两年也在中台和技术生态体系的建设上持续发力。 去年年底发布的招商银行App 9.0,迭代需求点超过1800项,“10+N”数字化中台建设就占据了相当的比重。

如何构建金融机构需要的数据中台?

在「银行业AI生态云峰会」上, 360数科首席科学家张家兴 就用“三通三快”概括了数据中台的标准:

金融机构面对着海量用户、复杂业务,一个优秀的数据中台,必须是达到多业务打通,内外数据互通和用户关系连通,同时还要做到数据的实时处理快、使用快、需求响应快。

他进一步强调,数据与AI融合得非常紧密,如果数据中台和AI中台各自建设,两者之间将不可避免地存在割裂的现象。

基于此,360数科也推出了自己的数据AI融合中台,将最上层数据平台,到中间数据服务支撑的平台服务,再到整个数据资产的管理,到最下面整个数据技术架构的设计都进行调整,并且将自身沉淀的AI能力嵌入其中。

张家兴也在云峰会的演讲上透露,360数科研发了一项联邦学习技术——分割式神经网络,通过神经网络在高维空间,Embedding不可逆的特性,使得不同参与的数据合作方只需要传递Embedding向量,见不到原始数据,但最终可以使模型产生目标效果。

银行信贷智能风控

而在过去一年里,银行信贷风险管理,仍然是最引人关注的方向之一。

关注度一方面来自于,受疫情影响而剧增的贷款逾期和坏账风险,如何借助技术手段“端稳这碗水”,把握好信贷支持尺度,成为银行、消金公司和风控技术服务商们的开年大考。(详见 《信贷战“疫”:一场给风控的开年大考》 )

而另一方面,2020年下半年起,针对金融 科技 或是互联网金融的监管“红线”逐渐清晰。 例如《商业银行互联网贷款管理暂行办法》,其中就明确提出了对商业银行的风险管控要求,和对合作机构的管理规范。

尽管结合AI、大数据的智能风控在银行 科技 应用中不再新鲜,但这并不意味着智能风控已经足够成熟—— 数据资源壁垒、自有数据累积、数据特征提炼、算法模型提升 ,被认为是大数据风控目前所面临四大困境。

某商业银行负责人就曾表示,在模型建设和模型应用过程中普遍存在数据质量问题,包括外部数据的造假(黑产欺诈)和内部数据的滥用等,在模型迭代方面,很多银行只追求迭代的速度和频次,而忽略了最终效果。

前网络金融CRO、融慧金科CEO王劲 进一步指出,数据规范和治理体系不健全,数据质量差且缺失率高,技术能力不足,复合型 科技 人才匮乏等因素都是银行等金融机构无法做好模型的重要原因。

王劲曾在有着“风控黄埔军校”之称的美国运通工作17年,负责过全球各国各类产品相关的700余个模型提供政策制度和独立监控。 在云峰会上,他也结合自身二十余年风控经验,剖析了金融风险管理中的那些理念误区。

“很多人并不是特别理解,风险管理永远是一个寻找平衡点的科学。”王劲认为,风险管理平衡有着这样的核心三问:

他也解析了银行等持牌金融机构做好风险管理平衡的核心要素,谈到风险管理最重要的就是对数据的把控,“金融公司成立之初就要思考数据的生命周期。 首先要从对业务产品和客户的选择当中,决定需要什么样的数据。 ”

数据战略是一个相对长期的落地过程,机构首先要立下数据选择的原则和条件:要考虑的不只是数据的合规性、稳定性和覆盖率,更要考虑数据的新鲜度、时效性和时间跨度。

从模型建设的角度出发,王劲指出,一个卓越的风控模型应当具备辨别力、精准度、稳定性、复杂度和可解释性五大要素,“原材料”数据、模型架构和算法的选择,衍生变量的出现,对模型的监控和迭代,以及对y的定义和样本的筛选,无一不影响模型的“锻造”。

在他看来,银行等金融机构如果能在身份识别和控制、数据安全管理、风险模型管理,和自动化监控体系方面,做到高效完善,将会是非常理想的一种状态。

RPA与内部流程优化

还有一个关键词,在各家银行年报中出现频率越来越高,那就是RPA(机器人流程自动化)。 此前AI金融评论也曾举办 《RPA+AI系列公开课》 ,邀请到五位头部RPA厂商高管分享RPA与金融碰撞出的火花。

RPA的定义,很容易联想到2012年左右的“流程银行”转型潮。 当时的流程银行,意为通过重新构造银行的业务流程、组织流程、管理流程以及文化理念,改造传统的银行模式,形成以流程为核心的全新银行经营管理体系。

如今银行的转型之战,全方位升级为“数字化转型”,内部流程的优化改造在AI和机器人技术的加持下持续推进,RPA也迅速成为银行数字化转型不可缺席的一把“武器”。

达观数据联合创始人纪传俊 在「银行业AI生态云峰会」上指出,RPA+AI为银行带来的价值,最明显的就是减少人工作业、降低人工失误,提升业务流程效率,同时也提高风险的预警和监控能力。

AI金融评论注意到,已有多家国有大行将RPA投产到实际业务中。

以 工商银行 为例,RPA在工行的应用覆盖了前台操作、中台流转和后台支撑等多个业务场景,在同业率先投产企业级机器人流程自动化(RPA)平台并推广应用,全行累计46家总分行机构运用RPA落地实施120个场景。

建设银行 同样也引入了RPA,建立国内首个企业级RPA管理运营平台,敏捷研发业务应用场景 100 个,实现人工环节自动化、风险环节机控化。

农业银行 方面则透露,农行目前还处于技术平台建设阶段,之后将以信用卡业务、财务业务等为试点落地RPA需求。 其实施策略,是建设全行统一的RPA技术平台,面向总分行各部门输出RPA服务。

中国银行 在2017年底,旗下公司中银国际就已有RPA的概念验证,团队成功投产20个机器人,分别在不同岗位执行超过30个涉及不同业务流程的自动化处理工作,也与RPA厂商达观数据展开了合作。

纪传俊也在云峰会上分享了目前AI+RPA在银行各大典型场景的落地:

例如智慧信贷,面向的是整个银行最核心的流程——信贷流程,分为贷前、贷中、贷后三大阶段。 其中涉及数据查询、数据处理、财务报表、银行流水等专业环节,需要完成基础信息的录入、尽调报告的审核,而这些环节中的大量重复劳动,可以基于AI、OCR、NLP等技术自动化完成。

数据库架构选型与落地,看这篇就够了

随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的 磁盘 、 IO 、 系统开销 ,甚至 性能 上的瓶颈,而单台服务器的 资源终究是有限 的。

因此在面对业务扩张过程中,应用程序对数据库系统的 健壮性 , 安全性 , 扩展性 提出了更高的要求。

以下,我从数据库架构、选型与落地来让大家入门。

数据库会面临什么样的挑战呢?

业务刚开始我们只用单机数据库就够了,但随着业务增长,数据规模和用户规模上升,这个时候数据库会面临IO瓶颈、存储瓶颈、可用性、安全性问题。

为了解决上述的各种问题,数据库衍生了出不同的架构来解决不同的场景需求。

将数据库的写操作和读操作分离,主库接收写请求,使用多个从库副本负责读请求,从库和主库同步更新数据保持数据一致性,从库可以水平扩展,用于面对读请求的增加。

这个模式也就是常说的读写分离,针对的是小规模数据,而且存在大量读操作的场景。

因为主从的数据是相同的,一旦主库宕机的时候,从库可以 切换为主库提供写入 ,所以这个架构也可以提高数据库系统的 安全性 和 可用性 ;

优点:

缺点:

在数据库遇到 IO瓶颈 过程中,如果IO集中在某一块的业务中,这个时候可以考虑的就是垂直分库,将热点业务拆分出去,避免由 热点业务 的 密集IO请求 影响了其他正常业务,所以垂直分库也叫 业务分库 。

优点:

缺点:

在数据库遇到存储瓶颈的时候,由于数据量过大造成索引性能下降。

这个时候可以考虑将数据做水平拆分,针对数据量巨大的单张表,按照某种规则,切分到多张表里面去。

但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈(单个服务器的IO有上限)。

所以水平分表主要还是针对 数据量较大 ,整体业务 请求量较低 的场景。

优点:

缺点:

四、分库分表

在数据库遇到存储瓶颈和IO瓶颈的时候,数据量过大造成索引性能下降,加上同一时间需要处理大规模的业务请求,这个时候单库的IO上限会限制处理效率。

所以需要将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。

分库分表能够有效地缓解单机和单库的 性能瓶颈和压力 ,突破IO、连接数、硬件资源等的瓶颈。

优点:

缺点:

注:分库还是分表核心关键是有没有IO瓶颈 。

分片方式都有什么呢?

RANGE(范围分片)

将业务表中的某个 关键字段排序 后,按照顺序从0到一个表,到一个表。 最常见的就是 按照时间切分 (月表、年表)。

比如将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据被查询的概率变小,银行的交易记录多数是采用这种方式。

优点:

缺点:

HASH(哈希分片)

订单作为主表,然后将其相关的业务表作为附表,取用户id然后 hash取模 ,分配到不同的数据表或者数据库上。

优点:

缺点:

讲到这里,我们已经知道数据库有哪些架构,解决的是哪些问题,因此, 我们在日常设计中需要根据数据的特点,数据的倾向性,数据的安全性等来选择不同的架构 。

那么,我们应该如何选择数据库架构呢?

虽然把上面的架构全部组合在一起可以形成一个强大的高可用,高负载的数据库系统,但是架构选择合适才是最重要的。

混合架构虽然能够解决所有的场景的问题,但是也会面临更多的挑战,你以为的完美架构,背后其实有着更多的坑。

1、对事务支持

分库分表后(无论是垂直还是水平拆分),就成了分布式事务了,如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价(XA事务);如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担(TCC、SAGA)。

2、多库结果集合并 (group by,order by)

由于数据分布于不同的数据库中,无法直接对其做分页、分组、排序等操作,一般应对这种多库结果集合并的查询业务都需要采用数据清洗、同步等其他手段处理(TIDB、KUDU等)。

3、数据延迟

主从架构下的多副本机制和水平分库后的聚合库都会存在主数据和副本数据之间的延迟问题。

4、跨库join

分库分表后表之间的关联操作将受到限制,我们无法join位于不同分库的表(垂直),也无法join分表粒度不同的表(水平), 结果原本一次查询就能够完成的业务,可能需要多次查询才能完成。

5、分片扩容

水平分片之后,一旦需要做扩容时。 需要将对应的数据做一次迁移,成本代价都极高的。

6、ID生成

分库分表后由于数据库独立,原有的基于数据库自增ID将无法再使用,这个时候需要采用其他外部的ID生成方案。

一、应用层依赖类(JDBC)

这类分库分表中间件的特点就是和应用强耦合,需要应用显示依赖相应的jar包(以Java为例),比如知名的TDDL、当当开源的 sharding-jdbc 、蘑菇街的TSharding等。

此类中间件的基本思路就是重新实现JDBC的API,通过重新实现 DataSource 、 PrepareStatement 等操作数据库的接口,让应用层在 基本 不改变业务代码的情况下透明地实现分库分表的能力。

中间件给上层应用提供熟悉的JDBC API,内部通过 sql解析 、 sql重写 、 sql路由 等一系列的准备工作获取真正可执行的sql,然后底层再按照传统的方法(比如数据库连接池)获取物理连接来执行sql,最后把数据 结果合并 处理成ResultSet返回给应用层。

优点

缺点

二、中间层代理类(Proxy)

这类分库分表中间件的核心原理是在应用和数据库的连接之间搭起一个 代理层 ,上层应用以 标准的MySQL协议 来连接代理层,然后代理层负责 转发请求 到底层的MySQL物理实例,这种方式对应用只有一个要求,就是只要用MySQL协议来通信即可。

所以用MySQL Navicat这种纯的客户端都可以直接连接你的分布式数据库,自然也天然 支持所有的编程语言 。

在技术实现上除了和应用层依赖类中间件基本相似外,代理类的分库分表产品必须实现标准的MySQL协议,某种意义上讲数据库代理层转发的就是MySQL协议请求,就像Nginx转发的是Http协议请求。

比较有代表性的产品有开创性质的Amoeba、阿里开源的Cobar、社区发展比较好的 Mycat (基于Cobar开发)等。

优点

缺点

JDBC方案 :无中心化架构,兼容市面上大多数关系型数据库,适用于开发高性能的轻量级 OLTP 应用(面向前台)。

Proxy方案 :提供静态入口以及异构语言的支持,适用于 OLAP 应用(面向后台)以及对分片数据库进行管理和运维的场景。

混合方案 :在大型复杂系统中存在面向C端用户的前台应用,也有面向企业分析的后台应用,这个时候就可以采用混合模式。

JDBC 采用无中心化架构,适用于 Java 开发的高性能的轻量级 OLTP 应用;Proxy 提供静态入口以及异构语言的支持,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC 、 Sharding-Proxy 和 Sharding-Sidecar (计划中)这3款相互独立的产品组成,他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

ShardingSphere提供的核心功能:

Sharding-Proxy

定位为透明化的 数据库代理端 ,提供封装了 数据库二进制协议的服务端版本 ,用于完成对 异构语言的支持 。

目前已提供MySQL版本,它可以使用 任何兼容MySQL协议的访问客户端 (如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。

向 应用程序完全透明 ,可直接当做MySQL使用。

适用于任何兼容MySQL协议的客户端。

Sharding-JDBC

定位为 轻量级Java框架 ,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为 增强版的JDBC驱动,完全兼容JDBC和各种ORM框架 。

以电商SaaS系统为例,前台应用采用Sharding-JDBC,根据业务场景的差异主要分为三种方案。

分库(用户)

问题解析:头部企业日活高并发高,单独分库避免干扰其他企业用户,用户数据的增长缓慢可以不分表。

拆分维度:企业ID分库

拆分策略:头部企业单独库、非头部企业一个库

分库分表(订单)

问题解析:订单数据增长速度较快,在分库之余需要分表。

拆分维度:企业ID分库、用户ID分表

拆分策略:头部企业单独库、非头部企业一个库,分库之后用户ID取模拆分表

单库分表(附件)

问题解析:附件数据特点是并发量不大,只需要解决数据增长问题,所以单库IO足以支撑的情况下分表即可。

拆分维度:用户ID分表

拆分策略:用户ID取模分表

问题一:分布式事务

分布式事务过于复杂也是分布式系统最难处理的问题,由于篇幅有限,后续会开篇专讲这一块内容。

问题二:分布式ID

问题三:跨片查询

举个例子,以用户id分片之后,需要根据企业id查询企业所有用户信息。

sharding针对跨片查询也是能够支持的,本质上sharding的跨片查询是采用同时查询多个分片的数据,然后聚合结果返回,这个方式对资源耗费比较大,特别是对数据库连接资源的消耗。

假设分4个数据库,8个表,则sharding会同时发出32个SQL去查询。一下子消耗掉了32个连接;

特别是针对单库分表的情况要注意,假设单库分64个表,则要消耗64个连接。如果我们部署了2个节点,这个时候两个节点同时查询的话,就会遇到数据库连接数上限问题(mysql默认100连接数)

问题四:分片扩容

随着数据增长,每个片区的数据也会达到瓶颈,这个时候需要将原有的分片数量进行增加。 由于增加了片区,原先的hash规则也跟着变化,造成了需要将旧数据做迁移。

假设原先1个亿的数据,hash分64个表,现在增长到50亿的数据,需要扩容到128个表,一旦扩容就需要将这50亿的数据做一次迁移,迁移成本是无法想象的。

问题五:一致性哈希

首先,求出每个 服务器的hash值 ,将其配置到一个 0~2^n 的圆环上 (n通常取32)

其次,用同样的方法求出待 存储对象的主键 hash值 ,也将其配置到这个圆环上。

然后,从数据映射到的位置开始顺时针查找,将数据分布到找到的第一个服务器节点上。

一致性hash的优点在于加入和删除节点时只会影响到在哈希环中相邻的节点,而对其他节点没有影响。

所以使用一致性哈希在集群扩容过程中可以减少数据的迁移。

好了,这次分享到这里,我们日常的实践可能只会用到其中一种方案,但它不是数据库架构的全貌,打开技术视野,才能更好地把存储工具利用起来。

老规矩,一键三连,日入两千,点赞在看,年薪百万!

7年Java老兵,小米主题设计师,手机输入法设计师,ProcessOn特邀讲师。

曾涉猎航空、电信、IoT、垂直电商产品研发,现就职于某知名电商企业。

技术公众号 【架构师修行录】 号主,专注于分享日常架构、技术、职场干货,Java Goals:架构师。

交个朋友,一起成长!

系统设计的原则是什么?

系统设计的原则包括简洁性、可维护性、可扩展性、安全性和易用性。 简洁性要求系统结构清晰,避免冗余和复杂性。 可维护性确保系统在后期可以方便修改和升级。 可扩展性意味着系统能够适应业务增长和需求变化。 安全性保障数据和系统免受攻击。 易用性则确保用户能轻松操作系统。 这些原则在实际设计中并不绝对,需要根据项目具体情况权衡取舍。 例如,简化系统可能牺牲一些功能的复杂性,而为了安全性可能增加额外的开发成本。 不同的系统和项目需求不同,约束条件也各异,设计时需综合考虑这些因素,依据项目目标和背景来确定适用的原则。 在系统设计中,简洁性原则指导着我们追求系统的清晰性和易理解性。 这不仅有助于提高开发效率,也有助于用户理解和使用系统。 可维护性原则则要求系统结构合理、代码清晰,便于后续维护和升级。 可扩展性原则确保系统能够适应未来的业务需求,避免因为业务增长而频繁的重构或重写。 安全性原则要求系统在设计初期就考虑到可能的威胁和攻击,通过合理的安全措施防止数据泄露和系统被攻击。 易用性原则则关注用户体验,确保系统界面友好,操作简单直观,提高用户满意度。 综上所述,系统设计需要综合考虑简洁性、可维护性、可扩展性、安全性和易用性这些原则,并根据具体项目情况权衡和取舍。 设计师需要根据项目目标、业务需求、用户群体以及资源限制等因素,灵活运用这些原则,设计出既满足功能要求又能适应未来发展、保障安全、易于维护和使用的系统。

预约股票开户,股票交易佣金万一免五,资金大佣金更低。国内顶级证券公司开户,所有费率均可调到最低标准,开户微信:gpkhcom

相关文章