秒杀业务与难点
秒杀业务在各业务中已然非常流行,这里我将互联网行业中的秒杀定义为:
在非常短的时间内,将一件商品分成多份进行购买的行为。
微信抢红包、一元夺宝、双11大促抢购等业务本质上都可视作秒杀业务。
而最近大热的抢红包的难度在于这是和钱打交道的秒杀场景,对于事务的要求性更高。
秒杀业务优化的难点或者说痛点在于:
同一件商品在同一时间段内有非常多的用户去进行抢夺,从而造成服务器资源的紧张。
非秒杀情况下,比如非大促的时候,用户购买的体验都是非常不错的。
但是在秒杀场景下,这时意味着多个用户在同时抢一件商品,也就是并发很高,
但集中在同一商品上,造成实质为串行操作。因为在数据库这层
...
常用架构分析
常用经典架构分析,了解设计思路和注意问题
1、架构师技能和微服务架构图谱
2、秒杀架构设计
分支和主干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
...
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 算法是可以用来替代 Paxos 算法的分布式一致性算法,
而且 raft 算法比 Paxos 算法更易懂且更容易实现。本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想。
摘要
Raft 是用来管理复制日志(replicated log)的一致性协议。它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同。
这使得 Raft 比 Paxos 更容易理解并且更容易在工程实践中实现。为了使 Raft 协议更易懂,Raft 将一致性的关键元素分开,
如 leader 选举、日志复制和安全性,并且它
...
构建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测试框架基于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 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/
...