基于Go语言的云原生
Matthew A. Titmus
马晶慧 译
出版时间:2024年10月
页数:464
“本书很好地将“云原生”的高级概念带到现实,并使用现代计算语言Go来实现。这两个概念的结合效果很好,带给我们许多灵感。”
-Lee Atchison
Atchison TechnologyLLC的所有者
“这是我读到的第一本以如此实用的方式、如此广度及深度介绍现代云原生实践的书籍。作者通过清晰的示例呈现了可帮助工程师解决日常面临的实际问题的各种模式。”
-Alvaro Atienza
Flatiron Health网站可靠性工程师

Docker、Kubernetes和Prometheus的共同点是什么?所有这些云原生技术都是用Go语言编写的。这本实用指南将向你展示如何利用Go语言的优势在不可预期的环境中开发可扩展且富有弹性的云原生服务。我们将探索这些应用程序的组成和结构,从Go语言的底层特性到中级设计模式,再到高级架构的考虑因素。
本书的各个章节环环相扣,我们将引导Go语言中高级开发人员构建一款简单但功能齐备的分布式键值存储。我们将学习选用Go作为开发语言来解决云原生管理和部署问题的最佳实践。
● 了解云原生应用程序与其他软件架构有何不同。
● 了解如何利用Go语言解决设计可扩展的分布式服务的各种难题。
● 利用Go语言的底层特性(例如通道和g0协程)来实现可靠的云原生服务。
● 探讨什么是“服务可靠性”及其与“云原生”的关系。
● 利用各种模式、抽象和工具来构建和管理复杂的分布式系统。
  1. 前言
  2. 第I部分 云原生概述
  3. 第1章 什么是“云原生”应用程序
  4. 1.1 迄今为止的故事
  5. 1.2 什么是云原生?
  6. 1.2.1 可扩展性
  7. 1.2.2 松散耦合
  8. 1.2.3 韧性
  9. 1.2.4 可管理性
  10. 1.1.5 可观察性
  11. 1.3 为什么云原生很重要?
  12. 1.4 小结
  13. 第2章 为什么Go语言统治云原生世界
  14. 2.1 Go语言诞生的动机
  15. 2.2 云原生世界的特性
  16. 2.2.1 组合与结构化类型
  17. 2.2.2 可理解性
  18. 2.2.3 CSP风格的并发
  19. 2.2.4 快速构建
  20. 2.2.5 语言稳定性
  21. 2.2.6 内存安全
  22. 2.2.7 性能
  23. 2.2.8 静态链接
  24. 2.2.9 静态类型
  25. 2.3 小结
  26. 第II部分 云原生Go结构
  27. 第3章 Go语言基础
  28. 3.1 基本数据类型
  29. 3.1.1 布尔值
  30. 3.1.2 简单的数字
  31. 3.1.3 复数
  32. 3.1.4 字符串
  33. 3.2 变量
  34. 3.2.1 简短的变量声明
  35. 3.2.2 零值
  36. 3.2.3 空标识符
  37. 3.2.4 常量
  38. 3.3 容器类型:数组、切片和映射
  39. 3.3.1 数组
  40. 3.3.2 切片
  41. 3.3.3 映射
  42. 3.4 指针
  43. 3.5 控制结构
  44. 3.5.1 for循环
  45. 3.5.2 if语句
  46. 3.5.3 switch语句
  47. 3.6 错误处理
  48. 3.7 可变参函数和闭包
  49. 3.7.1 函数
  50. 3.7.2 可变参函数
  51. 3.7.3 匿名函数和闭包
  52. 3.8 结构、方法和接口
  53. 3.8.1 结构
  54. 3.8.2 方法
  55. 3.8.3 接口
  56. 3.8.4 通过类型嵌入实现组合
  57. 3.9 并发
  58. 3.9.1 Go协程
  59. 3.9.2 通道
  60. 3.9.3 select语句
  61. 3.10 小结
  62. 第4章 云原生模式
  63. 4.1 Context包
  64. 4.1.1 Context可以做什么
  65. 4.1.2 创建Context
  66. 4.1.3 定义Context的截止日期和超时
  67. 4.1.4 定义请求作用域的值
  68. 4.1.5 使用Context
  69. 4.2 本章的主要内容
  70. 4.3 稳定性模式
  71. 4.3.1 断路器模式
  72. 4.3.2 防抖模式
  73. 4.3.3 重试模式
  74. 4.3.4 节流模式
  75. 4.3.5 超时模式
  76. 4.4 并发模式
  77. 4.4.1 扇入模式
  78. 4.4.2 扇出模式
  79. 4.4.3 未来模式
  80. 4.4.4 分片模式
  81. 4.5 小结
  82. 第5章 构建云原生服务
  83. 5.1 构建一个服务!
  84. 5.2 需求
  85. 5.2.1 什么是幂等性,为什么幂等性很重要?
  86. 5.2.2 最终目标
  87. 5.3 第0代:核心功能
  88. 5.4 第一代:单体架构
  89. 5.4.1 使用net/http构建HTTP服务器
  90. 5.4.2 使用gorilla/mux构建HTTP服务器
  91. 5.4.3 构建RESTful服务
  92. 5.4.4 确保数据结构的并发安全
  93. 5.5 第2代:持久保存资源状态
  94. 5.5.1 什么是事务日志?
  95. 5.5.2 将状态存储到事务日志文件
  96. 5.5.3 将状态存储到外部数据库
  97. 5.6 第3代:实现传输层安全
  98. 5.6.1 传输层安全
  99. 5.6.2 私钥和证书文件
  100. 5.6.3 使用HTTPS保护Web服务
  101. 5.6.4 传输层总结
  102. 5.7 键值存储的容器化
  103. 5.7.1 Docker的基础知识
  104. 5.7.2 构建键值存储容器
  105. 5.7.3 外部化容器数据
  106. 5.8 小结
  107. 第III部分 云原生属性
  108. 第6章 可信任性
  109. 6.1 云原生的意义
  110. 6.2 可信任性
  111. 6.3 什么是可信任性以及为什么可信任性如此重要?
  112. 6.4 实现可信任性
  113. 6.4.1 故障预防
  114. 6.4.2 容错
  115. 6.4.3 故障排除
  116. 6.4.4 故障预测
  117. 6.5 十二要素应用
  118. 6.5.1 基准代码
  119. 6.5.2 依赖
  120. 6.5.3 配置
  121. 6.5.4 依赖服务
  122. 6.5.5 构建、发布、运行
  123. 6.5.6 进程
  124. 6.5.7 数据分离
  125. 6.5.8 可扩展性
  126. 6.5.9 易处理性
  127. 6.5.10 开发环境与生产环境等价
  128. 6.5.11 日志
  129. 6.5.12 管理进程
  130. 6.6 小结
  131. 第7章 可扩展性
  132. 7.1 什么是可扩展性
  133. 7.2 四个常见瓶颈
  134. 7.3 状态与无状态
  135. 7.3.1 应用程序状态与资源状态
  136. 7.3.2 无状态的优势
  137. 7.4 推迟扩展:效率
  138. 7.4.1 使用LRU缓存的高效缓存
  139. 7.4.2 高效同步
  140. 7.4.3 内存泄漏可能会……致命错误:运行时:内存不足
  141. 7.4.4 高效
  142. 7.5 服务架构
  143. 7.5.1 单体系统架构
  144. 7.5.2 微服务系统架构
  145. 7.5.3 无服务器架构
  146. 7.6 小结
  147. 第8章 松散耦合
  148. 8.1 紧密耦合
  149. 8.2 服务之间的通信
  150. 8.3 请求响应消息
  151. 8.3.1 常见的请求响应实现
  152. 8.3.2 通过net/http发送HTTP请求
  153. 8.3.3 使用gRPC实现远程过程调用
  154. 8.4 利用插件实现本地资源的松散耦合
  155. 8.4.1 带有插件包的进程内插件
  156. 8.4.2 基于RPC的HashiCorp插件系统
  157. 8.5 六边形架构
  158. 8.5.1 架构
  159. 8.5.2 实现六边形服务
  160. 8.6 小结
  161. 第9章 韧性
  162. 9.1 为什么韧性很重要
  163. 9.2 系统失效是什么意思?
  164. 9.3 级联失效
  165. 9.4 重试请求
  166. 9.4.1 退避算法
  167. 9.4.2 断路器
  168. 9.4.3 超时
  169. 9.4.4 幂等性
  170. 9.5 服务冗余
  171. 9.5.1 设计系统时考虑冗余
  172. 9.5.2 自动扩展
  173. 9.6 健康检查
  174. 9.6.1“健康的”实例意味着什么?
  175. 9.6.2 三种类型的健康检查
  176. 9.6.3 故障打开
  177. 9.7 小结
  178. 第10章 可管理性
  179. 10.1 什么是可管理性,为什么我应该关注可管理性?
  180. 10.2 配置应用程序
  181. 10.2.1 有关配置的良好实践
  182. 10.2.2 环境变量配置
  183. 10.2.3 命令行参数配置
  184. 10.2.4 配置文件
  185. 10.2.5 Viper:配置包中的瑞士军刀
  186. 10.3 利用特性标志管理功能
  187. 10.3.1 特性标志的进化
  188. 10.3.2 第零代:最初的实现
  189. 10.3.3 第一代:硬编码特性标志
  190. 10.3.4 第二代:可配置标志
  191. 10.3.5 第三代:动态特性标志
  192. 10.4 小结
  193. 第11章 可观察性
  194. 11.1 什么是可观察性?
  195. 11.1.1 为什么我们需要可观察性?
  196. 11.1.2 可观察性与“传统的”监控有何不同?
  197. 11.2 “可观察性的三大支柱”
  198. 11.3 OpenTelemetry
  199. 11.4 追踪
  200. 11.4.1 追踪的概念
  201. 11.4.2 使用OpenTelemetry进行追踪
  202. 11.4.3 整合:追踪
  203. 11.5 指标
  204. 11.5.1 推式与拉式指标集合
  205. 11.5.2 OpenTelemetry的指标
  206. 11.5.3 整合:指标
  207. 11.6 日志记录
  208. 11.6.1 更好的日志记录实践
  209. 11.6.2 使用Go标准的log包记录日志
  210. 11.6.3 Zap日志包
  211. 11.7 小结
书名:基于Go语言的云原生
作者:Matthew A. Titmus
译者:马晶慧 译
国内出版社:中国电力出版社
出版时间:2024年10月
页数:464
书号:978-7-5198-9183-1
原版书书名:Cloud Native Go
原版书出版商:O'Reilly Media
Matthew A. Titmus
 
Matthew A. Titmus是一位经验丰富的软件开发行业资深人士,拥有分子生物学学位。作为云原生技术和Go语言的早期采用者和倡导者,他对如何构建生产级质量的系统充满热情。他付诸大量心血来实现观察和编排分布式系统的策略。
 
 
本书封面上的动物属于栉鼠科(学名:Ctenomys,又称“tuco-tuco”)。这些新热带区的啮齿动物主要分布在南美洲的南半部,生活在挖掘的洞穴中。
“栉鼠”这个名字指代多个物种。一般来说,这些啮齿动物的身体很健壮,腿短而有力,爪子发达。它们的头很大,耳朵很小,尽管90% 的时间都在地下度过,但与其他穴居啮齿动物相比,它们的眼睛相对较大。栉鼠毛皮的颜色和质地因物种而异,但总的来说,栉鼠的皮毛非常厚实。它们的尾巴很短,而且不是特别蓬松。
栉鼠生活在挖掘沙质和/或土壤建立的隧道系统中,这些隧道四通八达且复杂,包括单独的用于筑巢和储存食物的房间。栉鼠经历了各种形态适应,帮助它们在这些地下环境中创造和繁荣发展,包括嗅觉的进步——这有助于它们在隧道中辨认方向。它们挖洞时会用爪子刨和用头颅牙齿凿的方式。
栉鼠主要以根、茎和草为食。如今,栉鼠被视为农业害虫,但在欧洲人踏上南美洲之前,它们是土著人的重要食物来源,特别是在火地岛。现今,根据物种和地理位置不同,对栉鼠的保护状况也不同。许多物种属于“无危物种”,但也有一部分属于“濒危”。O’Reilly出版的图书,封面上很多动物都濒临灭绝。这些动物都是地球的至宝。
购买选项
定价:148.00元
书号:978-7-5198-9183-1
出版社:中国电力出版社