秒杀架构设计

秒杀业务与难点 秒杀业务在各业务中已然非常流行,这里我将互联网行业中的秒杀定义为: 在非常短的时间内,将一件商品分成多份进行购买的行为。 微信抢红包、一元夺宝、双11大促抢购等业务本质上都可视作秒杀业务。 而最近大热的抢红包的难度在于这是和钱打交道的秒杀场景,对于事务的要求性更高。 秒杀业务优化的难点或者说痛点在于: 同一件商品在同一时间段内有非常多的用户去进行抢夺,从而造成服务器资源的紧张。 非秒杀情况下,比如非大促的时候,用户购买的体验都是非常不错的。 但是在秒杀场景下,这时意味着多个用户在同时抢一件商品,也就是并发很高, 但集中在同一商品上,造成实质为串行操作。因为在数据库这层 ...

分支和主干jar差异shell

分支和主干jar差异 脚本文件见附件,可以快速了解本次分支修改,便于发布前比对当前的开发分支和主干jar差异情况。 将jar-diff.sh放在根目录文件下面。 #!/bin/bash # 获取当前git分支 CURRENT_BRANCH=`sh -c 'git branch --no-color 2>/dev/null' | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'` if [ -n "$CURRENT_BRANCH" ]; then # 当前分支不为空 APP_NAME=`cat .git/config | grep ...

使用Docker构建Apollo

Apollo 编译打包 Apollo的Github网址,编译打包构建 可参考分布式部署指南。 由于只有一台服务器,采用docker构造伪分布式的方式搭建,脚本链接可见 Dockerfile 构建文件 FROM maven:alpine MAINTAINER Swire Chen <idoop@msn.cn> ENV VERSION=1.1.1 \ PORTAL_PORT=8070 \ DEV_ADMIN_PORT=8090 \ FAT_ADMIN_PORT=8091 \ UAT_ADMIN_PORT=8092 \ P ...

分布式一致性Raft算法

本文是转载的论文翻译,Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法, 而且 raft 算法比 Paxos 算法更易懂且更容易实现。本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想。 摘要 Raft 是用来管理复制日志(replicated log)的一致性协议。它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同。 这使得 Raft 比 Paxos 更容易理解并且更容易在工程实践中实现。为了使 Raft 协议更易懂,Raft 将一致性的关键元素分开, 如 leader 选举、日志复制和安全性,并且它 ...

使用Docker构建Codis

构建Codis的Docker镜像 Codis的Github网址,默认的Dockerfile打包后的文件过大,将近800M。 使用Docker multi-stage build多阶段构建机制,编译alpine版本的codis,使用阿里云的软件源,加速依赖安装,然后设置时区为上海,打包后200M左右,修改Dockerfile如下。 FROM golang:1.10.3-alpine3.8 as builder ENV GOPATH /go ENV CODIS ${GOPATH}/src/github.com/CodisLabs/codis ENV PATH ...

Spock 基于BDD测试

Spock测试框架基于Groovy并吸收了Junit、TestNG、Mockito等测试框架的优点。 Spock编写的单元测试层次清晰,代码量少,可读性好,Groovy最终会编译为class文件,支持各种集成开发环境(eclipse,Intellij Ieda), 尤其是Intellij idea已经集成支持Groovy的插件,也支持maven-surefire-plugin、jacoco等maven插件。 Spock官网,必读书籍《Java Testing with Spock》, 如要速成只需要阅读以下两篇文章 5分钟入门Groovy 一篇非常详尽的介绍Spock的 ...

使用Docker Swarm Mode创建集群

能使用Docker Machine的前提是宿主机需要是物理机,云主机目前不支持Docker Machine的创建。 Virtualbox 安装 步骤可参考 cd /etc/yum.repos.d wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo yum install VirtualBox-5.2 Docker Machine 安装 命令行安装docker-machine base=https://github.com/docker/machine/releases/ ...