基于数据库复制的技术架构讨论
背景
这里的数据库复制指的是将 主 业务数据库实例上的库通过同步机制(比如 MySQL binlog)准实时(比如最大延迟为 3s)复制到其他数据库实例上,这些实例库只做查询,不做数据写入。
这套架构设计的主要优势:
- 各业务应用能够方便地在自己的 DB 实例上进行业务查询,比如通过 join 主业务库
- 在不明确业务边界、没有梳理好业务对应技术模块时可以最小成本进行变更或扩展
- 实现读写分离,提升性能
一些问题
实际在实施过程中主要遇到两个问题:
- 不可能实时完成数据同步,将造成业务上面的不一致,比如调用主库服务更新数据后,在业务库上不能实时查询到已更新的数据
- 很难保证高可用(在使用阿里 DTS 时出现过多次问题,自己做主从可能会好一些)
为了满足业务发展,复制库的数量会逐步增多(比如新开一个产品可能就需要多复制一套库),以上两个问题可能会导致严重的故障, [CAP] 不能兼得。
服务化
基于数据库复制架构的核心理念是将数据源暴露给应用,开发者直接针对数据源进行开发,是一种非常直接的方式。
但随着业务的逐渐清晰,一些业务逻辑是可以抽取形成服务并提供给其他应用使用的。这一点业界有着非常多的实践,比如 [SOA] 、 [ESB] 等。这种架构的核心理念是基于 服务 的,应用开发者是面向服务进行开发,而不是面向数据源,用近些年的流行语来说,这是 微服务 。
一个良好的演进路径应该是:
应用内部服务化:各点针对数据源编程 -> 类似工具函数的复用 -> 抽象函数为本地服务 -> 以本地服务组合来完成业务事务
这个路线基本所有应用框架都已会覆盖,即使编程语言不同,架构范式基本一致,都是 MVC + DB 本地事务应用分布式服务化:将应用进行拆分 -> 形成服务分类(业务/技术)和分级(1/2/3) -> 通过网络协议暴露各个服务 -> 解决分布式事务问题 -> 以分布式服务组合完成业务事务
这个路线会随着编程语言不同而略有不同,架构范式基本都是注册中心 + 服务链路 RPC + 分布式事务,目前 Java 系可用的框架比较多,比如 [Dubbo] 及其衍生框架,需要考虑异构技术之间的整合
数据库方面基本路线是随着服务的拆分而拆分,主要难点在于消除 join,或者只在某些不可避免的场景少量使用。
以上都是我瞎扯的,实在编不下去了,欢迎大家分享真正的经验 :-p
转载于:https://www.cnblogs.com/lanzhi/p/6467811.html
基于数据库复制的技术架构讨论相关推荐
- 联网技术架构讨论:Facebook 如何管理150亿张照片
联网技术架构讨论:Facebook 如何管理150亿张照片 互联网, 架构, Facebook, 照片, 技术 Facebook 的照片分享很受欢迎,迄今,Facebook用户已经上传了150亿张照片 ...
- 01_基于应用拆分的技术架构
基于应用拆分的技术架构
- 架构设计(二):数据库复制
架构设计(二):数据库复制 作者:Grey 原文地址: 博客园:架构设计(二):数据库复制 CSDN:架构设计(二):数据库复制 在架构设计(一):从单服务器模式到负载均衡设计中提到了数据库类型的选择 ...
- IOT物联网技术架构_物联网平台架构设计
现在网上讨论的有关物联网的帖子非常之多,但大部分都是介绍理论或者有关硬件,通讯相关的问题,比如物联网模块,物联网通讯协议MQTT.XMPP.NB_IOT等,个人认为这些只是物联网中一部分,而涉及到物联 ...
- AWS云计算技术架构探索系列之五-网络
一.前言 当我们有了计算和存储资源,但是要真正把应用程序运行起来并提供互联网服务,那还需要使用AWS的网络,本章节就一起了解AWS的网络及其相关的组件基础知识和架构,其中包括: 区域(Region), ...
- 推荐与广告技术架构的迭代逻辑
作者·黄崇远 『数据虫巢』 全文共4520字 题图ssyer.com " 所有的技术架构并不是一蹴而就的,都是在需求迭代中逐步的探索,并且不断的适应业务的发展,才逐步发展成最终我们所看到的样 ...
- AWS云计算技术架构探索系列之三-计算
一.前言 计算是最核心的云服务,对于用户来说,取之不尽,用之不竭.按需使用的算力正是云计算的最主要的优势之一. 从云计算架构发展历程看,经历了基于XEN,KVM,VMware和Hyper-V为核心的虚 ...
- 「优知学院」淘宝技术架构的前世今生(上)
" 淘宝技术架构经历从最初的LAMP架构,到IOE架构,再到分布式架构,再到去IOE,最后到现在的云计算平台架构这一变化过程在不断解决上面的技术问题,可以说淘宝技术架构的演变就是活生生的一本 ...
- 数据库(MySQL)开发技术题库
数据库(MySQL)开发技术题库 软件工程大二下 选择+填空+简答 选择题 1.SQL语言具有数据操作功能,SQL语言的一次查询的结果是一个___D___ A) 数据项 B) 记录 ...
- AWS云计算技术架构探索系列之一-开篇
一.前言 1.什么是AWS AWS是亚马逊公司的云计算 品牌,作为全球云计算技术的首创者和领导者,其分布在全球25区域81个可用区的数据中心,提供200多项服务齐全的云服务(2021年12月份数据), ...
最新文章
- sql的四种连接 用mysql的语句写_170221、浅谈mysql的SQL的四种连接
- Genome Biology:赵方庆组揭示生命早期肠道菌群演变规律及决定因素
- 动手学深度学习(二)
- 启动转换安装失败 拷贝windows安装文件时出错_男人的生产力工具:极速拷贝 效率神器 TeraCopy精品推荐...
- POJ 3087 Shuffle'm Up DFS
- python赋值的数组无序怎么办_Python的多维空数组赋值方法
- 【顺序表和链表】实现增删查改数据结构 OJ题编程
- 10款好用的程序员软件推荐
- 不知道如何做好精益生产管理?可能是你的企业还没有进行工时分析
- PH值检测C语言程序,食品中pH的检测
- 给自己做一块开发板 #AnyBoard
- 五子棋-单机游戏-微信小游戏项目开发入门
- 按键精灵X学习笔记(二):键盘命令
- Excel/pandas遍历各表拼接并对具体列进行文本筛选
- 淘宝秒杀Python脚本
- 如何将数据从旧PC传输到新Mac
- leetcode每日一题第三十二天-剑指 Offer 65. 不用加减乘除做加法(easy??middle了吧)
- linux ln 命令使用参数详解(ln -s 软链接)
- 智慧政务行业发展报告
- Java中将函数作为参数进行传递
热门文章
- linux常用命令详解和用法_详解Linux shell用法中常用命令--read(传参)
- hive udf 分组取top1_Hive中UDF练习
- 计算机硬件英语单词有哪些,计算机硬件英语词汇
- linux perl 执行java,如何从Java调用Perl?
- python中stacked_栈式自动编码器(Stacked AutoEncoder)
- jQuery中的100个技巧
- Ubuntu 16.04 LTS 下Nginx的编译安装与启动
- 当你想对常用网站定制属于自己的颜色,然而又没人理你怎么办
- ApacheBench~网站性能测试工具
- 【小窍门tip】oracle sequence 修改增量值