CppGuide社区 CppGuide社区
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
  • Go项目架构设计 说明
    • Go项目架构设计 说明
    • 开发环境说明
    • 目录
  • 1. 用Go构建大型项目
  • 2. 代码的封装
  • 3 设计模式
  • 4. 应用程序扩展
  • 5. 分布式架构
  • 6 消息传递
  • 7. 构建API
  • 8 数据建模
  • 9 反脆弱系统
  • 10 案例研究:旅游网站
  • 11. 部署规划
  • 12 应用程序迁移
目录

Go项目架构设计 说明

# 前言

Page Views Count (opens new window)

# Go项目架构设计 说明

Go语言是由罗伯特·格里泽默(Robert Griesemer)、罗布·派克(Rob Pike)和肯·汤普森(Ken Thompson)于2007年左右在谷歌构思并开发的。其目标是打造一种实用的编程语言,以处理庞大的代码库、复杂的多线程场景以及多核处理器。2012年3月,Go 1.0版本发布,从那以后,这门语言在受欢迎程度上突飞猛进。像我这样的开发者喜欢它的简洁性、表现力、明确性以及出色的社区。

在过去几年里,我用Go构建了一些生产级应用程序,在本书中,我尝试从一个具有实践经验的架构师的角度,提炼我所学到的知识。本书主要是对Go生态系统的一个全面概述,但在一些关键部分,我们会深入探讨并编写代码来演示相关理论。最后,我们将使用所学的知识构建一个较为复杂的电子商务应用程序!

本文为《Hands-On Software Architecture with Golang》的译本,首发于 cppguide.cn (opens new window)。

限于水平有限,如果您在阅读过程中有任何问题,可以联系小方(微信cppxiaofang),也欢迎加入小方的 技术交流群,群里面有很多开发高手,不定期发布招聘信息,加群请备注“加微信群”。

小方微信公众号【CppGuide】:

img

# 开发环境说明

你需要在计算机上安装运行Go程序所需的所有工具,包括:

  • Go(最好是v0.9版本)。
  • 一个编辑器。不需要太高级的,Sublime Text就很不错。
  • 此外,本书有几章涉及Cassandra、Kafka、Redis和NSQ。所有这些都可以安装在普通笔记本电脑上。在Mac系统上,通过Homebrew可以安装所有这些软件。使用它们的最新稳定版本即可。

# 目录

  • 前言

  • 第1章:用Go构建大型项目

    • 从全局角度解决问题
      • 架构师的角色
        • 需求澄清
        • 北极星指标(True North)
        • 技术选型
        • 掌控全局的领导力
        • 指导与辅导
        • 目标状态与当前状态
    • 软件架构
      • 架构与设计
      • 架构是什么样的?
    • 微服务
      • 微服务面临的挑战——效率
      • 微服务面临的挑战——编程复杂性
    • Go语言
      • Hello World!
      • 数据类型和结构
      • 函数和方法
      • 流程控制
      • 打包
      • 并发
      • 垃圾回收
      • 面向对象
    • 总结
  • 第2章:代码打包

    • 契约
    • 面向对象
      • Go语言中的面向对象——结构体
      • Go语言中的面向对象——可见性
      • Go语言中的面向对象——接口
      • Go语言中的面向对象——嵌入
    • 模块
      • 代码布局
      • 第三方依赖
      • 框架
    • 测试
      • 构建测试
    • 总结
  • 第3章:设计模式

    • 设计原则
      • 单一职责原则(Single Responsibility Principle,S)
      • 开闭原则(Open/Closed Principle,O)
      • 里氏替换原则(Liskov Substitution Principle,L)
      • 接口隔离原则(Interface Segregation Principle,I)
      • 依赖倒置原则(Dependency Inversion Principle,D)
    • 创建型设计模式
      • 工厂方法
      • 生成器模式(Builder)
      • 抽象工厂模式(Abstract factory)
      • 单例模式(Singleton)
    • 结构型设计模式
      • 适配器模式(Adaptor)
      • 桥接模式(Bridge)
      • 组合模式(Composite)
      • 装饰器模式(Decorator)
      • 外观模式(Facade)
      • 代理模式(Proxy)
    • 行为型设计模式
      • 命令模式(Command)
      • 责任链模式(Chain of Responsibility)
      • 中介者模式(Mediator)
      • 备忘录模式(Memento)
      • 观察者模式(Observer)
      • 访问者模式(Visitor)
      • 策略模式(Strategy)
      • 状态模式(State)
    • 总结
  • 第4章:应用程序扩展

    • 扩展算法
      • 算法复杂度
      • 分布式算法
    • 扩展数据结构
      • 剖析数据结构
      • 概率数据结构
    • 扩展数据
    • 可扩展性瓶颈
      • C10K问题
      • 惊群问题(Thundering Herd problem)
    • 根源
      • 编程
      • 操作系统
      • 内存使用
    • 状态丢失
    • 扩展系统
      • X轴扩展
      • Y轴扩展
      • Z轴扩展
    • 扩展部署
    • 总结
  • 第5章:走向分布式

    • 拓扑结构
    • 分布式系统的常见误解
      • 网络是可靠的
      • 延迟为零
      • 带宽无限
      • 网络是安全的
      • 拓扑结构不会改变
      • 只有一个管理员
      • 传输成本为零
      • 网络是同构的
    • 一致性
      • 原子性、一致性、隔离性、持久性(ACID)
      • 以客户端为中心的一致性模型
        • 强一致性
        • 弱一致性
        • 最终一致性
          • 顺序一致性
          • 因果一致性
          • 会话一致性
          • 单调读一致性
          • 单调写一致性
      • 以存储系统为中心的一致性模型
      • CAP定理
    • 共识算法
      • 两军问题
      • 基于时间因果关系的共识算法
      • 多阶段提交
        • 两阶段提交
        • 三阶段提交
      • Paxos算法
      • Raft算法
      • 领导者选举
    • 分布式架构
      • 基于对象的系统
      • 分层架构
      • 对等(Peer-2-Peer,P2P)架构
      • 分布式计算
      • 事件驱动架构(Event-driven architecture,EDA)
      • 参与者模型(Actor model)
      • 流处理
    • 总结
  • 第6章:消息传递

    • 性能特征
    • 基于代理的消息传递
      • 队列模型
      • 发布/订阅模型(Pub/Sub model)
      • 交付语义
        • 投递机制
          • 至少一次交付
          • 至多一次交付
          • 恰好一次交付
      • 弹性
      • 高级消息队列协议(AMQP)
    • 深入剖析Apache Kafka
      • 概念
      • 发布消息
        • AsyncProducer接口
        • 同步生产者
      • 消费消息
      • 流处理
    • 无代理消息传递
    • 深入剖析NSQ
      • 概念
      • 发布消息
      • 消费消息
    • 集成模式
      • 请求-回复模式
      • 关联标识符模式
      • 管道和过滤器模式
      • 基于内容的路由器模式
      • 扇入模式
      • 扇出模式
      • 后台工作者模式
    • 总结
  • 第7章:构建API

    • 端点
      • 网络基础
      • 服务发现
        • 服务器端服务发现
        • 客户端服务发现
    • 数据序列化
      • XML
      • JSON
      • Protobuf
      • 性能
    • 表述性状态转移(Representational State Transfer,REST)
      • 概念
      • 约束条件
        • 客户端-服务器模型
        • 无状态性
        • 可缓存性
        • 统一接口
      • 理查森成熟度模型(Richardson Maturity Model)
        • 0级——XML沼泽(swamp of POX)
        • 1级——资源
        • 2级——HTTP动词
        • 3级——超媒体控制
      • 使用Gin构建REST服务
        • Gin简介
        • 示例应用程序
        • 路由
        • 创建
        • 读取
        • 更新
        • 删除
    • GraphQL
      • 模式
      • 端点
        • 查询
        • 变更
        • 订阅
    • 更高级的模式
      • 模型-视图-控制器(Model-View-Controller,MVC)
      • 负载均衡健康检查
      • API网关
    • Go kit
    • 总结
  • 第8章:数据建模

    • 实体和关系
    • 一致性保证
      • 原子性、一致性、隔离性、持久性(Atomicity, Consistency, Isolation, Durability,ACID)
        • 原子性
        • 一致性
        • 隔离性
        • 持久性
      • 基本可用、软状态、最终一致性(Basically Available, Soft state, Eventual consistency,BASE)
    • 关系模型
      • 第一范式
      • 第二范式
      • 第三范式
      • 巴斯范式(Boyce-Codd normal form)
      • 第四范式
      • SQL
      • 索引
      • 视图
        • 内连接
        • 左外连接
        • 右外连接
        • 全外连接
      • 深入探究MySQL
        • 连接管理
        • 查询执行
        • 存储引擎
          • InnoDB
          • MyISAM
          • 其他插件
        • 高可用性/可扩展性
      • 对象关系映射(Object Relational Mappers,ORMs)
    • 键值存储
      • 概念
      • Redis深度解析
        • 架构
        • 数据结构
        • 持久化
        • 集群
        • 用例
        • 在Golang中的使用
    • 宽列存储
    • 列族存储
      • Cassandra深度解析
        • 数据分布
        • 写入路径
        • 读取路径
        • 在Golang中的使用
    • 提升数据性能的模式
      • 分片
      • 反规范化
      • 物化视图
    • 总结
  • 第9章:反脆弱系统

    • 可靠性指标
      • 动态指标
      • 静态指标
    • 可靠性工程
      • 健壮服务
      • 高可用性
      • 消息传递
        • 异步计算模式
        • 编排器模式
        • 补偿事务模式
        • 管道和过滤器模式
      • 热点问题
      • 边车模式(sidecar pattern)
      • 限流
      • 版本控制
    • 可靠性验证
      • 单元测试
      • 集成测试
      • 用户界面测试(UI tests)
      • 性能测试
    • 混沌工程
    • 依赖关系
      • 故障扩散
      • 级联故障
      • 依赖弹性
        • Hystrix简介
        • Hystrix——回退机制
        • Hystrix——断路器
        • 在Golang中使用Hystrix
        • Hystrix监控
    • 数据库级可靠性
    • 数据中心级可靠性
      • 一致性
      • 路由和切换
    • 总结
  • 第10章:案例研究——旅游网站

    • 产品介绍
      • 参与者
      • 需求分析
    • 数据建模
    • 高层架构
    • 搜索
      • 航班业务
      • 酒店业务
    • 预订功能
      • 支付功能
      • 预约功能
    • 总结
  • 第11章:部署规划

    • 部署架构

      • 组件
        • 计算资源
          • 物理服务器
          • 虚拟机
          • 容器
          • 计算属性
        • 存储
        • 网络
        • 负载均衡器
        • API网关
        • 反向代理
        • 消息代理
      • 环境
      • 容量规划与规模确定
      • 灾难恢复
    • 持续集成与持续交付(CICD)

      • 概述
      • Jenkins
        • 示例代码
        • 安装Jenkins
        • 安装Docker
        • 设置插件
        • 创建项目
        • 运行构建
      • 目标配置
      • 工具
        • go fmt
        • golint
        • go build
      • 脚注
    • 监控

      • 日志

      • 指标

      • 应用性能监控/仪表盘

      • 警报

      • 团队

    • 云服务

      • 基础设施即服务(Infrastructure as a Service,IaaS)
      • 平台即服务(Platform as a Service,PaaS)
      • 软件即服务(Software as a service,SaaS)
    • 安全性

    • 总结

  • 第12章:应用程序迁移

    • 迁移原因
      • Python
      • Java
    • 迁移策略
      • 阶段1——学习Go语言
      • 阶段2——试点服务
      • 阶段3——定义包
      • 阶段4——移植主程序
      • 阶段5——移植包
      • 阶段6——优化计算
    • 组建团队
    • 总结
上次更新: 2025/04/08, 19:40:35
1. 用Go构建大型项目

1. 用Go构建大型项目→

最近更新
01
C++语言面试问题集锦 目录与说明
03-27
02
第四章 Lambda函数
03-27
03
第二章 关键字static及其不同用法
03-27
更多文章>
Copyright © 2024-2025 沪ICP备2023015129号 张小方 版权所有
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式