Skip to content

marmotedu/superproj

Repository files navigation

English | 简体中文

超级项目(superproj)

超级项目是一个Go企业应用开发脚手架,遵循简洁架构,具有 2 大编程范式,代码规范、质量高、功能全。此外superproj还具有以下特性:

  • 一个包含Kubernetes编程教学的实战项目;
  • 一个微型的Kubernetes;
  • 一个符合Kubernetes编程哲学的实战项目;
  • 一个可用于企业级生产环境的实战项目;
  • 一个支持超高并发的实战项目;
  • 一个微服务实战项目

Features

superproj设计目的是能够在一个项目中,有机整合 Go 项目开发中用到的几乎所有的核心功能点,以及大部分常用功能点,具体功能点如下:

  • 代码规范、质量高:
    • 遵循各种代码开发规范:代码规范、目录规范、日志规范、错误码规范、提交规范、版本规范、文档规范等
    • 采用标准、高效的代码开发流程:
      • 采用结构化的高质量 Makefile 高效管理 Git 大仓;工程化管理包括但不限于以下几点:
        • 代码格式化
        • 代码生成
        • 代码编译
        • 代码测试
        • 代码部署
        • 镜像制作
        • 版权声明
        • 生成Swagger文档
        • 工具安装
        • CA证书制作
        • 静态代码检查
        • license header添加
        • ...
      • 采用GitFlow代码管理模式
      • 采用敏捷开发模式
      • 集成进了CI/CD系统
    • 面向接口编程、Go项目设计哲学
    • 可测试的代码设计
    • 代码遵循了 Go最佳实战,是用来大量的Go设计模式
  • 遵循简洁架构:superproj-gw/superproj-usercenter 遵循了简洁架构。(service、biz、store三层设计);
  • 常用功能设计:
    • 日志包设计
    • 错误包设计
    • 错误码设计
    • 应用框架构建设计
    • ...
  • 包含了众多Linter检查规则:Dockerfile, Helm Chart, Code, linters
  • 项目包含了声明式 API 和命令式 API 2 种编程范式;
  • Kubernetes编程开发实战:
    • 声明式 API 编程范式(Kubernetes 编程):
      • client-go 编程
      • Aggregated APIServer
      • kube-apiserver 风格的 apiserver: superproj-apiserver;
      • Kubernetes controller(CRD+Controller):superproj-minerset-controller, superproj-miner-controller, superproj-controller-manager;
      • Operator开发:superproj-operator
    • Kubernetes Webhook、准入控制;
    • Kubernetes 集群(Kind集群)搭建和使用;
  • 开发阶段全:项目包含了设计、开发、测试、发布全流程
    • 测试:单元测试、性能测试、性能分析、测试框架(testify, GoConvey)、覆盖率、Mock工具(sqlmock, httpmock, bouk/monkey, golang/mock)
  • 项目有配套的课程可供学习:极客时间、知识星球、B站免费课程(开发企业级REST API服务)、慕课网(视频课);
  • 采用结构化的高质量 Makefile 高效管理 Git 大仓;
  • 代码实现的企业级功能全:
    • 包含了企业级应用需要的众多核心功能:
      • Web服务(superproj-gw, superproj-usercenter)详细功能列表包含但不限于以下列表:
        • RESTful
        • gRPC
        • 路由匹配
        • 路由分组
        • HTTP/HTTPS
        • 认证/授权
        • 路由匹配
        • Protobuf
        • 中间件
        • 跨域
        • ResutID
        • 优雅关停
        • 参数解析
        • 参数校验
        • 逻辑处理
        • 返回结果处理
        • ...
      • 分布式异步任务处理服务:superproj-nightwatch;
      • ETL数据抽取:superproj-pump
      • HTTP/GRPC SDK
    • 包含了其他辅助功能:
      • 命令行工具:projctl;
      • 代码检查:lint-xxx
      • 代码生成:gen-xxx
  • 自动版本生成、CHANGELOG生成
  • 开发中一些常用功能设计:Client SDK设计方案,Options设计方案
  • 大量采用了代码生成技术,提高代码开发效率(见scripts/make-rules/generate.mk):
    • 自定义代码生成gen-xxx
    • 自动生成go protobuf文件
    • swagger.json
    • error code
    • doc.go
    • ca
    • license header
    • 应用使用文档
    • man文件
    • wire
    • k8s相关源码(listers, informers, client-go等)
    • dockerfile
    • kubeconfig
    • helm docs
    • ...
  • 中间件组件及实战:MySQL、Redis、Etcd、Kafka、MongoDB;
  • 校验:基于 Tag 的校验、自定义校验逻辑
  • 日志(v1.0):Elasticsearch、Filebeat、Kibana;(Loki,grafana v2.0)
  • 监控告警:Prometheus、alertmanager;
  • 部署:裸机部署、独立Deployment部署、Helm编排部署;
  • 错误码设计
  • Event 分库 Etcd
  • 认证:基本认证、Token认证、CA
  • 授权:RBAC
  • 用了大量Go生态中优秀的包:
    • 缓存:go-cache、lru;
    • 中间件:go-redis、gorm;
    • Web框架:grpc、gin(独立Demo)、grpc-gateway;
    • 命令行工具:cobra、pflag、viper;
    • 认证:golang-jwt;
    • 校验:validator;
    • 日志:klog、zap(独立Demo)、logrus(独立Demo);
    • 定时任务:cron;
    • HTTP客户端:retry;
    • 授权:casbin
    • 微服务框架:kratos
    • 其他常用的包:client-go、uuid、golang-set、segmentio/kafka-go、fatih/color、olekukonko/tablewriter、redsync等;
  • 微服务相关功能:
    • 配置中心:viper + configmap、【kubernetes、nacos(v2.0)】
    • 服务治理(服务注册/服务发现):etcd(v1.0)、、polaris(v2.0)
    • 调用链:OpenTelemetry、Jaeger
  • Blockchain 基本原理、私有链搭建和使用;
  • 验证码(captcha)
  • 其他特性:
    • Protobuf;
    • 限流算法;
    • 依赖注入;
    • 分布式锁;
    • CA证书制作
    • Dockerfile编写
  • 云原生应用的部署设计和实战:
    • 云原生部署架构设计
    • 监控告警
    • 分布式日志解决方案
    • 容灾能力建设实战
    • 弹性扩缩容能力设计和实战
    • Helm服务编排
    • 容器化部署
    • 安全能力建设
    • CI/CD
    • 负载均衡
  • 更多其他特性...
  • 可能实现的功能:
    • WebSocket;
    • Kratos集成Gin;
    • 服务治理用:consul、kubernetes
  • 涉及的语言:Go、Shell、Makefile、AWK
  • 使用了众多可以提高效率、规范的工具,例如:
    • gsemver, git-chglog, addlicense, kratos, kind, go-apidiff, gotests, cfssl, go-gitlint, kustomize, kafkactl, kube-linter, kubectl, helm-docs, db2struct, gentool, air, swagger, license, helm, kafka, golangci-lint, goimports, wire
  • 泛型、模糊测试、多工作区
  • 其他内容:
    • Kubernetes集群(Kind集群)搭建和使用
    • Blockchain基本原理、私有链搭建和使用

Architecture

架构图

Installation

安装步骤如下:

$ git clone https://github.com/superproj/superproj.git

$ cd superproj

# 添加缺失的Go包
$ go mod tidy

# 安装依赖的工具
$ make ci

# 生成代码、编译代码等
$ make

# 本地快速部署
$ make deploy

Usage/Examples

import Component from 'my-project'

function App() {
  return <Component />
}

Documentation

Documentation

Feedback

If you have any feedback, please reach out to us at colin404@foxmail.com

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started.

Please adhere to this project's code of conduct.

Authors

License

MIT

Related

Here are some related projects

About

一个包罗万象的 Go 项目开发脚手架

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published