李海翔,网名“那海蓝蓝”,腾讯金融云数据库技术专家。中国人民大学信息学院工程硕士企业导师。著有《数据库事务处理的艺术:事务管理和并发访问控制》、《数据库查询优化器的艺术:原理解析与SQL性能优化》、《大数据管理》。 前言 2019年10月11日至13日,CCF数据库专委会在济南召开了国内规模最大的、每年一度的数据库学术盛会——第36届CCF中国数据库学术会议(NDBC 2019),腾讯TDSQL团队受邀在“数据库产学研合作论坛”,做了主题为“TDSQL对未来分布式数据库的技术研发思考与实践”的技术报告
作者:李海翔,网名“那海蓝蓝”,腾讯金融云数据库技术专家。中国人民大学信息学院工程硕士企业导师。著有《数据库事务处理的艺术:事务管理和并发访问控制》、《数据库查询优化器的艺术:原理解析与SQL性能优化》、《大数据管理》。 ---- 前言 2019年10月11日至13日,CCF数据库专委会在济南召开了国内规模最大的、每年一度的数据库学术盛会——第36届CCF中国数据库学术会议(NDBC 2019),腾讯TDSQL团队受邀在“数据库产学研合作论坛”,做了主题为“TDSQL对未来分布式数据库的技术研发思考与实践
李海翔,网名“那海蓝蓝”,腾讯金融云数据库技术专家。中国人民大学信息学院工程硕士企业导师。著有《数据库事务处理的艺术:事务管理和并发访问控制》、《数据库查询优化器的艺术:原理解析与SQL性能优化》、《大数据管理》。
架构设计中,大家都不喜欢耦合,但有哪些典型的耦合是我们系统架构设计中经常出现的,又该如何优化?这里列举了6个点:IP、jar包、数据库、服务、消息、扩容。这些点,如果设计不慎,都会导致系统一些耦合,这些点基本都是大家实际遇到的痛点,今天我将跟大家分享如何用常见的方案去解除这些耦合。
原始代码 <?php //数据库操作 /** * Class Db * 辅助类 */ class Db { //数据库链接 public function init()
桥接模式,也叫作桥梁模式,英文是 Bridge Design Pattern。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化。” 桥接模式通过将一个类的抽象部分与实现部分分离开来,使它们可以独立地进行扩展和修改。
数据库的备份是数据库工作的一个基本项,但实际上能做到毫无挑剔的备份,少之又少, 主要的问题在于备份的频率与性能之间的问题. 这有点类似于 RTO 和 RPO 之间的平衡. 具体怎么设置备份的策略是一个重要的问题.
软件架构师自身需要是程序员,并且必须一直坚持做一线程序员,绝对不要听从那些说应该让软件架构师从代码中解放出来以专心解决高阶问题的伪建议。
MQ全称为Message Queue,即消息队列,消息队列是应用程序与应用程序之间通信的一致方法,即在消息的传输过程中保存消息的容器,多用于分布式系统之间的通信
一直不知道性能优化都要做些什么,从哪方面思考,直到最近接手了一个公司的小项目,可谓麻雀虽小五脏俱全。让我这个编程小白学到了很多性能优化的知识,或者说一些思考方式。真的感受到任何一点效率的损失放大一定倍数时,将会是天文数字。最初我的程序计算下来需要跑2个月才能跑完,经过2周不断地调整架构和细节,将性能提升到了4小时完成。
数据访问层(DAO,Data Access Object)是软件架构设计中的一个概念,旨在将数据库的访问逻辑抽象化和封装起来,以便于更高层次的业务逻辑和数据访问代码之间的分离。这个概念主要来源于对象-关系映射(Object-Relational Mapping, ORM)和分层设计模式,特别是在企业级应用中的应用非常广泛。接下来,我们将深入探讨DAO的由来、目的和实现方法,以及它在软件开发中的重要性。
在互联网应用中,缓存技术是提高系统性能和稳定性的重要手段之一。Redis作为一种高性能的缓存数据库,被广泛应用于各种互联网应用中。本文将介绍Redis缓存使用的三种模式,包括Cache Aside(旁路缓存)、Read/Write Through(读写穿透)和Write Behind Caching(异步缓存写入),以及它们的适用场景和优缺点。
如果你经历过快速迭代业务,经历过用户量不断上涨,经历过访问并发越来越大,你一定会遇到以下系统问题:
Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
一、缘起 很多公司,技术经常遇到这样的场景: 1)硬件升级,要换一台高配机器 2)网络重新规划,若干服务器要调整机架 3)服务器当机,要重新部署恢复服务 … 更具体的,如上图:数据库换了一个ip,此时
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
来源:阿里研究院 本文约4800字,建议阅读5分钟 云原生正在重构数据库市场的竞争格局。 本期嘉宾: 李飞飞 阿里巴巴集团副总裁、达摩院数据库与存储实验室负责人 王建民 清华大学软件学院院长 安筱鹏 阿里研究院副院长 2020年9月17日,美国数据库公司Snowflake上市,市值一度超过1000亿美元,但其2019年销售额不到3亿美元。 2020年微软取代了Oracle,历史上第一次站在了数据库全球市场的榜首地位。 亚马逊创始人贝索斯曾说,“The real battle will be in dat
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
FaaS 连接并访问传统数据库会增加额外的开销,我们可以采用数据编排的思想,将数据库操作转为 RESTful API。顺着这个思路,我引出了后端应用的 BaaS 化,一句话总结,后端应用 BaaS 化就是将后端应用转换成 NoOps 的数据接口。那怎么理解这句话呢?
墨墨导读:MySQL如何实现高性能?以下内容是结合其他技术同仁的总结和自我实践整理的20个开源数据库设计原则,分享至此,希望对大家有帮助。
编者注:本系列与读者共同分析数据库行业动态。关注“数据和云 ( OraNews)”公众号回复:下载。可以找到下载链接。 本次推荐文档来自 CCF 2021年12月发表的《"十四五"数据库发展趋势与挑战》一文,其中针对数据库的精彩论断,值得从业者深入理解和思考。 署名字母序作者:陈群、陈跃国、崔斌、范多锋、高云君、李国良、李战怀、毛睿、潘安群、彭智勇、钱卫宁、童咏昕、屠要峰、王晓阳、杨晓春、姚斌、袁野、周立柱 本文是笔者的学习摘录。 ---- 主要观点: 计算模式的改变和应用需求变化对数据库系统形态起到了至关
用例也叫使用案例。它描述系统如何响应外界请求,每个用例会提供一个或多个场景,告知用户如何使用交互。编写用例时,应当避免技术用语,要让用户都能看懂的语言。
停机迁移包括停服迁移与非停服迁移,停服迁移是选择某一时间点流量最少时停止所有服务,并在最短时间内完成数据迁移,此时需要注意停服时间;非停服迁移,即停止所有写数据服务,查询服务并不停止,同样要注意停服时间,防止对生产环境有较大影响。停机迁移完成后,还需要进行数据核对,通常首先要校验迁移前后数据量是否一致,其次还可对迁移前后数据逐条进行校验,还可进行流量回放,保证迁移前后业务表现完全一致。
仓库风格是软件架构中的一种设计模式,用于指导如何组织和管理数据及其访问方式。数据库系统、黑板系统和超文本系统是三种不同的仓库风格实现,它们各自适用于不同的应用场景和需求。下面我将分别讲解这三种系统的基本概念、特点和应用场景。
注:本文为我最近阅读《微服务架构设计模式》的一点感悟,我不准备详细去写对该书的读书笔记记录,而是结合我们自己所做的一些微服务架构实践情况做一些总结和复盘。
最近在某个“群”, 经常看到吐槽某分布式数据库的“流言蜚语”,主要提到一些问题, 如系统不稳定,系统运行缓慢,等一些问题,细究大部分问题不在分布式数据库,而在于本身使用者不具备使用分布式数据库的最基本的“能力”。
前面连续好几天的时间都在讲怎么去提升我们系统的性能,将数据库改造成分布式存储,同时还讲到了各种缓存的原理以及我们生产中使用的技巧,其实都是因为我们的业务绝大部分都是读多写少的场景。
最近小伙伴在讨论单体到微服务架构中数据这块如何演进,相信这篇能给大家带来启发。 ---- 来源:SphereEx 链接:https://segmentfault.com/a/1190000041107436 排版:悟空哥 京东白条的快速发展满足了当前人们日益增长的消费需求。在京东商城上用京东白条来支付,已经成为一大批用户的消费习惯,更是在某种意义上成为了京东对外的『标签』。而作为一家互联网金融消费平台,京东白条的后台技术团队更是不容忽视的存在。而其也正是支撑京东白条自 2014 年初上线伊始,至今服务数亿用
目前对消息队列并不了解其原理,本篇文章主要是通过慕课网学习归纳的一些笔记,为后续学习打下基础。 众所周知在对网站设计的时候,会遇到给用户“群发短信”,“订单系统有大量的日志”,“秒杀设计”等,服务器没法处理这种瞬间迸发的压力,这种情况要保证系统正常有效的使用,就需要“消息队列”的帮助。本篇主要通过消息队列的思路进行学习。 主要了解如下知识: 1、队列是个什么东西,他能干什么? 2、对列的应用场景有哪些? 3、如何使用队列对业务进行解偶? 4、如何使用Redis队列来消除高压力? 5、专业的对列系统RabbitMQ如何使用? 归纳如下主要内容 @消息队列的概念,原理和场景 @解耦案例:队列处理订单系统和配送系统 @流量削峰案例:Redis的List类型实现秒杀 @RabbitMQ:更专业的消息系统实现方案
2021年,迅猛过去了。 今天,给大家做一个分类精选,选取12.31之前发布的,阅读还不错的100篇,大家点击标题,直接阅读。如果之前有错过的文章,这是一个很好的补课机会。 这几篇,首先推荐大家读一读: 《我们从来都反对“大中台,小前台”的架构设计!》2.1W+《关于MySQL,这篇都没人赞,太没天理了!》1.3W+《关于MySQL异步复制,MGR内核原理!》《求解“微信群覆盖”的三种方法:暴力,染色,链表,并查集》关于底层内核的文章,似乎阅读越来越低了。 今年花在开源学习上的时间并不多: 《1万行代码,单
如果你经历过创业,经历过快速迭代业务,经历过用户量不断上涨,经历过访问并发越来越大,你一定会遇到以下系统问题: 用户访问页面越来越慢 系统性能下降,数据库扛不住,连接数经常打满,最终数据库挂掉,重启后又快速挂掉 改了一个小地方,另外一个看似不相干的地方却挂了,严重耦合 如果你没有经历过,很可能是: 没到这一步项目就死了 身在所谓的大公司,用着所谓先进的架构体系 创业初期遇到上述痛点,很容易想到“三个分离”的架构优化方案: 动静分离:能够100倍以上的提升静态页面/资源的访问速度,详见《必备,动静分离架构实践
如果你经历过创业,经历过快速迭代业务,经历过用户量不断上涨,经历过访问并发越来越大,你一定会遇到以下系统问题:
通过“库”来实现业务,可能会引发业务系统之间耦合,需要通用业务服务化,将通用业务下沉,详见《小小的公共库,大大的耦合,你痛过吗》。 通过“join”来实现业务,可能会导致数据库之间耦合,需要基础数据服
通过“库”来实现业务,可能会引发业务系统之间耦合,需要通用业务服务化,将通用业务下沉,详见《小小的公共库,大大的耦合,你痛过吗》。 通过“join”来实现业务,可能会导致数据库之间耦合,需要基础数据服务化,实现数据库私有化,解除数据库之间的耦合,详见《小小的数据库,大大的耦合,你通过吗》。 但如果服务化不合理,将部分个性化业务下沉到了底层,耦合与瓶颈会更加严重。 场景还原 业务1,业务2,业务3,因为join导致数据库实例耦合在了一起。 📷 为了实现通用数据库table-user的解耦,实施了服务化,将通用
我们已经学会了javaee web搭建一个项目,可以实现操作数据库。javaee web搭建项目的流程是
在当今快速发展的技术世界中,系统的可扩展性已经成为了软件架构设计中的一个核心考量。随着用户基数的增长、数据量的爆炸式膨胀以及业务需求的不断变化,一个初期设计良好的系统也可能很快面临性能瓶颈和维护难题。因此,设计一个能够适应这些变化,同时保持高效、稳定和可管理状态的系统,对于确保企业的持续成功至关重要。
如上图,在不使用消息队列服务器的时候,用户的请求数据直接写入数据库,在高并发的情况下数据库压力剧增,使得响应速度变慢。但是在使用消息队列之后,用户的请求数据发送给消息队列之后立即 返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度快于数据库(消息队列也比数据库有更好的伸缩性),因此响应速度得到大幅改善。
引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。
今天准备谈下微服务架构下各个微服务间如何解耦,以及对于已经紧耦合的微服务如何进行重构。在谈这个内容前,可以先看下我前两天发布的微服务模块和粒度如何划分才更加合理的一篇文章,这篇文章对于微服务拆分有比较详细的描述。
在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验,尝试理清其中存在的关键问题以及探寻通用的解决之道。
近年来,云原生转型已成为众多企业关注的焦点,中泰证券也不例外。但中泰证券的云原生转型面临着很大挑战。
现在的程序员为什么这么累,其实很大程度上来说是加班原因使编码质量占了大部分因素,但是不少同学都不认为是代码质量导致的加班,都认为是不断的需求改动导致的加班。但是话又说回来,谁的需求不改动啊?不改动的能叫需求吗?
新年伊始,一篇原本普普通通的厂家白皮书却引发金融圈IT从业人员的驳斥,大家为此吵得不可开交。
如题,这季度要做的需求,是一个独立模块,但是由于项目越来越大,模块间的结构越来越复杂,不得不面临的一个问题就是服务拆分,当然,在拆分之前,新加的模块,最好还是直接做成一个独立的服务,这不,要把本季度的需求,单独做一个服务出来,因为这是项目的第一个独立服务,所以要考虑和准备不少东西,蛮有挑战性的,在这里总结下我对微服务浅陋的见解。
引言 本文小结了数据设计原则; 数据库设计对于数据库的可维护性、可扩展性至关重要,某些原则必须严格遵守; 数据库设计范式 第一范式:属性具有原子性,不可再分解,即不能表中有表; 第二范式:唯一性约束,每条记录有唯一标示,所有的非主键字段均需依赖于主键字段; 第三范式:冗余性约束,非主键字段间不能相互依赖; 数据库设计原则 完整性: not null声明禁止插入空值; check子句限制属性域; 去冗余: 避免冗余属性,冗余属性会带来数据不一致性; 学生选课系统中,老师可以开课、学生可以选课,数据库设计中,课
领取专属 10元无门槛券
手把手带您无忧上云