go语言实战-----32-----(网站)架构分析、要点分析、模块分析、前后端解耦---REST API设计,包括用户、视频、评论--- 数据库设计,包括用户、视频、评论、会话、待删除视频

go流媒体网站技术要点

  • 1)前后端分离的系统架构设计。
  • 2)RESTful风格API设计与实现。
  • 3)Go实现web服务。
  • 4)系统的服务化解耦。
  • 5)go的channel和并发模型的实践。
  • 6)使用go原生template完成web UI的实现。

1 前后端分离的系统架构设计

1.1 总体架构:

  • 1)客户端先发送请求到前端服务进行处理。
  • 2)前端服务收到请求后,直接转发或者包装一下请求,然后通过API接口层发送到后端的不同服务。
  • 3)API接口层,可以认为是一个中间层。负责转发、调度给不同的后端服务处理。同时暴露出来,也可以作为第三方SDK提供给别人进行二次开发。
  • 4)DB、Streaming、Scheduler都是不同的后端服务。DB主要负责数据库对接,Streaming则是处理视频数据,Scheduler则是时间表,可以定时处理一些任务,例如定时删除视频等等。
    如果你想增加后端的其它服务,可以看到,类似DB、Streaming、Scheduler同级服务即可,非常方便。
    go语言实战-----32-----(网站)架构分析、要点分析、模块分析、前后端解耦---REST API设计,包括用户、视频、评论--- 数据库设计,包括用户、视频、评论、会话、待删除视频_第1张图片

1.2 什么是前后端解耦

  • 1)前后端解耦是时下流行的Web网站架构。
  • 2)前端页面和服务通过普通的Web引擎渲染。
  • 3)后端数据通过渲染后的脚本调用后处理呈现。

1.3 前后端解耦的优势

  • 1)解放生产力。
    例如前后端可以各自开发自己的逻辑,不会出现前端要处理后端的事情,后端要处理前端的事情。

  • 2)松耦合的架构更灵活,部署更方便,更符合微服务的设计特性。
    前后端分离后,都是模块化设计,更好架构更简单,例如前端原本是vue框架,那么换成reator框架是非常方便的。若前后端不分离,想更换框架是非常困难的。

  • 3)性能的提升、可靠性的提升。
    因为前后端分离后,容易添加其它模块,而一般前端的请求都是会经过中间过滤层(网关),再到达后端,所以当有攻击到来也只是会先攻击网关,即使网关宕机了,我们的后端程序也不会出现太大问题。
    若前后端不分离,请求直达后端服务,由于缺少中间层保护,安全性大大降低,程序崩溃风险加大,那么你的公司很容易就会出现破产的情况,这是万万不可的。

1.4 前后端解耦的缺点

  • 1)工作量大。
  • 2)前后端分离带来团队成本以及学习成本。
  • 3)系统复杂度加大。

但是针对缺点,优势是更加重要的,所以缺点肯定要被忽略的。

2 REST API设计,包括用户、视频、评论

2.1 RESTful风格API设计与实现

  • 1)REST是Representational State Transfer(表现层状态转移)的缩写,常用的行为(查看(view),创建(create),编辑(edit)和删除(delete))都可以直接映射到HTTP 中已实现的GET,POST,PUT和DELETE方法。

  • 2)通常使用Json作为数据封装格式。

  • 3)统一接口。

  • 4)无状态。
    有状态和无状态的区别:服务器端是否保存两个相同请求者的请求在服务器端是否具有上下文关系。如果是有状态,则服务器会保存请求的相关信息,每个请求可以默认使用以前的请求信息。如果是无状态(我们使用这种),服务器端所能处理的过程必须全部来自于请求所携带的信息。cookie便是有状态的一种产物,cookie有sessionID,并设置超时时间,对应服务端,在内存维护一个sessionID的上下文内容。

    选择无状态的原因:可以减少服务器的存储压力,将sessionID放到浏览器中存储。当浏览器第一次请求时,不用附带sessionID,服务器验证成功返回sessionID给浏览器,浏览器保存该sessionID。当浏览器第二次请求时,就需要附带该sessionID进行请求。

  • 5)可缓存。

2.2 API设计原则

  • 1)以URL(统一资源定位符)风格设计API。
  • 2)通过不同的Method(GET/POST/PUT/DELETE)来区分对资源的CURD。
  • 3)返回码(Status code)符合HTTP资源描述的规定。

例如。
go语言实战-----32-----(网站)架构分析、要点分析、模块分析、前后端解耦---REST API设计,包括用户、视频、评论--- 数据库设计,包括用户、视频、评论、会话、待删除视频_第2张图片

2.2.1 API设计:用户

go语言实战-----32-----(网站)架构分析、要点分析、模块分析、前后端解耦---REST API设计,包括用户、视频、评论--- 数据库设计,包括用户、视频、评论、会话、待删除视频_第3张图片

2.2.2 API设计:视频

go语言实战-----32-----(网站)架构分析、要点分析、模块分析、前后端解耦---REST API设计,包括用户、视频、评论--- 数据库设计,包括用户、视频、评论、会话、待删除视频_第4张图片

2.2.3 API设计:评论

go语言实战-----32-----(网站)架构分析、要点分析、模块分析、前后端解耦---REST API设计,包括用户、视频、评论--- 数据库设计,包括用户、视频、评论、会话、待删除视频_第5张图片

3 数据库设计,包括用户、视频、评论、会话、待删除视频

我们直接看sql语句,看看数据库的表是如何设计的。

// 1. 用户
CREATE TABLE `video_server`.`users` (
`id` int unsigned primary key auto_increment,
`login_name` varchar(64) unique key,
`pwd` text
);

// 2. 视频
CREATE TABLE `video_server`.`video_info` (
`id` varchar(64) NOT NULL,
`author_id` int(10) NULL,
`name` text NULL,
`display_ctime` text NULL,
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);

// 3. 评论
CREATE TABLE `video_server`.`comments` (
`id` varchar(64) NOT NULL,
`video_id` varchar(64) NULL,
`author_id` int(10) NULL,
`content` text NULL,
`time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);

// 4. 会话
CREATE TABLE `video_server`.`sessions` (
`session_id` varchar(244) NOT NULL,
`TTL` tinytext NULL,
`login_name` text NULL,
PRIMARY KEY (`session_id`)
);

// 5. 待删除视频表
CREATE TABLE `video_server`.`video_del_rec` (
`video_id` varchar(64) NOT NULL,
PRIMARY KEY (`video_id`)
);

你可能感兴趣的:(Go,go)