cockroachdb

睡前必读 | 如何系统性地学习分布式系统?

荒凉一梦 提交于 2020-10-28 00:07:33
点击上方“朱小厮的博客”,选择“设为星标” 后台回复"书",获取 导语:本文的缘起是回答知乎圆桌会议「分布式系统之美」的问题「如何系统性地学习分布式系统?」,后面稍微整理了一下,形成了这一篇文章(知乎 ID:kylin)。 前 言 学习一个知识之前,我觉得比较好的方式是先理解它的来龙去脉:即这个知识产生的过程,它解决了什么问题,它是怎么样解决的,还有它引入了哪些新的问题(没有银弹),这样我们才能比较好的抓到它的脉络和关键点,不会一开始就迷失在细节中。 所以,在学习分布式系统之前,我们需要解决的第一个问题是:分布式系统解决了什么问题? 分布式系统解决了什么问题? 第一个是单机性能瓶颈导致的成本问题,由于摩尔定律失效,廉价 PC 机性能的瓶颈无法继续突破,小型机和大型机能提高更高的单机性能,但是成本太大高,一般的公司很难承受; 第二个是用户量和数据量爆炸性的增大导致的成本问题,进入互联网时代,用户量爆炸性的增大,用户产生的数据量也在爆炸性的增大,但是单个用户或者单条数据的价值其实比软件时代(比如银行用户)的价值是只低不高,所以必须寻找更经济的方案; 第三个是业务高可用的要求,对于互联网的产品来说,都要求 7 * 24 小时提供服务,无法容忍停止服务等故障,而要提供高可用的服务,唯一的方式就是增加冗余来完成,这样就算单机系统可以支撑的服务,因为高可用的要求,也会变成一个分布式系统。

k8s 集群部署rook-ceph存储系统及使用

半城伤御伤魂 提交于 2020-10-24 15:29:30
一、Rook 、ceph简介 Ceph分布式存储系统 Ceph是一种高度可扩展的分布式存储解决方案,提供对象、文件和块存储。在每个存储节点上,您将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程。在Ceph集群上,您还可以找到Ceph MON(监控)守护程序,它们确保Ceph集群保持高可用性。 Rook Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。 Rook 将存储软件转变为自我管理、自我扩展和自我修复的存储服务,它通过自动化部署、引导、配置、置备、扩展、升级、迁移、灾难恢复、监控和资源管理来实现此目的。 Rook 使用底层云本机容器管理、调度和编排平台提供的工具来实现它自身的功能。 Rook 目前支持Ceph、NFS、Minio Object Store和CockroachDB。 二、前期准备 1.已有一个可以正常跑应用的k8s集群 2.在集群中至少有三个节点可用,满足ceph高可用要求,并且服务器具备一块未格式化未分区的硬盘。 3.rook-ceph项目地址: https://github.com/rook/rook https://github.com/rook/rook/blob/master/Documentation/ceph

奈学教你五分钟学会分布式事务

北慕城南 提交于 2020-10-15 00:41:21
从概念开始 我们先从事务的定义开始。事务即一系列读存动作被当作一个执行单元,这些动作要么全成功,要么全失败,执行动作的过程中保证数据的隔离性和一致性。 我们抛离数据库这个特定场景,先假设一个数据存储设备,我们定义两个标准操作,一个读一个写。当写操作依赖于读到的数据时,执行的顺序决定了得到的结果。 当单线程时,任意读或写操作在这个数据容器上,他必然是符合上述所有的要求的。 当多线程的时候,任意读写,实际上就是导致标准的 race condition,大部分情况下我们是不知道执行结果的。对于单核cpu来说,多线程实际上是cpu模拟,可以理解成所有的操作是合并到一起顺序执行的。在我们不加以控制的前提下,合并的操作队列必然是相对之间无序的。要想多线程情况下,达到单线程一样的事务性。最简单粗暴的办法,就是保证所有请求串行。 保证所有请求串行执行的最简单粗暴的办法就是锁。任意线程操作的适合,上锁,只有这个线程的所有动作做完之后,才能开始下一线程提供的动作。这样一来不管多少事务并行过来,保证了组内的动作一定是串行的。多线程下的动作组的事务性也就保证了。实际上工程后来的进化也是这样的,把执行顺序会影响结果的操作锁住,强制线性执行。 对于数据库来说也是一样,要完成事务的特性,本质还是锁。数据库实际上把读锁和写锁是分开的,颗粒度更细。mvcc的本质也是锁,可以理解成利用 copy-on-write

How can I add a custom, arbitrary option to a table in sqlalchemy?

落花浮王杯 提交于 2020-03-20 06:20:06
问题 I'm trying to create a table with sqlalchemy's declarative_base and I would like to add cockroachdb 's INTERLEAVE IN PARENT option: CREATE TABLE orders ( customer INT, id INT, total DECIMAL(20, 5), PRIMARY KEY (customer, id), CONSTRAINT fk_customer FOREIGN KEY (customer) REFERENCES customers ) INTERLEAVE IN PARENT customers (customer); How could I add that to the DDL? 回答1: Pending official implementation by the cockroachdb dialect, you can augment it yourself to implement the required options

学习Go语言

只谈情不闲聊 提交于 2020-03-12 11:44:44
Go语言 Go语言发展历史和趋势 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go是Google开发的,2007年开始,最开始是“20%时间”的产物(创新的力量),2009年9月发布。 Go语言相关产品: Docker Kubernetes(K8s) Caddy:Http服务器,可替代Nginx CockroachDB:可实现跨数据中心同步的可伸缩开源数据库。 国内哪些企业在用Go语言? 七牛云、华为云、360、淘宝、京东等。 语言特点与优势 编译语言、静态类型检查+动态语言、支持GC、适合服务器编程。 面向接口,而不是面向对象 没有继承和多态 没有泛型 没有try/catch 支持接口和函数式编程 CSP并发模型(goroutine+channel) 基础语法:变量、选择、循环、指针、数组、容器 面向接口:结构体,dock typing,组合 函数式编程:闭包 并发:goroutine,channel 简洁、快速、安全 并行、有趣、开源

Issue while creating primary key from gorm model

谁说我不能喝 提交于 2020-01-30 12:09:42
问题 While creating primary key from gorm model it return with error “duplicate column name: “id”” my model looks like type User struct { gorm.Model Id string gorm:"primary_key;" FirstName string LastName string } any idea what is the issue with above model 回答1: Gorm uses ID as the primary key by default. It is part of the gorm.Model you are embedding. When embedding the gorm.Model , you should leave ID out as gorm already includes it. The alternative is to remove the embedded gorm.Model and

select bottleneck and insert into select doesn't work on cockroach db

浪尽此生 提交于 2019-12-13 03:14:29
问题 I have to union 2 tables like below query. and 'table2' has 15GB data. But it show errors. I set max-sql-memory=.80 and I don't know how to solve this. When I execute this query with limit 50000 option , it works! Even 'select * from table2' shows same error. I think there are a select bottleneck somehow.... Also, with this query it is unusual only 1 of 3nodes's latency goes up. (AWS EC2 i3.xlarge type) ▶ Query insert into table1 ( InvoiceID, PayerAccountId, LinkedAccountId, RecordType,

sql: Delete oldest n records from each group

孤街醉人 提交于 2019-12-11 18:25:36
问题 I'm using cockroachdb. For each group (grouped by id field), if the number of records exceeds 1000, I want to delete the oldest however_many records so that the number of records equal 1000 after the deletion. This is what I have so far: (select id, count(*) - 1000 as num_delete from db.table group by id having count(*) > 1000) Which gives me the ids for which records will be deleted, as well as the number of records I'll need to delete. id | num_delete +-----------+------------+ n7ia6ryc |

cockroachdb/kubernetes logging lots of errors on stackdriver

天涯浪子 提交于 2019-12-11 12:32:18
问题 I've just noticed from a very nasty gcp bill that cockroachDB has logged 1.5tb of errors on stackdriver, costing me several hundred dollars in just a few days. Sadly I had left it on 100% logging. The errors look like this and are piling up multiple times per second. E I180712 11:18:41.963205 106 server/status/runtime.go:223 [n2] runtime stats: 1.5 GiB RSS, 283 goroutines, 254 MiB/54 MiB/441 MiB GO alloc/idle/total, 918 MiB/1.1 GiB CGO alloc/total, 2175.51cgo/sec, 0.16/0.02 %(u/s)time, 0.00

How can I connect to CockroachDB from outside the Kubernetes cluster?

瘦欲@ 提交于 2019-12-09 18:13:36
问题 I've set up and deployed a Kubernetes stateful set containing three CockroachDB pods, as per docs. My ultimate objective is to query the database without requiring use of kubectl. My intermediate objective is to query the database without actually shelling into the database pod. I forwarded a port from a pod to my local machine, and attempted to connect: $ kubectl port-forward cockroachdb-0 26257 Forwarding from 127.0.0.1:26257 -> 26257 Forwarding from [::1]:26257 -> 26257 # later, after