Golang服务端技术笔记

Golang服务端技术笔记

总结使用Golang开发服务端时,使用的基础的工具和部署方式。用于思考不足并优化,提升编码效率。 总体上采用MVCS的软件模式,如下图:

MVCS模式

从图中可以看出,MVCS是从MVC进化而来,相比于MVC,增加了Service层。把业务逻辑从Controller层中抽离出来,这样做的好处在于,项目日益庞大之后,将某些功能独立出来。

Golang工具 #

“gvt” 依赖管理工具 “httprouter” 路由及中间件配置 “schema” 解析请求参数到结构体 “beego/validation” 结构体校验工具 “github.com/go-redis/redis” redis操作库 “github.com/go-sql-driver/mysql” Mysql Driver

文件结构 #

--Golang Project
    |-sh            # shell脚本,包括数据库脚本
    |-config        # 配置文件
    |-logs          # 日志文件
    |-vendor        # 项目源码及依赖
    |  |-github.com #
    |  |-mainfest   # gvt 依赖管理文件
    |  |-app
    |     |-utils
    |     |-controllers
    |     |-models
    |     |-route
    |     |-services
    |-Dockerfile    # docker构建镜像配置文件
    |-docker-compose.yml # docker-compose.yml文件
    `-entry.go      # web服务入口文件

部署方式 #

采用docker来部署应用。分别编写Dockerfile和docker-composer.yml文件,实例如下:

Dockerfile #

####
# build
####

FROM golang:1.9-alpine AS build

WORKDIR /go/src/web-server

COPY ./entry.go ./
COPY ./vendor ./vendor

RUN CGO_ENABLED=0 GOOS=linux ARCH=amd64 go build -o web-server entry.go

####
# deploy
####

FROM alpine

WORKDIR /usr/src/web-server

COPY --from=build /go/src/web-server/web-server ./
COPY ./config ./

RUN mkdir ./logs

EXPOSE 9090

# CMD ["./web-server", "--conf ./config/config.json"]

打包镜像的方法如下: docker build -t web-server:release . -f Dockerfile

docker-compose.yml配置 #

version: "2"
services:
  web:
    image: web-server:release
    container_name: ${SERVER_NAME}
    links:
      - postgres:postgres
    volumes:
      - ./logs:/usr/src/web-server/logs
    ports:
      - 9090:9090
  postgres:
    image: postgres:9.4
    container_name: postgres
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: ${USER_PWD}
      POSTGRES_USER: ${USER}
      POSTGRES_DB: ${$DB_NAME}

简单解释:

links:采用容器内联的方式来通信,如此便可以在web-server容器中,访问HOST=postgres来访问postgresql数据库 volumes:挂载宿主机上文件或者文件夹到容器内,以便完成数据持久化

数据库选择 #

no Sql选用Mongo,Redis(缓存系统)

Sql选用Postgre或者MySql

访问量 访客数