Go底层原理与工程化实践9787111758266
正版图书,可开发票,请放心购买。
¥
74.25
7.5折
¥
99
全新
库存93件
作者李乐 陈雷
出版社机械工业出版社
ISBN9787111758266
出版时间2023-05
装帧平装
开本16开
定价99元
货号17212754
上书时间2024-09-14
商品详情
- 品相描述:全新
- 商品描述
-
目录
目 录 Contents<br />前言<br />第1章 为什么要了解Go底层1<br />1.1 Go服务怎么出现502状态码了1<br />1.1.1 服务超时为什么导致502状态码1<br />1.1.2 基于context的超时控制4<br />1.2 Go服务为什么没响应了7<br />1.2.1 谁阻塞了协程7<br />1.2.2 写管道可以不阻塞协程吗10<br />1.3 Uber如何通过GC调优节约<br /> 7万个内核11<br />1.3.1 GC概述11<br />1.3.2 Uber半自动化GC调优13<br />1.4 Go语言进阶路线15<br />1.4.1 Go语言快速入门16<br />1.4.2 Go高并发编程20<br />1.4.3 Go语言项目实战22<br />1.5 本章小结24<br />第2章 Go语言并发模型25<br />2.1 GMP调度模型25<br />2.1.1 Go语言并发编程入门25<br />2.1.2 GMP调度模型概述27<br />2.1.3 深入理解GMP调度模型30<br />2.2 协程管理33<br />2.2.1 基础补充33<br />2.2.2 协程创建37<br />2.2.3 协程切换40<br />2.2.4 协程栈会溢出吗42<br />2.2.5 协程退出45<br />2.3 调度器46<br />2.3.1 调度器实现原理46<br />2.3.2 时间片调度49<br />2.3.3 基于协作的抢占式调度52<br />2.3.4 基于信号的抢占式调度53<br />2.4 本章小结54<br />第3章 调度器触发时机55<br />3.1 网络I/O56<br />3.1.1 探索Go语言网络I/O56<br />3.1.2 Go语言网络I/O与调度器59<br />3.1.3 如何实现网络读写超时62<br />3.2 管道65<br />3.2.1 管道的基本用法65<br />3.2.2 管道与调度器67<br />3.3 定时器70<br />3.3.1 定时器的基本用法70<br />3.3.2 定时器与调度器73<br />3.4 系统调用75<br />3.4.1 系统调用会阻塞线程吗75<br />3.4.2 系统调用与调度器77<br />3.5 本章小结79<br />第4章 Go语言并发编程80<br />4.1 什么是并发问题80<br />4.2 CSP并发模型84<br />4.2.1 基于管道-协程的CSP模型84<br />4.2.2 管道与select关键字86<br />4.2.3 如何实现无限缓存管道89<br />4.3 基于锁的协程同步91<br />4.3.1 乐观锁91<br />4.3.2 悲观锁93<br />4.4 如何并发操作map95<br />4.4.1 map的并发问题96<br />4.4.2 并发散列表sync.Map98<br />4.5 并发控制sync.WaitGroup101<br />4.6 并发对象池sync. Pool103<br />4.7 如何实现单例模式104<br />4.8 并发检测105<br />4.9 本章小结106<br />第5章 GC原理、调度与调优108<br />5.1 内存管理108<br />5.1.1 如何设计动态内存分配器108<br />5.1.2 Go语言内存分配器110<br />5.1.3 Go语言内存管理111<br />5.1.4 内存逃逸113<br />5.2 三色标记与写屏障114<br />5.2.1 三色标记115<br />5.2.2 写屏障117<br />5.3 标记与清理119<br />5.3.1 垃圾回收执行阶段120<br />5.3.2 经典的stopTheWorld123<br />5.3.3 辅助标记125<br />5.3.4 内存清理127<br />5.4 GC调度与GC调优128<br />5.4.1 GC触发时机128<br />5.4.2 GC协程调度模式131<br />5.4.3 缓存框架bigcache中的<br /> GC调优133<br />5.5 本章小结135<br />第6章 手把手教你搭建Go项目136<br />6.1 Go项目架构设计 136<br />6.1.1 分层架构136<br />6.1.2 代码布局138<br />6.1.3 命令管理cobra140<br />6.1.4 配置管理Viper142<br />6.2 Web框架Gin145<br />6.2.1 RESTful API145<br />6.2.2 引入Gin框架146<br />6.2.3 中间件149<br />6.2.4 如何记录访问日志152<br />6.3 日志与全链路追踪154<br />6.3.1 引入日志框架Zap154<br />6.3.2 基于context的全链路追踪157<br />6.3.3 基于协程ID的全链路追踪159<br />6.4 访问数据库161<br />6.4.1 引入Gorm框架161<br />6.4.2 CURD165<br />6.4.3 事务170<br />6.4.4 如何记录Trace日志172<br />6.5 HTTP调用173<br />6.5.1 go-resty框架概述174<br />6.5.2 请求追踪176<br />6.5.3 长连接还是短连接178<br />6.5.4 如何记录Trace日志180<br />6.6 单元测试181<br />6.6.1 Go语言中的单元测试181<br />6.6.2 引入单元测试183<br />6.7 本章小结184<br />第7章 高性能Go服务开发186<br />7.1 分库分表186<br />7.1.1 分库分表基本原理186<br />7.1.2 基于Gorm的分表189<br />7.2 使用Redis缓存191<br />7.2.1 go-redis的基本操作191<br />7.2.2 基于Redis的性能优化193<br />7.3 使用本地缓存196<br />7.3.1 自己实现一个LRU缓存196<br />7.3.2 基于bigcache的性能优化198<br />7.4 资源复用200<br />7.4.1 协程复用之fasthttp200<br />7.4.2 连接复用之连接池203<br />7.4.3 对象复用之对象池205<br />7.5 其他207<br />7.5.1 异步化处理207<br />7.5.2 无锁编程209<br />7.6 本章小结210<br />第8章 高可用Go服务开发211<br />8.1 可用性定义与高可用三板斧 211<br />8.1.1 可用性定义211<br />8.1.2 高可用三板斧213<br />8.2 流量治理组件Sentinel215<br />8.2.1 Sentinel快速入门215<br />8.2.2 流量控制218<br />8.2.3 系统自适应流量控制220<br />8.2.4 熔断降级222<br />8.2.5 Sentinel原理浅析224<br />8.3 Go服务监控225<br />8.3.1 运行时监控225<br />8.3.2 自定义监控228<br />8.4 其他231<br />8.4.1 超时控制231<br />8.4.2 错误处理234<br />8.5 本章小结236<br />第9章 Go语言微服务入门238<br />9.1 Go语言RPC标准库238<br />9.1.1 使用入门238<br />9.1.2 原理浅析240<br />9.2 微服务框架Kitex242<br />9.2.1 使用入门243<br />9.2.2 可扩展性245<br />9.2.3 服务治理248<br />9.3 本章小结250<br />第10章 实现Go服务平滑升级251<br />10.1 服务升级导致502状态码251<br />10.2 Go语言信号处理框架252<br />10.3 Go服务平滑退出256<br />10.4 基于gracehttp的Go服务<br /> 平滑升级258<br />10.5 本章小结261<br />第11章 Go服务调试262<br />11.1 Go程序分析利器pprof262<br />11.1.1 pprof概述262<br />11.1.2 内存指标分析264<br />11.1.3 CPU指标分析266<br />11.1.4 锁与阻塞指标分析268<br />11.2 性能分析工具Trace269<br />11.3 使用dlv调试Go程序270<br />11.3.1 Go语言调试工具dlv271<br />11.3.2 dlv调试实战272<br />11.4 本章小结276<br />第12章 线上服务实战278<br />12.1 两种导致502状态码的情况278<br />12.1.1 panic异常278<br />12.1.2 长连接为什么会导致502<br /> 状态码284<br />12.2 意想不到的并发问题287<br />12.2.1 并发问题引起的JSON<br /> 序列化异常287<br />12.2.2 并发问题引起的服务<br /> 发现故障290<br />12.3 HTTP服务假死问题292<br />12.3.1 写日志阻塞请求293<br />12.3.2 防缓存穿透组件导致的<br /> 服务死锁295<br />12.4 HTTP客户端引发的问题297<br />12.4.1 长连接还是短连接297<br />12.4.2 偶现Connection reset by<br /> peer问题299<br />12.5 类型不匹配导致的线上问题301<br />12.5.1 一个双引号引起的线上事故301<br />12.5.2 自定义JSON序列化与<br /> 反序列化302<br />12.6 其他问题305<br />12.6.1 怎么总是空指针异常305<br />12.6.2 诡异的超时问题307<br />12.7 本章小结309
内容摘要
全书分为2篇:
1.第1篇详细介绍Go语言高性能优势是如何实现的,包括经典的GMP调度模型,Go语言调度器的实现,垃圾回收,以及如何基于管道、锁等并发编程。
2.第二篇主要是项目实战,手把手带领读者从0开始搭建高性能、高稳定的Go服务。以及在面对线上问题时,如何调试、分析、解决。
通过学习本书,读者对Go语言的核心——高并发会有一个深刻的认识,具备一定的Go并发编程经验,能够独立完成高性能、高稳定Go服务的架构设计,并且能够基于一些工具进行Go线上问题分析与性能调优。
主编推荐
1)知名企业资深Go开发专家联合撰写,从原理到实践,助你掌握Go语言精髓,授你项目实战经验 2)深入剖析Go语言的核心原理,从0到1带你实现高性能高可用的Go服务开发,详细介绍10多个线上典型问题以及解决思路
精彩内容
为什么要深入学习Go语言?
Go语言是目前的主流语言之一,具有入门快、高性能、开发效率高等特点,目前越来越多的互联网企业都在使用Go语言。另外,云原生体系中的Kubernetes、Docker等开源项目就是基于Go语言开发的,想要深入研究云原生技术,就必须精通Go语言。最后,只有对Go语言底层有一定了解,才能开发出高性能、高可用的Go服务,并在解决线上问题、性能调优时游刃有余。
你能学到什么?
Go高并发特性与并发编程技巧:高并发是Go语言的特色,本书详细剖析了Go语言是如何实现高并发的,包括GMP调度模型的基本概念、协程与调度器的实现原理、Go语言常用的几种多协程同步方案,以及内存管理、垃圾回收及其调优。
项目实战经验:本书以经典的商城项目为例,分享了很多Go项目开发经验,包括常用开源框架的使用技巧与核心原理、高性能与高可用的Go服务开发、Go服务平滑升级等。
线上问题解决方案:本书列举了10余个线上典型问题,并讲解了这些问题的解决思路。这些问题都是Go语言初学者非常容易遇到的,相信读者能从这些问题中吸取经验,总结出一套解决问题的方法论。
— 没有更多了 —
以下为对购买帮助不大的评价