项目技术栈选择 | 青训营笔记

197 阅读7分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天 关于青训营最后的大项目“极简抖音”。经过我们团队的商量打算使用如下技术栈:

框架:

服务器相关:

中间件相关:

数据库:

建议大家使用go mod搭建环境

go env -w GO111MODULE=on 
go env -w GOPROXY=https://goproxy.cn,direct # 设置国内下载源,这样的话下载包很快

Gin

简介

Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点,对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范

入门文档

www.topgoer.com/gin%E6%A1%8…

一个简单的服务器

package main
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
 
func main() {
	r := gin.Default()
	r.GET("/", func(c *gin.Context) {
		c.String(http.StatusOK, "搭建完成")
	})
	r.Run(":8888")  // 端口号8888
}

项目中的用途

做Http服务器用来进行接口之间的通信。

Gorm

简介

特性

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

GORM 官方支持的数据库类型有:MySQL, PostgreSQL, SQLite, SQL Server 和 TiDB

入门文档

gorm.io/zh_CN/docs/…

项目中的用途

使用Gorm对数据库进行操作,而且使用GORM可以有效避免业务代码出现SQL注入的问题。

Nginx

简介

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强。

入门文档

www.imooc.com/wiki/nginxl…

ubuntu下的安装

安装依赖

sudo apt-get update                # 更新下apt源
sudo apt-get install gcc           # Nginx必备
sudo apt-get install make          # 编译安装需要make工具
sudo apt-get install libz-dev
sudo apt-get install libpcre3-dev
sudo apt-get install libssl-dev

通过apt安装

sudo apt-get install nginx

查看是否安装成功

nginx -v
sudo service nginx start

nginx文件安装完成之后的文件位置:

  • /usr/sbin/nginx:主程序
  • /etc/nginx:存放配置文件
  • /usr/share/nginx:存放静态文件
  • /var/log/nginx:存放日志 可能遇到的问题 如果启动失败,显示See "systemctl status nginx.service" and "journalctl -xe" for details. 使用一下命令
$ nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

如果你的配置文件有问题,也能从错误信息中看出来:

a duplicate default server for [::]:80 in /etc/nginx/nginx.conf:41


netstat -nap | grep 端口号,查询端口被那个进程所占用 然后 一般是可能是80 被占用了,导致启动不了。 可以干掉这端口然后启动。

sudo fuser -k 80/tcp

或者从配置文件中修改端口号。

项目中的用途

提供静态资源服务

vsftpd

简介

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSDSolaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

安装配置

juejin.cn/post/684490…

项目中的用途

搭建FTP服务器,存储投稿的视频

ffmpeg

简介

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPLGPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

安装

sudo apt-get install ffmpeg

项目中的用途

处理视频的编码解码以及封面截取。

goftp

简介

goftp 旨在成为一个高级 FTP 客户端,在服务器支持时利用有用的 FTP 功能。

  • 用于并行传输/遍历的连接池。

  • 自动恢复中断的文件传输。

  • 显式和隐式 FTPS 支持(仅 TLS,无 SSL)。

  • 支持 IPv6。

  • 针对 pure-ftpd 和 proftpd 运行的相当不错的自动化测试。

项目中的用途

将go连接到ftp服务器中

Redis

简介

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

相比于其他数据库类型,Redis具备的特点是:

  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本

安装

sudo  apt-get install redis-server

查看redis服务的状态为running,说明安装完成系统自动启动了服务

service  redis-server status

开启远程连接:

找到/et/redis/redis.conf文件修改如下   ,注释掉  127.0.0.1   #bind 127.0.0.1,如果不需要远程连接redis则不需要这个操作。

找到/et/redis/redis.conf文件修改如下   ,添加  requirepass 123456(密码设置为123456)

启动:   sudo service redis-server start

停止:      sudo service redis-server stop

重启:      sudo service redis-server restart

项目中的用途

存储读写次数比较多的数据,比如点赞喜欢等操作的数据。

RabbitMQ

简介

RabbitMQ是一款使用Erlang语言开发的,实现AMQP(高级消息队列协议)的开源消息中间件。首先要知道一些RabbitMQ的特点:

  • 可靠性。支持持久化,传输确认,发布确认等保证了MQ的可靠性。
  • 灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。
  • 支持集群。多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
  • 多种协议。RabbitMQ支持多种消息队列协议,比如 STOMP、MQTT 等等。
  • 支持多种语言客户端。RabbitMQ几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
  • 可视化管理界面。RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker。
  • 插件机制。RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。

安装

RabbitMQ安装,首先要安装erlang依赖,版本对应图。

image.png 通过erlang官网直接下载安装包

再从github上面下载RabbitMQ 注意版本对应

MySQL

简介

MySQL: 是最流行的关系型数据库管理系统,用于持久化的存储数据到硬盘,功能强大,但是速度较慢 Redis:是缓存数据库,用于存储使用较为频繁的数据到缓存中,读取速度快。

安装

参考该链接

SQL学习推荐

SQL语句练习