TypeCodes

分布式系统:一致性hash算法的应用

前段时间在了解分布式,发现firefoxbug在博客中写的这篇《一致性hash在分布式系统中的应用》对这个问题说明得比较清晰易懂,本文主要是自己的理解和实践。

在后端一般会遇到这样的场景:随着应用系统的访问量或者DB/文件存储系统的数据量增大,系统由于负载增大而出现响应延迟甚至down掉的情况。为了解决这个问题,往往会对系统采用垂直扩展和水平扩展的架构设计,而分布式系统正是水平扩展架构的一种应用实践。

1 分布式系统要求

分布式设计的初衷就是为了解决单一服务端负载过大的问题,所以在对系统做水平扩展后,数据要尽量均匀地分布在每台服务器节点的上(即不会出现热点数据节点)。其次,如果后期需要扩容或者某一节点发生故障需要从集群中剔除 …

- 阅读剩余部分 -

使用shell脚本解决Navicat导出excel数据不全的问题

月末需要对系统注册用户进行报表统计,在使用Navicat从MySQL数据库中导出数据到excel文件时,发现最大只能导出为65536(美好的数字)行的数据。按理说 Navicat应该是从数据库中读取一条记录会立即写到excel文件中,不应该只读取65536范围内的数据然后一次性写到文件里面。

1 问题转换

鉴于Navicat的限制,只能想想其它办法了,这里选择使用shell脚本来处理。如下图所示,在Navicat中对select出来的数据右键,然后选择复制为-制表符分隔值(字段名和数据)把select出来的数据粘贴到任意文本文档中 …

- 阅读剩余部分 -

修复CentOS7升级Python到3.6版本后yum不能使用的问题

之前把现有这台阿里CentOS7.2系统的Python2.7.5升级成Python3.6后,yum工具就不能使用了。当时网上查了下原因,都说是Python3导致的,但是试了很多种方法还是没解决,后面也就一直没管了。因为最近要弄一个Nodejs微信小程序,需要用yum安装一些开发工具,就不得不修复这个问题了。

CentOS7.2中Python3版本导致yum不能使用

1 yum工具报错情况

直接执行yum命令就会提示/usr/bin …

- 阅读剩余部分 -

Linux C/C++多进程同时写一个文件(三)

本文是这《Linux C/C++多进程同时写一个文件》系列文章的第三篇,上一篇文章演示了两个亲缘关系的进程(父子进程)同时写一个文件的情形,并得出了数据只会错乱但不会覆盖的结论。这篇文章主要是在第一篇文章的基础上,加上上篇文章的分析,更深下一步地探索两个非亲缘关系的进程同时写一个文件的问题。

1 查看要写入的文件的inode信息 …

- 阅读剩余部分 -

Linux C/C++多进程同时写一个文件(二)

本文是这《Linux C/C++多进程同时写一个文件》系列文章的第二篇,上一篇文章演示了两个非亲缘关系的进程同时写一个文件的情形,并得出了数据只会错乱但不会覆盖的结论。这篇文章主要是讨论两个亲缘进程(fork)同时写一个文件的情况。

1 查看要写入的文件的inode信息

使用如下命令可以查看要写入的文件LINUX_MUTIL_PROCESS_WRITE对应的inode情况,可以看到它的值为 …

- 阅读剩余部分 -

Linux C/C++多进程同时写一个文件(一)

近期会写关于《Linux C/C++多进程同时写一个文件》的系列文章,主要是探索在Linux下非亲缘关系的多进程和具有亲缘关系的多进程同时写一个文件的问题。例如,当两个进程同时写一个文件,那么写入结果是怎样的呢?是否会出现数据丢失的情况?是否会出现覆盖?是否会出现错乱?

本文是这一系列文章的第一篇,通过两个非亲缘关系的进程演示同时写一个文件的情形,最终得出结论、回答上面的问题。

1 查看要写入的文件的inode信息

使用如下命令可以查看要写入的文件 …

- 阅读剩余部分 -

Linux C++简单实现一个批量插入的sql脚本生成工具

之前项目上隔三差五地要手工批量导入一些数据,于是自己用C++写了这个sql脚本文件的生成工具。

Linux C++简单实现一个批量插入的sql脚本生成工具

1 需求说明

批量插入多个用户收费信息,也就是用户id不同,但是包括所属区域代号、收费模式和费率值等数据是相同的。如果使用手工拼接insert语句工作量很大,而且可能出现差错,所以改用程序来生成。

只需要配置好相关参数,然后直接执行程序就可以把生成的sql脚本交给DBA处理了。

2 C++程序

代码比较简单,从main函数中可以看出主要流程是先读取配置文件(见小节3 …

- 阅读剩余部分 -