UDDB 入坑指南

本文是我们在使用 UDDB 的过程中的踩过的一些坑,以及一些经验总结,希望能够对大家有所帮助。


UDDB 概述

UDDB 是什么?

UDDB 的核心还是一个 MySQL 数据库中间件(类似 kingshard),只是产品本身是基于 UDB 的,而 UDDB 复用了 UDB 的强悍特性(安全、高可用、备份、监控、自动化运维等)。

UDDB 怎么用?

使用很简单的,只需要按照 UDDB 的产品文档上的 SQL 指南所述,然后用 upartition 语法创建好数据库表,就可以像使用普通表一样使用 UDDB 数据库了, UDDB 的容量是可水平扩展的。

注意:我们在使用的时候是有条件的:查询时, WHERE 子句里面需要带上分区的字段信息,不然查询就是扫描全部的子表了。

UDDB 有什么好处?

UDDB 只要在初始化时创建好表之后,只需要不断扩展这个表就好了,这样的好处非常多:

  • 一个是你可以根据数据量, 逐渐增加节点数。

比如一开始只需要存3个月的,可以只买3个节点,3个月后,等这3个节点写满,再购买3个新的节点,供后面3个月使用。而不需要一次性购买一年的节点。

  • 假如我们的数据只需要存6个月,那么可以把过期的子表给删除掉,然后腾出空间给后面月份的数据使用。

如何从 Github 同步你的 fork 仓库

本文是从 Github 同步你的fork 仓库的介绍。 Configuring a remote for a fork You must configure a remote that points to the upstream repository in Git to sync changes you make in a fork with the original repository. This also allows you to sync changes made in the original repository with the fork. Open Terminal. List the current

一步一步教你用 GitHub+Slack+TravisCI 构建 Go 的自动化持续集成

本文是基于 gitfeed 项目来教你如何一步一步的用 Github+Slack+TravisCI 构建自动化持续集成。


欢迎大家使用 gitfeed 项目,有什么意见或想法都可以提 Issue 给我,更欢迎大家提 PR。

什么是持续集成?

持续集成(英语:Continuous integration,缩写为 CI),一种软件工程流程,将所有工程师对于软件的工作复本,每天集成数次到共用主线(mainline)上。 摘自维基百科。

(图片来源于网络)

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。

持续集成的好处主要有两个:

(1)快速发现错误。每完成一些更新,就可以集成到主干,可以快速发现错误,定位错误也比较容易。

(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

Martin Fowler 说过,”持续集成并不能消除 Bug,而是让它们非常容易发现和改正。”与持续集成相关的,还有两个概念,分别是持续交付和持续部署,本文暂未涉及,以后有机会再进行探讨和实践。

Jaeger 分布式链路跟踪系统

本文是一篇 Jaeger 入门级指南。


以下是一篇转发

前言

  随着公司的发展,业务不断的增加,模块的不断拆分,系统间业务调用就变得越复杂,对定位线上故障带来很大困难。整个调用链不透明,犹如系统被蒙上一块黑纱,当线上遇到故障时,整个技术部就陷入痛苦的漩涡。这时候分布式追踪系统应运而生,如揭开了黑纱,让阳光照进黑暗。

分布式系统调用过程

image

opentracing 协议

 opentracing是一套分布式追踪协议,与平台,语言无关,统一接口,方便开发接入不同的分布式追踪系统。

image

简单理解opentracing

一个完整的opentracing调用链包含 Trace + span + 无限极分类

  • Trace:追踪对象,一个Trace代表了一个服务或者流程在系统中的执行过程,如:test.com,redis,mysql等执行过程。一个Trace由多个span组成
  • span:记录Trace在执行过程中的信息,如:查询的sql,请求的HTTP地址,RPC调用,开始、结束、间隔时间等。
  • 无限极分类:服务与服务之间使用无限极分类的方式,通过HTTP头部或者请求地址传输到最低层,从而把整个调用链串起来。

基于 Docker 构建 ElasticSearch

本文是一篇基于 Docker 构建 ElasticSearch 的入门级指南。


其实用 Docker 来构建真的很简单,这里就给大家贴我的实际配置和运行命令吧。

。。。

检查 ElasticSearch 状态

curl -XGET http://localhost:9200/_cluster/health?pretty

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
  "cluster_name" : "docker-cluster",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 1,
  "active_shards" : 1,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 1,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 50.0
}

增删改查

增加

1
2
3
4
5
6
7
curl -XPUT 'localhost:9200/twitter/tweet/1?pretty' -H 'Content-Type: application/json' -d'
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
'

执行结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "_index" : "twitter",
  "_type" : "tweet",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

查询

curl -XGET 'http://localhost:9200/twitter/tweet/1'

执行结果:

1
2
3
4
5
6
7
{"_index":"twitter","_type":"tweet","_id":"1","_version":1,"found":true,"_source":
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
}

https://github.com/olivere/elastic/issues/312 https://github.com/olivere/elastic/wiki/Connection-Problems#how-to-figure-out-connection-problems

dep 入门指南

本文是一篇 dep 的入门级指南。 dep 参考资料 茶歇驿站 一个可以让你停下来看一看,在茶歇之余给你帮助的小站。 这里的内容主要是后端技术,个人管理,团队管理

基于 Docker 构建 Wordpress

本文是一篇基于 Docker 构建 Wordpress 的入门级指南。


Docker 的安装以及 Docker 基本命令,都可以参考官网了解和学习,我这里只是简单介绍一下如何构建 Wordpress:

基本准备之一安装 Docker

见官网。

常用的命令:

  • docker --version
  • docker-compose --version
  • docker-machine --version
  • docker ps
  • docker ps -a
  • docker run hello-world # 如果能显示:“”,则表示docker安装成功了。
    • Hello from Docker! This message shows that your installation appears to be working correctly.
  • docker run -it -rm ubuntu:latest bash # 启动一个ubuntu,并且进入bash命令行
  • docker run -d -p 80:80 --name webserver nginx # 启动一个Nginx

基本准备之二

拉取镜像:

docker pull mysql

docker pull wordpress

go get 提示 io timeout 的解决之法

本文是一篇对go get不能方便拉取到代码的问题的解决方案总结。


go get -v golang.org/x/text,有一部分 google 的服务器被ZF q了,所以导致无法go get-v 是可以打印执行的过程。

失败的原因就是遇到zf q 的问题了,即便是你设置了全局代理,也是不行的。因为全局代理对命令行不生效。

我们只能对 git 进行单独设置。

1
2
git config —global http.proxy http://127.0.0.1:7777
git config —global https.proxy http://127.0.0.1:7777

可以参考:http://www.cnblogs.com/ghj1976/p/5087049.html 网络请求的 http_proxy 和 git 的 代理 都需要设置才可以。

解决 go get 的问题(写一篇总结的文章)还可以参考另外一篇文章

还需要安装一个 cow 代理软件,然后再配置好 ~/.cow/rc

1
2
listen = http://127.0.0.1:7777
proxy = socks5://127.0.0.1:1080

然后启动 cow(go get 安装到 gobin 目录下,可以直接运行的) 在运行 go get 之前,记得执行:

1
2
export http_proxy=http://127.0.0.1:7777
export https_proxy=http://127.0.0.1:7777

Go 语言反射法则 - The Laws of Reflection

本文是一篇转载文章


Go语言反射法则 - The Laws of Reflection

原文地址:http://blog.golang.org/laws-of-reflection

介绍

反射在计算机的概念里是指一段程序检查自身结构的能力,主要检查类型。它是元编程的一种形式。同样也是引起困扰的重大来源。

在这篇文章里我们试图阐明Go语言中的反射是如何工作的。每种语言的反射模型是不同的(许多语言压根不支持反射),然而本文只与Go有关,所以我们接下来所提到的“反射”都是指Go语言中的反射。

类型(types)与接口(interfaces)

由于反射是建立在类型系统(type system)上的,所以我们先来复习一下Go语言中的类型。

Go是一门静态类型的语言。每个变量都有一个静态类型,在编译时每个类型都明确并固定下来,例如:int, float32, *MyType, []byte 等。