thinking about application known or un-known distributed storage

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:
最近有个资源整合的项目,存储的话选择了mongodb的sharding来做,因为数据量较大。
原本可能会选择Hadoop来做的,不过从Hadoop的文档上看到好像不太适用大并发的小IO的操作(小文件),更加适用大吞吐量小并发的操作(大文件)。
应用要求多IDC部署,因此资源文件也要求在多IDC存储(相当于每个IDC需要有同样的资源文件)。
考虑到扩展性,在一个IDC内部使用了mongoDB的sharding特性。
但是这样带来一个问题,不方便复制到其他的IDC,所以目前的做法是应用层在写入文件存储的时候同时调用远端IDC的应用写入文件到远端IDC的mongoDB sharding。
thinking about application known or un-known distributed storage - 德哥@Digoal - The Heart,The World.

。这样做的好处是单个IDC的文件存储扩展变得比较灵活,不过又带来一些问题,由于SHARDING是mongoDB来做的,可能不能做到就近存储(比如存进去的资源,需要读取这个资源的应用和存储的位置应该最近,这样的话才是最优的。针对write-once-read-some型应用。)
还一个问题是,可能出现一个IDC文件资源存储成功了,另一个IDC的文件资源没有存储成功的情况,同时也是应用需要考虑来解决的问题。

所以最近我也在考虑是否有其他的解决方案,即能够做到分布存储,又可以让文件存储来做多IDC复制,例如mongoDB的master-slave。
例如
IDC A : (读写)
增加一个PostgreSQL,用于存储文件存放的位置,
如:
idc_id,file_name,mongodb_hostname,mongodb_namespace
当文件被写入到mongodb时,同时写入记录到PostgreSQL,这样的话如果一个mongoDB不够了,可以加mongoDB服务器,
如果一台PostgreSQL数据库不够用,甚至还可以对FILE_NAME进行HASH分区,使用多台PostgreSQL来堆。
当文件被读取时,先到PostgreSQL读取到文件存放的位置,然后到mongoDB读取。

IDC B:  (只读)
利用PostgreSQL的复制功能和mongoDB的复制功能复制IDC A的数据到IDC B。IDC B只提供读取功能,所有的写在IDC A完成。

如图 :  
thinking about application known or un-known distributed storage - 德哥@Digoal - The Heart,The World.
 
这样做的好处是在应用部署时会比较灵活,解决了就近存储的问题。同时也简化了应用设计,不需要应用来处理写多个IDC的问题。
当然,两种方式都可能使得IDC A 和IDC B在短时间内有一定的数据延时。
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
设计模式 分布式计算 Kubernetes
译|Design patterns for container-based distributed systems(上)
译|Design patterns for container-based distributed systems
97 0
|
设计模式 缓存 监控
译|Design patterns for container-based distributed systems(下)
译|Design patterns for container-based distributed systems(下)
76 0
|
网络协议 Linux 块存储
Uptime And Monitoring Strategies For Cloud-Based E-Commerce Applications/Websites
In order to keep your e-commerce site functioning properly, you need to take positive steps to monitor both its performance and functionality.
1522 0
|
网络协议 Linux 虚拟化
|
关系型数据库 物联网 对象存储
Sharing, Storing, and Computing Massive Amounts of Data
Data is crucial to the operation of any business.
1656 0
|
分布式计算 MySQL 关系型数据库
Implementing a Highly-Compressed Data Storage
Alibaba Cloud ApsaraDB for RDS for MySQL supports the TokuDB engine to store data that is compressed to 5 to 10 times smaller than its original size.
1748 0