go9
项目课程样例代码仓库, 所有的项目都会放到这个仓库里面, 所有项目集中在一起方便查看与管理
自己写项目或者练习的时候, 使用独立代码仓库
该仓库配套适配视频一起观看, 每天都会有一个对于的tag,
比如看项目课第一天的适配,配套的代码就是 day01 tag
前提
- 语法
- 脚本化编程能力
- 开发简单项目的能力
- Gin
- Http标准库
- sql原生用法
- gorm 的使用
- 编写简单的 HTTP API
- oop 面向对象编程的思想
介绍
项目分为3个阶段, 前面2个阶段: 以标准的后端开发为主, 阶段3准备针对运维
纯后端开发: 角色划分的很细(微服务团队, 一个功能包含所有角色)
- 产品 (需求), 业务流程设计, 产品原型(草稿)
- UI/UE 产品界面设计(高保真, 这个时候的页面,最终的成品已经非常一致)
- 项目架构设计, 把业务流程 拆解成不同的服务, 每个服务的功能
- 开发阶段(前后端分离)
- 前端开发: 需要原型 + 需要接口定义(Mock)
- 后端开发: Web API开发(给前端使用) + 内部调研RPC开发(给内部服务使用)
- 测试阶段(QA)
- 功能测试: 基础功能的测试, 下单功能
- 场景测试: 站在用户的使用, 默认用户的场景, 比如购物
- 性能测试: 项目对资源的需求能力(计算,存储, 网络), 你需要几核几G的服务器, 上限测试
- 回归测试: 后期开发了一些新功能, 会影响到一些老接口(老功能)
- 线上部署
- 业务发展
- 业务重构
- ...
开发业务方向:
- 业务开发(商业模型): 完整的后端开发角色,划分的很细
- 企业内部系统开发(IT系统,支持企业内部): 企业数字化转向(飞书IM), 可以选择使用商用, 或者自己开发, 有完整的开发流程
- 基础平台(支持业务的系统): 业务的程序, 需要有配置中心, 网关, 需要部署, 需要trace排除问题, 一般情况这种平台有开发人员之间开发, 框架部门
- 运维开发: 可能会被包含在 基础平台开发内部, 需要部署, 资源管理, 成本管理, 监控告警 。。。。
Web开发
以一个单体应用进行教学, 单体服务 也是前后端分离的, 只有1个前端,1个后端(后端仅仅由1个服务提供),
后端模块的调用都是进程内调用(pkg.xxxx)
web 单体应用开发的业务: vblog, 微博客, 功能很简单: 管理员后台发布markdown的博客, 游客在前台浏览博客内容
教学重点:
-
如何架设一个后端服务(难度不大)
-
如果编写项目前端(难度比较大)
-
后端开发: 给前端提供接口, web Service, HTTP 接口
-
web基础: html, css, js, 不包含TS
-
Vue全家桶: vue3, vue-router, pinia, vueUI组件库(arco-design, 头条的开源Vue3组件库)
-
项目前端: 编写Vblog项目前端, 组合使用所有技能
微服务开发
以devcloud为项目原型, 功能是 研发云(微服务管理平台, 包含部分运维平台能力), 微服务的治理:
-
用户与权限(辅助): 用户认证与用户权限鉴定 , 需要做又给中心化的用户系统: 用户中心
-
审计中心(辅助): 用户在你的系统里面做了一些操作, 需要报操作记录下来, 比如用户删除又给订单, 一个是为了溯源用户行为,避免不必要的纠纷,如果你的系统要过 等保, 也是需要你符合这些标准的
-
资源中心(业务: CMDB): 负责业务使用到的资产的管理
-
服务间的调用: RPC, GRPC
-
服务发现: 不适用服务发现(直接配置服务地址, 或者使用有grpc协议代理里面的网关), 使用服务发现(用户中心会提供服务发现的能力, 可选)
-
加入缓存: redis
-
消息总线: kafka
-
Web框架: go-restful, k8s做API Server使用的那套
-
数据库: 用户中心,审计中心: mongoDB, 资源中心: MySQL
运维开发二开项目
- Prometheus 相关开发: 开发Prometheus Exporter开发, 如何与Cmdb对接 实现监控发现(选项)
- K8s 相关开发: 基于client-go 提供服务部署能力, 如何使用client-go, Operator开发, 一个简单的demo, CRD定义, Watch Pod变化, 把服务注册到注册中心(未实现)
如何跟进项目
关键: 跟着练(不能只是上课时 听, 上课的时候听思路), 做开发: 自己解决问题的能力(debug), 不要copy的代码, 你的项目的代码 要自己一行一行的写
怎么练: 自己在github/gitee/gitlab/coding 公开的git服务 创建一个自己的用户, 每个项目放到自己的代码仓库里面, 你们有什么问题,可以把你的代码仓库地址发出来, (其他同学可以帮你发现问题, 也可以看别人怎么写的)
把项目可上的工程, 转化成你的项目工程(一个工程, 就是一个go module)