Go进阶训练营 – 微服务概览与治理三:gRPC & 服务发现
什么是gRPC? A high-performance, open-source universal RPC framework。 语言中立,公司里可能存在不同语言的服务需要交互。 统一采用gRPC作为服务之间的通信协议,可能存在其他性能更好的解决方案,但不要过早关注性能问题,先标准化更重要。 轻量级、高性能,序列化比JSON性能好 可插拔,支持插…
Gitlab CI/CD 实践五:基础镜像 Dcokerfile 仓库 CI 流水线配置
基础镜像Dcokerfile集中管理 优点 结合Gitlab CI,可以快速便捷地新建和更新镜像。 可以快速找到镜像对应的 Dockerfile,明确镜像的具体组成,避免重复造轮子。 基于Dockerfile,方便对镜像进行扩展。 如何使用 创建、修改Dockerfile文件,提交到仓库,就会触发 Gitlab 流水线,自动构建镜像并上传到Harb…
Gitlab CI/CD 实践四:Golang 项目 CI/CD 流水线配置
.gitlab-ci.yml 流水线入口:阶段 stages: - lint - test - build - deploy 流水线以job为单位运行,每个job就是自己想通过流水线做的事情,例如单元测试的job,核心是运行脚本: go test -short go list ./... 每个阶段下可以定义多个job。 同一阶段的job会并行执行。…
Go进阶训练营 – 微服务概览与治理二:微服务设计
API Gateway B站进行了 SOA 服务化的架构演进,按照垂直功能进行了拆分,对外暴露了一批微服务,但是因为缺乏统一的出口面临了不少困难: 1.0 客户端到微服务直接通信,强耦合。 如果涉及移动端,同时存在多版本,api兼容困难,重构困难,用户可能还在使用一年前版本的移动端。 需要多次请求,客户端聚合数据,工作量巨大,延迟高。 聚合数据应该…
LeetCode:一和零_474
思路 多维的动态规划,属于背包类问题,只是穷举多了个背包。 strs里的每个元素就是物品,m为装1的背包数量,n为装0的背包数量,开始DP套路: 定义状态:dp[i][m][n]表示0-i个物品,m个装1的背包,n个装0的背包可以装下多少个物品 状态转移方程:dp[i][m][n]=max(dp[i-1][m][n],dp[i-1][m-i1][n…
开发规范四:设计文档
发布版本-需求标题 文档变更记录 日期 版本号 修订内容 修订人 目 录 [TOC] XXX功能详细设计 【 详细设计文档针对一个具体功能或者模块进行详细设计, 完成设计文档后,一定将【】的所有示例内容都删除。不能直接删除章节,若不进行设计,请写“无”。 注意修改页文档版本控制。 】 合并请求:https://xxx.xxx.com/xxx/-/m…
开发规范三:项目版本号定义
依据Semver2版本标准,和业界保持基本一致。 🐤主版本号 版本号使用三位版本号,X.Y.Z,不足三位的补齐为三位,如0.1.0,1.0.0,1.2.0。 一位版本 无法向下兼容时。 当软件和产品发生巨大变化时。 二位版本 软件和产品增加新的特性。 三位版本 产品累积的维护性需求或bug。 扩充版本号 alpha版本 演示版采用alpha版本命名…
开发规范二:Git Commit 规范
基于约定式提交 1.0.0 🐱commit message格式 <类型>[范围]: <标题> [主体内容] 例如:fix(admin): k8sProxy反向代理路由修改 类型(必须) 用于说明git commit的类别,只允许使用下面的标识。 feat:新功能(feature)。 fix:修复bug,可以是QA发现的BUG…
开发规范一:Git Flow + Gitlab 工作流
分支说明 main 分支 发布分支。 包含最新稳定版本,每个版本都是该分支上的一个tag。 长期分支。 保护分支,非Maintainer成员不能直接提交,只能从其他分支合并。 develop 分支 主开发分支。 新功能或 bug 修复分支都从这里拉取和提合并请求。 长期分支。 保护分支,非Maintainer成员不能直接提交,只能从其他分支合并。 …
Gitlab CI/CD 实践三:Docker 安装 Gitlab Runner
和k8s部署runner相比,Docker安装runner的优势 缓存,项目里用到的各种依赖,不可能每次都下载,以及构建、语法检测等都会产生缓存。在k8s runner中使用分布式存储ceph来保存这些文件,大概700m。每次使用时特别慢,大部分时间都花在下载缓存,上传缓存。当前项目整个流水线跑下来需要10多分钟。而是用docker部署的runne…