zeroMQ,rabbirMQ,kafka比较

分类:技术文档 - 队列 | 阅读(16) | 发布于:2018-10-10 12:56 | 标签:无

RabbitMq比较成熟,在可用性、稳定性、可靠性上较好。RabbitMQ并发性最高,原因是它的实现语言是天生具备高并发高可用的erlang语言。

Kafka设计的初衷就是处理日志的,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性。Kafka的性能(吞吐量、tps)比RabbitMq要强,两者在这方面没有可比性。

ZeroMQ是一个非常轻量级的消息系统,专门为高吞吐量/低延迟的场景开发,不支持消息持久化。

阅读更多...

MySQL官方Docker镜像的使用

分类:技术文档 - MySQL | 阅读(34) | 发布于:2018-09-28 10:11 | 标签: docker mysql

首先是pull image,这里我拉取的是5.6.35:

sudo docker pull mysql:5.6.35

拉下来以后大可以按照官方的说明无脑启动,但是外部无法访问,所以绑定端口:

sudo docker run --name mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6.35

试着用客户端连接,成功了,查询mysql.user表发现允许从任何地方用root访问,这特么也太不安全了!

果断连接到bash:

sudo docker exec -it mysql bash

运行mysql,竟然有!

下面就是基本的操作,收回root权限,建库,开用户……

等等,数据库文件在哪??还有,字符集不是UTF-8??阅读官方文档,得知/etc/mysql/conf.d下可以自定义配置文件,于是乎自己建了一个my.cnf,重新运行:

sudo docker run --name mysql -p 12345:3306 -v $DOCKER_RUNTIME/mysql/data:/var/lib/mysql -v $DOCKER_RUNTIME/mysql/conf:/etc/mysql/conf.d -d mysql:5.6.35

这里顺便改了数据库文件的目录,$DOCKER_RUNTIME是我自己定义的环境变量,各位可以自行指定。

阅读更多...

两群羊的博弈论

分类:散文阅读 - 科普阅读 | 阅读(183) | 发布于:2018-09-07 20:15 | 标签:无

上帝把两群羊放在草原上,一群在东,一群在西。
上帝还给羊群找了两种天敌,一种是老虎,一种是狼.上帝对羊群说:“如果你们要狼,就给一只,任它随意咬你们。 如果你们要老虎,就给两头,你们可以在两头老虎中任选一头, 还可以随时更换。”
东边那群羊想,老虎凶猛,还是要狼吧。
它们要了一只狼。
西边那群羊想,老虎虽然凶猛,但我们有选择权。
它们就要了两头老虎。
那只狼进了东边的羊群后,就开始吃羊。
狼小食量小。西边那群羊挑选了一头老虎,另一头则留在上帝那里。
这头老虎进入羊群后, 开始吃羊,而且食量惊人。
这样羊群就天天都要被追杀。羊群赶紧请上帝换一头老虎。
不料,上帝保管的那头老虎一直没有吃东西,正饥饿难耐,它扑进羊群,比前面那头老虎咬得更疯狂。
羊群一天到晚只是逃命。
东边的羊群庆幸自己选对了天敌,又嘲笑西边的羊群没有眼光。
西边的羊群非常后悔,要求更换天敌,改要一只狼。
上帝说:“天敌一旦确定,就不能更改。”
西边的羊群只好把两头老虎不断更换,换哪一头都比南边的羊群悲惨得多,它们索性不换了,让一头老虎吃得膘肥体壮,另一头老虎则饿得精瘦。
眼看那头瘦老虎 快要饿死了,羊群才请上帝换一头。
这头瘦老虎经过长时间的饥饿后,慢慢悟出了一个道理:自己虽然凶猛异常,一百只羊都不是对手,可是自己的命运是操纵在羊群手里的。
羊群随时可以把自己送回上帝那里,让自己饱受饥饿的煎熬,甚至有可能饿死。
想通这个道理后,瘦老虎就对羊群特别客气,只吃死羊和病羊。
羊群喜出望外,有几只小羊提议干脆固定要瘦老虎,不要那头肥老虎了。
一只老公羊提醒说:“瘦老虎是怕我们送它回上帝那里挨饿,才对我们这么好。万一肥老虎饿死了,我们没有了选择的余地,瘦老虎很快就会恢复凶残的本性。”
羊群觉得老羊说得有理,为了不让另 一头老虎饿死,它们赶紧把它换回来。
原先膘肥体壮的那头老虎,已经饿得只剩下皮包骨头了,并且也懂得了自己的命运是操纵在羊群手里的道理。
为了能在草原上待久一点,它竟百般讨好起羊群来。西边的羊群终于过上了自由自在的生活。
东边的那群羊的处境却越来越悲惨了,那只狼因为没有竞争对手,羊群又无法更换它,它就胡作非为,每天都要咬死几十只羊, 这只狼早已不吃。
羊肉了,它只喝羊心里的血。它还不准羊叫, 哪只叫就立刻咬死哪只。
东边的羊群哀叹:“早知 道这样,还不如要两头老虎。”
算是博弈论里面比较经典的

阅读更多...

信任和不辜负信任

分类:散文阅读 - 科普阅读 | 阅读(164) | 发布于:2018-09-07 20:15 | 标签:无

大雁与人同飞的视频,有以下注释:第一次看见这个视频时以为就是一段特技剪辑的作品而已。原来这是一部真人真事的电影《伴你高飞》,讲的是一个14岁的加拿大女孩领着16只小雁南飞的故事。
小女孩艾米在树丛里发现了16只刚刚破壳的小野雁,它们把艾米当成了妈妈(第一个见到的动物),将艾米团团围住,艾米去哪儿,就跟到哪儿。
从此艾米就当上了“雁妈妈”,和父亲(滑翔机爱好者)一起照顾着这些小雁。
时间过得很快,小雁渐渐长大。
问题是,小雁并不是长大后自己就能飞行,必须得到父母的指导,到了秋天,它们只有跟随父母飞行,才能顺利迁徙到南方。
怎么办?
艾米的父亲突发奇想:制作一台飞行速度和大雁相当的滑翔机,用滑翔机教它们飞翔。
可是,这群小雁只是拍了几下翅膀,依然留在地上:它们只认艾米。
于是,艾米父亲又做了个疯狂的决定:把小艾米训练成一名飞行员,由艾米领着野雁飞去南方。
艾米父亲还找到鸟类专家,设计了迁徙的路线,
中间历经曲折,也有很多趣事,……
这是从未有人做过的尝试,这是大多数人想都不敢想的旅程:两个人、两架飞机、16只大雁,从加拿大飞到美国……
让人欣慰的是,第二年春天,艾米的雁群自行北返,全部16只,都回到了艾米家的阳台。

阅读更多...

Redis 分库

分类:技术文档 - Linux | 阅读(480) | 发布于:2018-07-24 15:35 | 标签:无

Redis 可以分库,相当于 MySQL 中的 database。控制数据库总数在 redis配置文件中设置,默认是 16 个。数据库名称是整数索引标识,而不是由一个数据库名称字符串。

选择数据库用 select 命令
redis>select 2
OK 

reidis 中的操作,默认是 数据库 0;
每个数据库都有属于自己的空间,不必担心数据库之间的key冲突。

阅读更多...

mysql中日期类型DATETIME和TIMESTAMP的区别

分类:技术文档 - MySQL | 阅读(581) | 发布于:2018-05-11 10:27 | 标签: DATETIME TIMESTAMP

在实际应用的很多场景中,mysql的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。

1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。

2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。

3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。

4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

阅读更多...

Ubuntu下netBeans字体有锯齿解决办法

分类:技术文档 - Linux | 阅读(555) | 发布于:2018-05-08 11:06 | 标签: 锯齿 netbeans

编辑netBeans配置文件,“/home/lxc/netbeans-8.2/”为安装路径,根据个人情况替换。

mangniao@Jenny:~$ sudo gedit /home/lxc/netbeans-8.2/etc/netbeans.conf

查找“netbeans_default_options”,在结尾处添加

 -J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=on

注意:参数要添加到双引号内部。

保存,重启netBeans,这样就去掉了难看的锯齿,

阅读更多...

深入解析Mysql 主从同步延迟原理及解决方案

分类:技术文档 - MySQL | 阅读(723) | 发布于:2018-04-23 18:54 | 标签: 主从同步 主从延迟 mysql

MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。

相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢?

1. MySQL数据库主从同步延迟原理。

2. MySQL数据库主从同步延迟是怎么产生的。

3. MySQL数据库主从同步延迟解决方案。

1. MySQL数据库主从同步延迟原理。

答:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和 DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步, 问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺 序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要 执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。有朋友会问:“主库上那个相同的DDL也需要执行10分,为什 么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。

2. MySQL数据库主从同步延迟是怎么产生的。

答:当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,当然还有就是可能与slave的大型query语句产生了锁等待。

3. MySQL数据库主从同步延迟解决方案

答:最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行。还有就是主库是写,对数据安全性较高,比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也 可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。

mysql-5.6.3已经支持了多线程的主从复制。原理类似,是以表做多线程,Oracle使用的是以数据库(schema)为单位做多线程,不同的库可以使用不同的复制线程。

sync_binlog=1

This makes MySQL synchronize the binary log’s contents to disk each time it commits a transaction

默认情况下,并不是每次写入时都将binlog与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢 失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘 同步。即使sync_binlog设置为1,出现崩溃时,也有可能表内容和binlog内容之间存在不一致性。如果使用InnoDB表,MySQL服务器 处理COMMIT语句,它将整个事务写入binlog并将事务提交到InnoDB中。如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍 然存在binlog中。可以用--innodb-safe-binlog选项来增加InnoDB表内容和binlog之间的一致性。(注释:在MySQL 5.1中不需要--innodb-safe-binlog;由于引入了XA事务支持,该选项作废了),该选项可以提供更大程度的安全,使每个事务的 binlog(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步,该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从binlog剪切回滚的 InnoDB事务。这样可以确保binlog反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收 回滚的语句)。

附加:
sync_binlog 配置说明:
sync_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。
从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

innodb_flush_log_at_trx_commit (这个很管用)

抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。

阅读更多...

Confluence系统迁移安装

分类:技术文档 - Linux | 阅读(577) | 发布于:2018-01-24 15:59 | 标签: confluence

前置:
confluence是由java的tomcate启动运行的。所以请先配置java jdk环境。
默认端口8090也需提前预留出来。

一、下载解压文件

cd /usr/local/src/

wget -c ftp://192.168.48.225/soft/atlassian-confluence-6.3.2.tar.gz

tar zxvf atlassian-confluence-6.3.2.tar.gz

mv atlassian-confluence-6.3.2 /usr/local/

cd /usr/local/

ln -s atlassian-confluence-6.3.2/ confluence

cd confluence/


二、拷贝mysql链接驱动文件到服务器

cp  mysql-connector-java-5.1.43-bin.jar  /usr/local/confluence/confluence/WEB-INF/lib/


三、配置confluence的数据目录

cd /usr/local/confluence/confluence/WEB-INF/classes/

修改confluence.home的配置

vim confluence-init.properties

confluence.home=/usr/local/confluence/confluence_home

创建confluence的数据目录

mkdir /usr/local/confluence/confluence_home

说明:confluence程序是分安装目录和数据目录的。一般指定数据目录位置,以便后续迁移或恢复程序。


四、启动confluence程序

cd /usr/local/confluence

./bin/start-confluence.sh


五、打开浏览器配置安装

浏览器打开地址:http://192.168.48.224:8090

1。选择默认语言及安装方式 product install

2。插件(直接下一步吧)

3。授权码:打开链接 获得试用授权 后,先注册my.atlassian.com的账户(注册需要用到google的图片验证码,请翻墙打开页面),然后获取免费的授权码,并填入。如果之前选择了插件的,也需申请插件的授权码。

4。选择数据库设置 : 外部数据库-Mysql

5。配置数据库 :
            JDBC连接

            填入     类驱动名称 /数据库URL / 用户名  / 密码

            数据库URL值: jdbc:mysql://192.168.48.225/confluence?useUnicode=true&characterEncoding=utf8&sessionVariables=tx_isolation='READ-COMMITTED'

                          说明: 请先创建该数据库 :CREATE DATABASE `confluence` CHARACTER SET utf8 COLLATE utf8_bin; 老的字符集就是这个utf8_bin

                                     支持中文:useUnicode=true&characterEncoding=utf8

                                     mysql设置隔离级别READ-COMMITTED :sessionVariables=tx_isolation='READ-COMMITTED'

6。加载内容  

         选择 空白站点 或 备份导入 的方式

         此处选择 备份导入的方式继续。备份导入的文件是由之前的系统备份数据而来的ZIP文件包。

         备份文件必须复制至/usr/local/atlassian-confluence-6.3.2/confluence_home/restore目录中

         选择还原

7。等。继续等。

8。完成安装。


六、配置反向代理访问

默认tomcate启动的是8090端口。当然,这个也可以改。

此处使用nginx反向代理绑定域名来访问,具体nginx代理配置:

server {
    listen 80;
    server_name wiki.ggt.sina.com.cn;

    location / {
        internal;
        proxy_pass http://127.0.0.1:8090;
        proxy_connect_timeout 30s;
        proxy_send_timeout 120;
        proxy_read_timeout 120;
        proxy_buffer_size 32k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_redirect off;
        proxy_hide_header Vary;
        proxy_set_header Accept-Encoding '';
        proxy_set_header Host $host;
        proxy_set_header Referer $http_referer;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

阅读更多...

Ubuntu16.04 root用户登录没有声音的解决方法

分类:技术文档 - Linux | 阅读(908) | 发布于:2017-11-30 13:03 | 标签: 声音

Ubuntu16.04 root用户登录没有声音的解决方法  

备注:
1)Ubuntu Desktop版本:16.04
2)Linux工作用户:root

1. 临时方法
在终端中执行命令:
pulseaudio --start --log-target=syslog

2. 永久方法
将上面的命令添加到用户启动脚本中:
pulseaudio --start --log-target=syslog

阅读更多...