在生产系统中,数据库的备份是必要的,否则当服务器被攻击,硬盘坏掉,运维误删等原因将数据库干掉的时候就欲哭无泪了。
备份MongoDB数据库常见的方式有三种:
- 使用[MongoDB管理服务(MMS)(https://mms.mongodb.com/)进行云备份
- 使用文件系统快照
- 使用MongoDB自身的mongodump工具
本文介绍第三种简单的备份,对于备份数据量不是太大的数据库还是很有效的。
在生产系统中,数据库的备份是必要的,否则当服务器被攻击,硬盘坏掉,运维误删等原因将数据库干掉的时候就欲哭无泪了。
备份MongoDB数据库常见的方式有三种:
本文介绍第三种简单的备份,对于备份数据量不是太大的数据库还是很有效的。
电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单、信誉分析,进而根据用户ip信誉权重做相应的流量拦截、限制流量。
Nginx自身有的请求限制模块ngx_http_limit_req_module、流量限制模块ngx_stream_limit_conn_module基于令牌桶算法,可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制。
对于提供下载的网站,肯定是要进行流量控制的,例如软件下载站、视频服务等。
它也可以减少一些爬虫程序或者DDOS的攻击。
对这两个模块的介绍的文章也不少,这里转载一篇hopestar的文章: nginx限制IP连接数的范例参考, 因为他介绍的很简洁。
下面文章的limit_zone指令已经被弃用,请用limit_conn_zone替换
最近创建了一个Centos 7的虚拟机,使用的是virtualbox 版本 5.0.6 r103037。
安装了增强包之后,依然无法挂载共享文件夹,报错如下:
1 | [...]# mount -t vboxsf share /mnt/share |
用redhat 6.4是正常的。
stackoverflow有人也遇到了这个问题,解决办法如下:
1 | modprobe -a vboxguest vboxsf vboxvideo |
特别记录下来以备将来查询。
你也可以在/etc/modules-load.d/创建要加载的模块,一个文件加载一个模块,如:
1 | /etc/modules-load.d/vboxsf.conf |
这样启动的时候就将相应的模块加载进来了。
Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源。正如DockerPool在免费Docker电子书Docker —— 从入门到实践中这样提到的:
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方式。一个信号就是一个异步的通知,发送给某个进程,或者同进程的某个线程,告诉它们某个事件发生了。
当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。
如果目标进程先前注册了某个信号的处理程序(signal handler),则此处理程序会被调用,否则缺省的处理程序被调用。
Go 1.5以前,交叉编译程序还是有一点麻烦的,你需要massive scripts t来编译和宿主机器不同的程序。
正如 comes with support for all architectures built in文章中介绍的, Go 1.5可就简单的多了,你只需设置 GOOS 和 **GOARCH ** 两个环境变量就能生成所需平台的Go程序。
比如使用下面的代码测试:
1 | package main |
编译它: $ GOOS=darwin GOARCH=386 go build test.go
就可以生成运行在OS X上的程序。
序列化库在网络传输,RPC,数据库访问等环境中经常用到,它的性能的好坏直接影响着整个产品的性能。
本文列出了几种高性能的Go语言的序列化库,并通过一个简单的无循环引用的数据结构测试它们的性能。
测试代码: gosercomp at github
03/14/2016 更新。 增加Thrift/Avro/Gencode的性能比较。
原文: The Laws of Reflection
翻译: 反射的规则 by mikespook 转载时略作修改
在运行时反射是程序检查其所拥有的结构,尤其是类型的一种能力;这是元编程的一种形式。它同时也是造成混淆的重要来源。
在这篇文章中将试图明确解释在 Go 中的反射是如何工作的。每个语言的反射模型都不同(同时许多语言根本不支持反射)。不过这篇文章是关于 Go 的,因此接下来的内容“反射”这一词表示“在 Go 中的反射”。
goreq是一个极其简单的流式golang http client。它是我寻找类似Java OKHttp库的golang http client库时创建的。
最原始的代码fork自gorequest,它实现了Node.js库SuperAgent类似的功能。但是gorequest有一些bug没有fix,用户也提出了一些新的特性没有支持。
我重构了代码,更正了一些bug,增加了新的特性,尤其是POST BODY现在可以支持任意类型, 不再局限于json或者form字符串格式。 因为改动比较大,不好提交pull requests,干脆创建了一个新的轮子。这就是这个项目的最初目的。
比如下面调用baidu API根据IP地址获取地理信息的例子:
1 | headers := `{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0", |
原文:Drag and Swipe with RecyclerView Part Two: Handles, Grids, and Custom Animations
翻译:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0724/3219.html by 泡在网上的日子
在第一部分,我们介绍了ItemTouchHelper,以及ItemTouchHelper.Callback 的实现,在线性列表(RecyclerView)中添加基本的拖拽&拖放与滑动删除。本文将在前文例子的基础上扩展,增加对grid布局的支持,处理拖拽的初始化,提示被选中的view,同时自定义滑动的动画。