万本电子书0元读

万本电子书0元读

顶部广告

Go底层原理与工程化实践电子书

1)知名企业资深Go发专家联合撰写,从原理到实践,助你掌握Go语言精髓,授你项目实战经验 2)深剖析Go语言的核心原理,从0到1带你实现高性能高可用的Go服务发,详细介绍10多个线上典型问题以及解决思路

售       价:¥

纸质售价:¥74.20购买纸书

18人正在读 | 0人评论 6.6

作       者:李乐,陈雷

出  版  社:机械工业出版社

出版时间:2024-06-26

字       数:18.2万

所属分类: 科技 > 计算机/网络 > 计算机理论与教程

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
全书分为2篇:1.第1篇详细介绍Go语言高性能优势是如何实现的,包括经典的GMP调度模型,Go语言调度器的实现,垃圾回收,以及如何基于管道、锁等并发编程。2.第二篇主要是项目实战,手把手带领读者从0始搭建高性能、高稳定的Go服务。以及在面对线上问题时,如何调试、分析、解决。通过学习本书,读者对Go语言的核心——高并发会有一个深刻的认识,具备一定的Go并发编程经验,能够独立完成高性能、高稳定Go服务的架构设计,并且能够基于一些工具行Go线上问题分析与性能调优。<br/>【推荐语】<br/>1)知名企业资深Go发专家联合撰写,从原理到实践,助你掌握Go语言精髓,授你项目实战经验 2)深剖析Go语言的核心原理,从0到1带你实现高性能高可用的Go服务发,详细介绍10多个线上典型问题以及解决思路<br/>【作者】<br/>作者简介 李乐:Golang发专家,先后就职于滴滴出行、好未来,西安电子科技大学硕士,拥有多年互联网研发经验,合著有《Redis5设计与源码分析》。 陈雷:希望学产研负责人,清华大学本硕与北京邮电大学硕士,曾在百度、腾讯和滴滴等公司工作,拥有15年产品研发经验,合著有《PHP7底层设计与源码实现》。<br/>
目录展开

前折页

书名页

前言

第1章 为什么要了解Go底层

1.1 Go服务怎么出现502状态码了

1.1.1 服务超时为什么导致502状态码

1.1.2 基于context的超时控制

1.2 Go服务为什么没响应了

1.2.1 谁阻塞了协程

1.2.2 写管道可以不阻塞协程吗

1.3 Uber如何通过GC调优节约7万个内核

1.3.1 GC概述

1.3.2 Uber半自动化GC调优

1.4 Go语言进阶路线

1.4.1 Go语言快速入门

1.4.2 Go高并发编程

1.4.3 Go语言项目实战

1.5 本章小结

第2章 Go语言并发模型

2.1 GMP调度模型

2.1.1 Go语言并发编程入门

2.1.2 GMP调度模型概述

2.1.3 深入理解GMP调度模型

2.2 协程管理

2.2.1 基础补充

2.2.2 协程创建

2.2.3 协程切换

2.2.4 协程栈会溢出吗

2.2.5 协程退出

2.3 调度器

2.3.1 调度器实现原理

2.3.2 时间片调度

2.3.3 基于协作的抢占式调度

2.3.4 基于信号的抢占式调度

2.4 本章小结

第3章 调度器触发时机

3.1 网络I/O

3.1.1 探索Go语言网络I/O

3.1.2 Go语言网络I/O与调度器

3.1.3 如何实现网络读写超时

3.2 管道

3.2.1 管道的基本用法

3.2.2 管道与调度器

3.3 定时器

3.3.1 定时器的基本用法

3.3.2 定时器与调度器

3.4 系统调用

3.4.1 系统调用会阻塞线程吗

3.4.2 系统调用与调度器

3.5 本章小结

第4章 Go语言并发编程

4.1 什么是并发问题

4.2 CSP并发模型

4.2.1 基于管道-协程的CSP模型

4.2.2 管道与select关键字

4.2.3 如何实现无限缓存管道

4.3 基于锁的协程同步

4.3.1 乐观锁

4.3.2 悲观锁

4.4 如何并发操作map

4.4.1 map的并发问题

4.4.2 并发散列表sync.Map

4.5 并发控制sync.WaitGroup

4.6 并发对象池sync.Pool

4.7 如何实现单例模式

4.8 并发检测

4.9 本章小结

第5章 GC原理、调度与调优

5.1 内存管理

5.1.1 如何设计动态内存分配器

5.1.2 Go语言内存分配器

5.1.3 Go语言内存管理

5.1.4 内存逃逸

5.2 三色标记与写屏障

5.2.1 三色标记

5.2.2 写屏障

5.3 标记与清理

5.3.1 垃圾回收执行阶段

5.3.2 经典的stopTheWorld

5.3.3 辅助标记

5.3.4 内存清理

5.4 GC调度与GC调优

5.4.1 GC触发时机

5.4.2 GC协程调度模式

5.4.3 缓存框架bigcache中的GC调优

5.5 本章小结

第6章 手把手教你搭建Go项目

6.1 Go项目架构设计

6.1.1 分层架构

6.1.2 代码布局

6.1.3 命令管理cobra

6.1.4 配置管理Viper

6.2 Web框架Gin

6.2.1 RESTful API

6.2.2 引入Gin框架

6.2.3 中间件

6.2.4 如何记录访问日志

6.3 日志与全链路追踪

6.3.1 引入日志框架Zap

6.3.2 基于context的全链路追踪

6.3.3 基于协程ID的全链路追踪

6.4 访问数据库

6.4.1 引入Gorm框架

6.4.2 CURD

6.4.3 事务

6.4.4 如何记录Trace日志

6.5 HTTP调用

6.5.1 go-resty框架概述

6.5.2 请求追踪

6.5.3 长连接还是短连接

6.5.4 如何记录Trace日志

6.6 单元测试

6.6.1 Go语言中的单元测试

6.6.2 引入单元测试

6.7 本章小结

第7章 高性能Go服务开发

7.1 分库分表

7.1.1 分库分表基本原理

7.1.2 基于Gorm的分表

7.2 使用Redis缓存

7.2.1 go-redis的基本操作

7.2.2 基于Redis的性能优化

7.3 使用本地缓存

7.3.1 自己实现一个LRU缓存

7.3.2 基于bigcache的性能优化

7.4 资源复用

7.4.1 协程复用之fasthttp

7.4.2 连接复用之连接池

7.4.3 对象复用之对象池

7.5 其他

7.5.1 异步化处理

7.5.2 无锁编程

7.6 本章小结

第8章 高可用Go服务开发

8.1 可用性定义与高可用三板斧

8.1.1 可用性定义

8.1.2 高可用三板斧

8.2 流量治理组件Sentinel

8.2.1 Sentinel快速入门

8.2.2 流量控制

8.2.3 系统自适应流量控制

8.2.4 熔断降级

8.2.5 Sentinel原理浅析

8.3 Go服务监控

8.3.1 运行时监控

8.3.2 自定义监控

8.4 其他

8.4.1 超时控制

8.4.2 错误处理

8.5 本章小结

第9章 Go语言微服务入门

9.1 Go语言RPC标准库

9.1.1 使用入门

9.1.2 原理浅析

9.2 微服务框架Kitex

9.2.1 使用入门

9.2.2 可扩展性

9.2.3 服务治理

9.3 本章小结

第10章 实现Go服务平滑升级

10.1 服务升级导致502状态码

10.2 Go语言信号处理框架

10.3 Go服务平滑退出

10.4 基于gracehttp的Go服务平滑升级

10.5 本章小结

第11章 Go服务调试

11.1 Go程序分析利器pprof

11.1.1 pprof概述

11.1.2 内存指标分析

11.1.3 CPU指标分析

11.1.4 锁与阻塞指标分析

11.2 性能分析工具Trace

11.3 使用dlv调试Go程序

11.3.1 Go语言调试工具dlv

11.3.2 dlv调试实战

11.4 本章小结

第12章 线上服务实战

12.1 两种导致502状态码的情况

12.1.1 panic异常

12.1.2 长连接为什么会导致502状态码

12.2 意想不到的并发问题

12.2.1 并发问题引起的JSON序列化异常

12.2.2 并发问题引起的服务发现故障

12.3 HTTP服务假死问题

12.3.1 写日志阻塞请求

12.3.2 防缓存穿透组件导致的服务死锁

12.4 HTTP客户端引发的问题

12.4.1 长连接还是短连接

12.4.2 偶现Connection reset by peer问题

12.5 类型不匹配导致的线上问题

12.5.1 一个双引号引起的线上事故

12.5.2 自定义JSON序列化与反序列化

12.6 其他问题

12.6.1 怎么总是空指针异常

12.6.2 诡异的超时问题

12.7 本章小结

后折页

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部