作为一个前端,我一直对于后端的知识云里雾里。感觉是给自己打上了前端的标签后就画地为牢,默默在自己的一亩三分地里耕耘。最近在学习了《全栈工程师修炼指南》课程后,感觉自己像是打开了新世界的大门。
项目本质和结构
前端项目的本质其实就是使用 HTML、JavaScript 和 CSS 将页面渲染出来。无论是 jQuery、Vue、React 等等无论用了何种工具、中间做了何种处理,结果都是一样的。而前端 SPA 应用发展到现在目录结构也趋于类同了。
而对于后端,我理解其实是接收请求、处理数据、存储数据库、输出响应结果的过程。而从课程中我了解到,后端项目很多是基于 MVC 的设计模式的一种实现。大致的结构我参考了 egg.js 框架的文档。
- router 路由管理请求的目的地
- middleware 中间件
- public 用来放静态资源
- view 用来放视图模板文件
- model 放置领域模型
- controller 用来处理接口请求
- service 用来处理业务逻辑
- structure 用来放置定时任务
所以,后端项目和前端一样都是有套路的。
日志
在前端,日志通过浏览器的 Console 面板直接查看。
而在后端,由于后端服务运行时间久、后台运行的特点,所以是以日志文件的形式存放的。每隔一段时间后端日志会被分割以方便查找。
服务集群
之前一直听到集群这类名词感觉非常高大上。说下我的学习理解:
对于前端,前端的代码是一堆静态文件,只有到浏览器拿到后才会由客户端的浏览器去解析。所以对于前端,在服务端只需要做好 CDN,让静态资源文件更快到达客户端就行。
而对于后端,需要接收请求、处理逻辑、存取数据库、返回结果。这些行为都是需要消耗大量服务器资源的。所以单台物理服务器必然有一个承载的极限。那么对于大型系统或者高可用系统而言,自然需要一个服务集群来提供后端服务,再通过负载均衡来给这些机器分配任务。
数据存储
前端很少会有存储大量数据的需求。能用的有 localStorage、sessionStorage、indexdDB 这些。
而对于后端,数据存储是一个非常重要的课题。
首先是数据库,分为关系数据库和 NoSQL。一般场景下使用关系数据库的情况会更多一些。和后端服务一样,单台机器的数据库可以处理和存储的数据是有限的,所以会存在共享数据的分布式存储系统。分布式存储系统有一个 CAP 概念,即一致性、可用性、分区容忍性。如何权衡一致性和可用性需要根据实际场景来决定。
其次是缓存,缓存是缓解数据库压力的有效措施。缓存可以让数据请求响应的速度更快,让数据请求吞吐量变得更大,还可以节省机器资源、保护数据库免受高并发请求导致数据库宕机的风险。