关闭

缓存与数据库一致性保证

本文主要讨论这么几个问题: (1)啥时候数据库和缓存中的数据会不一致 (2)不一致优化思路 (3)如何保证数据库与缓存的一致性   一、需求缘起 上一篇《缓存架构设计细节二三事》(点击查看)引起了广泛的讨论,其中有一个结论:当数据发生变化时,“先淘汰缓存,再修改数据库”这个点是大家讨论的最多的。 上篇文章得出这个结论的依据是,由于操作缓存与操作...
阅读(49) 评论(0)

细聊冗余表数据一致性

本文主要讨论四个问题: (1)为什么会有冗余表的需求 (2)如何实现冗余表 (3)正反冗余表谁先执行 (4)冗余表如何保证数据的一致性   一、需求缘起 互联网很多业务场景的数据量很大,此时数据库架构要进行水平切分,水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非patition key上的查询可能就...
阅读(130) 评论(0)

缓存架构设计细节二三事

本文主要讨论这么几个问题: (1)“缓存与数据库”需求缘起 (2)“淘汰缓存”还是“更新缓存” (3)缓存和数据库的操作时序 (4)缓存和数据库架构简析   一、需求缘起 场景介绍 缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。 例如对于用户的余额信息表account(uid, money),业务上...
阅读(56) 评论(0)

数据库软件架构设计些什么

一、基本概念 二、数据库架构设计思路 (1)可用性 (2)读性能 (3)一致性 (4)扩展性 一、基本概念 概念一“单库” 概念二“分片” 分片解决的是“数据量太大”的问题,也就是通常说的“水平切分”。 一旦引入分片,势必有“数据路由”的概念,哪个数据访问哪个库。 路由规则...
阅读(61) 评论(0)

100亿数据1万属性数据架构设计

对于version + ext方案,还是有很多朋友质疑“线上不可能这么用”。本篇将讲述一下58同城最核心的数据“帖子”的架构实现技术细节,说明不仅不是“不可能这么用”,而是大数据,可变属性,高吞吐场景下的“常用手段”。   一、背景描述及业务介绍 问:什么是数据库扩展的version + ext方案? 使用ext来承载不同业务需求的个性化属性,使用version来标识e...
阅读(183) 评论(0)

这才是真正的表扩展方案

零、缘起 讨论问题域: (1)数据量大、并发量高场景,在线数据库属性扩展 (2)数据库表结构扩展性设计   一、哪些方案一定是不行的 (1)alter table add column 要坚持这个方案的,也不多解释了,大数据高并发情况下,一定不可行   (2)通过增加表的方式扩展,通过外键join来查询 大数据高并发情况下,join性...
阅读(177) 评论(0)

啥,又要为表增加一列属性?

需求缘起 产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计: user(uid, name, passwd, nick) 第二版,产品经理增加了年龄,性别两个属性,表结构可能要变成: user(uid, name, passwd, nick, age, sex) 假设数据量和并发量比较大,怎么变? (1)alter table add ...
阅读(193) 评论(0)

一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)

单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份 集群部署(cluster):有多个饮水机同时提供服务,服务冗余部署,每个冗余的服务都对外提供服务,一个服务挂掉时依然可用 热备部署(hot-swap):只有一个桶提供服务,另一个桶stand-by,在水用完时自动热替换,服务冗余部署,只有一个主服务对外提供服务,影子服务在主服务挂掉时顶上 ...
阅读(211) 评论(0)

mysql中decimal,numeric,double,float的区别

概述: 简单来说decimal,numeric属于标准数据类型,指定精度和刻度;decimal的存储大小不确定,numeric的存储大小默认8个字节。 double,float属于非标准数据类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。 float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处...
阅读(113) 评论(0)

一分钟了解两阶段提交2PC

一、概念 二阶段提交2PC(Two phase Commit)是指,在分布式系统里,为了保证所有节点在进行事务提交时保持一致性的一种算法。 二、背景 在分布式系统里,每个节点都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。 当一个事务跨多个节点时,为了保持事务的原子性与一致性,需要引入一个协调者(Coordinator)来统一掌控所有参与者(Par...
阅读(220) 评论(0)

连接池原来这么简单

一、如何通过连接访问下游 工程架构中有很多访问下游的需求,下游包括但不限于服务/数据库/缓存,其通讯步骤是为: (1)与下游建立一个连接 (2)通过这个连接,收发请求 (3)交互结束,关闭连接,释放资源   这个连接是什么呢,通过连接怎么调用下游接口?服务/数据库/缓存,官方会提供不同语言的Driver、Document、DemoCode来教使用方建立连接与调用...
阅读(257) 评论(0)

一分钟实现分布式锁

一、缘起 分布式环境下,多台机器上多个进程对一个数据进行操作,如果不做互斥,就有可能出现“余额扣成负数”,或者“商品超卖”的情况,如何实现简易分布式锁,对分布式环境下的临界资源做互斥,是今天将要讨论的话题。   二、互斥原理 原理:多个访问方对同一个资源进行操作,需要进行互斥,通常是利用一个这些访问方同时能够访问到的lock来实施互斥的。 例子1:同一个进...
阅读(203) 评论(0)

应用层/安全层/传输层如何进行协议选型

系统设计,协议先行。 大部分技术人没有接触协议的设计细节,更多的是使用已有协议进行应用层的编码,例如: (1)使用http作为载体,设计get/post/cookie参数 (2)使用dubbo框架,而不用去深究内部的二进制包头包体,以及序列号反序列化的细节 无论如何,了解协议设计的原则,对深入理解系统通信非常有帮助。今天就以即时通讯(后称im)为例,讲讲应用层的...
阅读(215) 评论(0)

互联网架构为什么要做服务化?

一、互联网高可用架构,为什么要服务化? 【服务化之前高可用架构】 在服务化之前,互联网的高可用架构大致是这样一个架构: (1)用户端是浏览器browser,APP客户端 (2)后端入口是高可用的nginx集群,用于做反向代理 (3)中间核心是高可用的web-server集群,研发工程师主要编码工作就是在这一层 (4)后端存储是高可用的db集群,数据存储在...
阅读(3082) 评论(5)

单点系统架构的可用性与性能优化

一、需求缘起 明明架构要求高可用,为何系统中还会存在单点? 回答:单点master的设计,会大大简化系统设计,何况有时候避免不了单点   在哪些场景中会存在单点?先来看一下一个典型互联网高可用架构。 典型互联网高可用架构: (1)客户端层,这一层是浏览器或者APP,第一步先访问DNS-server,由域名拿到nginx的外网IP (2)负载均衡层,ng...
阅读(269) 评论(0)
102条 共7页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:18280次
    • 积分:1077
    • 等级:
    • 排名:千里之外
    • 原创:92篇
    • 转载:10篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论