登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入   新用戶註冊
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2025年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / 物流,時效:出貨後2-4日

2026年01月出版新書

2025年12月出版新書

2025年11月出版新書

2025年10月出版新書

2025年09月出版新書

2025年08月出版新書

2025年07月出版新書

2025年06月出版新書

2025年05月出版新書

2025年04月出版新書

2025年03月出版新書

2025年02月出版新書

2025年01月出版新書

2024年12月出版新書

『簡體書』微服务云原生开发实践:基于Docker、Kubernetes、GitHub Actions、Terraform(第2版)

書城自編碼: 4199126
分類: 簡體書→大陸圖書→計算機/網絡操作系統/系統開發
作者:
國際書號(ISBN): 9787302705222
出版社: 清华大学出版社
出版日期: 2025-12-01

頁數/字數: /

售價:NT$ 709

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
古代城邦(修订版)(经典与解释·古今丛编)
《 古代城邦(修订版)(经典与解释·古今丛编) 》

售價:NT$ 509
诱捕:青春穿越小说 穿书系统×双向救赎
《 诱捕:青春穿越小说 穿书系统×双向救赎 》

售價:NT$ 245
战后日本对外文化战略研究(1945—1972)
《 战后日本对外文化战略研究(1945—1972) 》

售價:NT$ 500
斯坦福十条:AI时代,顶尖大学要这样的人
《 斯坦福十条:AI时代,顶尖大学要这样的人 》

售價:NT$ 356
跃入夏天2:青春校园治愈成长小说 沉默寡言排球手x暴躁可爱小不点
《 跃入夏天2:青春校园治愈成长小说 沉默寡言排球手x暴躁可爱小不点 》

售價:NT$ 218
百妖谱3:裟椤双树代表作 奇幻百妖谱动漫原著系列小说 古风青春文学玄幻巨作
《 百妖谱3:裟椤双树代表作 奇幻百妖谱动漫原著系列小说 古风青春文学玄幻巨作 》

售價:NT$ 230
西方哲学史:从前苏格拉底到后现代主义
《 西方哲学史:从前苏格拉底到后现代主义 》

售價:NT$ 713
读者考试精选+青年文摘考试精选+登天的感觉:我让考生超常发挥 岳晓东著 如何让考生超常发挥高度自信青
《 读者考试精选+青年文摘考试精选+登天的感觉:我让考生超常发挥 岳晓东著 如何让考生超常发挥高度自信青 》

售價:NT$ 449

編輯推薦:
《微服务云原生开发实践:基于Docker、Kubernetes、GitHubActions、Terraform(第2版)》教你落地微服务与云原生的实战宝典!从架构设计到部署运维,吃透Docker、Kubernetes、Terraform核心工具,掌握CI/CD与IaC全流程,助开发者、架构师高效构建可靠云原生应用
內容簡介:
《微服务云原生开发实践:基于Docker、Kubernetes、GitHubActions、Terraform(第2版)》是全面深入探讨微服务架构和云原生技术的实践指南,通过丰富的实例和深入的讲解,旨在帮助读者掌握微服务架构的核心技术和最佳实践,从而在实际工作中能够更加高效地开发和管理微服务应用。本书从微服务的基本概念出发,逐步引导读者理解微服务架构的优势、挑战及设计原则,并通过一系列实用的工具和框架,如Node.js、Docker、Kubernetes、Terraform和GitHubActions等,详细介绍了如何在云环境中创建、部署和管理微服务。本书不仅提供了理论知识,还注重实践操作,每个章节都配有实际案例和示例代码,帮助读者更好地理解和应用微服务架构。本书覆盖了开发过程涉及的工具链,包括代码管理、容器化、持续集成/持续部署(CI/CD)、基础设施即代码(IaC)等。此外,本书详细介绍了如何在云环境中利用Docker、Kubernetes等工具进行微服务的部署和管理,以及如何使用Terraform进行基础设施的自动化管理。本书还探讨了微服务的自动化测试、监控和日志管理,以及如何确保微服务的健康和可靠性。
關於作者:
阿什利.戴维斯(AshleyDavis)软件工匠、技术专家兼作家,在软件开发领域拥有超过25年的经验,涵盖从编码到团队管理、再到创办公司等多个方面。他曾为各种不同规模的公司工作过,从小型初创企业到大型跨国公司。在此过程中,他通过写作和开源编码为社区做出了贡献。宋净超(JimmySong)Tetrate布道师,云原生社区创始人,CNCFAmbassador。他拥有十年以上的软件开发、架构设计及社区管理经验,曾就职于科大讯飞、TalkingData和蚂蚁集团。
目錄
目录
第 1 章 为什么选择微服务 1
1.1 本书的实用性 2
1.2 你将学到什么 4
1.3 你需要知道什么 5
1.4 管理复杂性 6
1.5 什么是微服务 7
1.6 什么是微服务应用程序 8
1.7 单体架构的问题是什么 9
1.8 为什么微服务如此受欢迎 12
1.9 微服务的优势 12
1.10 微服务的挑战 14
1.10.1 较高的技术技能需求 14
1.10.2 分布式应用程序构建的复杂性 14
1.10.3 微服务的扩展性挑战 15
1.10.4 对复杂性的普遍恐惧 15
1.10.5 提前应对挑战 15
1.11 现代微服务工具 16
1.12 不只是微服务 17
1.13 可能性范围 17
1.14 设计微服务应用程序 18
1.14.1 软件设计 19
1.14.2 设计原则 19
1.14.3 领域驱动设计 19
1.14.4 不要重复自己 20
1.14.5 服务的适当规模 21
1.14.6 深入了解设计知识 21
1.15 示例应用程序 22
1.16 总结 23
第 2 章 创建微服务 24
2.1 新工具介绍 25
2.2 获取代码 26
2.3 选择 Node.js 的理由 26
2.4 我们的开发哲学 28
2.5 构建单服务开发环境 30
2.5.1 安装 Git 31
2.5.2 克隆代码库 33
2.5.3 获取 VS Code 33
2.5.4 安装 Node.js 34
2.6 构建一个用于视频流的 HTTP 服务器 35
2.6.1 创建一个 Node.js 项目 36
2.6.2 安装 Express 39
2.6.3 创建 Express 框架 42
2.6.4 运行简单的 Web 服务器 43
2.6.5 运行基础 Web 服务器 44
2.6.6 添加视频流功能 44
2.6.7 配置我们的微服务 47
2.6.8 设置生产环境 49
2.6.9 实时重新加载以实现快速迭代 51
2.6.10 运行本章的完整代码 54
2.7 Node.js 回顾 55
2.8 继续学习 55
2.9 总结 56
第 3 章 发布微服务 57
3.1 Docker:一种新工具 58
3.2 获取代码 58
3.3 容器是什么 59
3.4 什么是镜像 60
3.5 为什么选择 Docker 61
3.6 为何选择使用 Docker 61
3.7 在开发环境中整合 Docker 62
3.7.1 安装 Docker 63
3.7.2 检查 Docker 安装情况 64
3.8 打包微服务 64
3.8.1 创建 Dockerfile 65
3.8.2 打包并检查 Docker 镜像 67
3.8.3 在容器中启动微服务 70
3.8.4 调试容器 73
3.8.5 停止容器 73
3.9 发布微服务 74
3.9.1 创建私有容器仓库 75
3.9.2 将微服务推送到仓库 80
3.9.3 从仓库启动微服务 83
3.9.4 删除你的容器仓库 86
3.10 Docker 回顾 87
3.11 继续学习 88
3.12 总结 89
第 4 章 微服务的数据管理 90
4.1 新工具 91
4.2 获取代码 91
4.3 使用 Docker Compose 开发微服务 92
4.3.1 为什么选择 Docker Compose 93
4.3.2 创建我们的 Docker Compose 文件 94
4.3.3 启动我们的微服务应用程序 96
4.3.5 关闭应用程序 97
4.3.6 为什么用 Docker Compose 进行开发,而不用于生产 99
4.4 为应用程序添加文件存储 99
4.4.1 使用 Azure Storage 100
4.4.2 更新视频流微服务 108
4.4.3 将新微服务添加到 Docker Compose 文件 110
4.4.4 测试更新后的应用程序 112
4.4.5 云存储与集群存储 114
4.4.6 我们实现了什么 114
4.5 向应用程序添加数据库 115
4.5.1 为什么选择 MongoDB 116
4.5.2 在开发中集成数据库服务器 116
4.5.3 在生产环境中部署数据库服务器 121
4.5.4 每个微服务用一个数据库还是整个应用用一个数据库 121
4.5.5 我们实现了什么 122
4.6 Docker Compose 回顾 122
4.7 深入拓展你的学习 123
4.8 总结 124
第 5 章 微服务间的通信 126
5.1 新工具与熟悉的工具 127
5.2 让我们的微服务开始对话 127
5.3 介绍历史微服务 129
5.4 快速迭代的实时重载 130
5.4.1 创建历史微服务的框架 131
5.4.2 增强微服务以支持实时重载 132
5.4.3 区分开发和生产的 Dockerfile 133
5.4.4 更新 Docker Compose 文件以支持实时重载 135
5.4.5 尝试实时重载 137
5.4.6 在开发环境中测试生产模式 138
5.4.7 我们已经实现了什么 139
5.5 微服务之间的通信方式 140
5.5.1 直接消息传递 140
5.5.2 间接消息传递 141
5.6 使用 HTTP 进行直接消息传递 142
5.6.1 为什么选择 HTTP 143
5.6.2 直接针对特定微服务发送消息 143
5.6.3 使用 HTTP POST 发送消息 144
5.6.4 使用 HTTP POST 接收消息 145
5.6.5 测试更新后的应用程序 146
5.6.6 通过直接消息协调行为 147
5.6.7 我们实现了什么 148
5.7 使用 RabbitMQ 进行间接消息传递 148
5.7.1 为什么选择 RabbitMQ 149
5.7.2 间接定位消息到微服务 149
5.7.3 创建一个 RabbitMQ 服务器 151
5.7.4 调查 RabbitMQ 仪表板 152
5.7.5 将我们的微服务连接到消息队列 153
5.7.6 多接收者消息 156
5.7.7 接收多接收者消息 157
5.7.8 发送多接收者消息 158
5.7.9 测试多接收者消息 159
5.7.10 通过间接消息实现复杂行为 159
5.7.11 我们实现了什么 161
5.8 微服务通信总结 161
5.9 继续学习 162
5.10 总结 162
第 6 章 走向生产 164
6.1 新工具介绍 165
6.2 代码获取 165
6.3 进入生产环境 166
6.4 在 Kubernetes 上托管微服务 166
6.4.1 为何选择 Kubernetes 168
6.4.2 Pod、节点和容器 169
6.4.3 Pod、部署和服务 170
6.5 启用你的本地 Kubernetes 实例 171
6.6 安装 Kubernetes 命令行工具 173
6.7 项目结构详解 174
6.8 部署到本地 Kubernetes 实例 175
6.8.1 构建微服务镜像 175
6.8.2 暂时无需容器仓库 176
6.8.3 创建部署到本地 Kubernetes 实例的配置 176
6.8.4 配置 kubectl 连接到本地 Kubernetes 179
6.8.5 部署微服务到本地 Kubernetes 180
6.8.6 测试已部署的微服务 182
6.8.7 删除部署 182
6.8.8 为什么在开发中不使用本地 Kubernetes 183
6.8.9 我们已经完成了什么 183
6.9 在 Azure 中创建托管 Kubernetes 集群 184
6.10 使用 Azure CLI 187
6.10.1 安装 Azure CLI 187
6.10.2 认证 Azure CLI 188
6.10.3 将 kubectl 连接至 Kubernetes 189
6.11 部署到生产集群 190
6.11.1 设置容器注册中心 190
6.11.2 发布镜像到容器注册中心 190
6.11.3 将容器注册中心与 Kubernetes 集群关联 191
6.11.4 创建部署到生产 Kubernetes 的配置 192
6.11.5 部署微服务到 Kubernetes 194
6.11.6 测试已部署的微服务 194
6.11.7 删除部署 196
6.11.8 销毁基础设施 196
6.11.9 我们取得的成就 196
6.12 Azure CLI 工具回顾 197
6.13 Kubectl 回顾 197
6.14 继续学习 198
6.15 总结 199
第 7 章 基础设施即代码 201
7.1 新工具介绍 202
7.2 获取代码 202
7.3 基础设施原型化 202
7.4 基础设施即代码 203
7.5 使用你的 Azure 账户认证 204
7.6 选择 Kubernetes 的合适版本 204
7.7 使用 Terraform 创建基础设施 205
7.7.1 为什么选择 Terraform 206
7.7.2 安装 Terraform 207
7.7.3 设置 Terraform 项目 207
7.8 创建 Azure 资源组 208
7.8.1 使用 Terraform 的演化架构 209
7.8.2 编写基础设施创建脚本 210
7.8.3 固定提供者版本号 210
7.8.4 初始化 Terraform 211
7.8.5 Terraform 初始化的副产品 212
7.8.6 构建你的基础设施 213
7.8.7 理解 Terraform 状态 214
7.8.8 销毁和重建我们的基础设施 217
7.8.9 我们达到了什么成就 219
7.9 创建我们的容器仓库 219
7.9.1 继续我们的基础设施演化 220
7.9.2 创建容器仓库 220
7.9.3 Terraform 输出 221
7.9.4 从 Terraform 输出敏感值 222
7.9.5 不要输出敏感值 223
7.9.6 获取容器仓库的详细信息 223
7.9.7 我们达成了什么目标 224
7.10 重构以共享配置数据 224
7.10.1 继续我们的基础设施演化 224
7.10.2 引入 Terraform 变量 224
7.11 创建我们的 Kubernetes 集群 226
7.11.1 编写创建集群的脚本 226
7.11.2 将仓库附加到集群 227
7.11.3 构建我们的集群 228
7.11.4 我们达到了什么成就 228
7.12 部署到我们的集群 229
7.13 销毁我们的基础设施 230
7.14 Terraform 回顾 231
7.15 继续学习 231
7.16 总结 232
第 8 章 持续部署 233
8.1 新工具 234
8.2 获取代码 234
8.3 在本章运行示例 234
8.4 什么是持续集成 236
8.5 持续部署简介 237
8.6 自动化部署的优势 239
8.7 初探 GitHub Actions 自动化 240
8.7.1 为何选用 GitHub Actions 240
8.7.2 工作流是什么 240
8.7.3 创建新的工作流 241
8.7.4 示例 1 概述 243
8.7.5 “Hello World”shell 脚本 243
8.7.6 “Hello World”工作流 244
8.7.7 内联调用命令 245
8.7.8 触发工作流的代码更改 246
8.7.9 查看工作流历史 246
8.7.10 通过 UI 触发工作流 248
8.7.11 我们实现了什么 248
8.8 实施持续集成 249
8.8.1 示例 2 概述 249
8.8.2 自动化测试的工作流 250
8.8.3 我们实现了什么 251
8.9 持续部署微服务 252
8.9.1 示例 3 概述 252
8.9.2 模板化部署配置 253
8.9.3 先于自动化部署的手动部署 255
8.9.4 自动化部署流程 258
8.9.5 验证部署结果 259
8.9.6 安装和配置 kubectl 260
8.9.7 从 GitHub Secrets 提取环境变量 260
8.9.8 使用 GitHub 上下文变量 261
8.9.9 设置 GitHub Secrets 261
8.9.10 调试你的部署流程 263
8.9.11 直接部署到生产环境的风险 264
8.9.12 我们实现了什么 265
8.10 继续学习 265
8.11 总结 266
第 9 章 微服务的自动化测试 267
9.1 新工具 268
9.2 获取代码 268
9.3 微服务的测试 269
9.4 自动化测试 269
9.5 使用 Jest 进行自动化测试 272
9.5.1 为什么选择 Jest 272
9.5.2 设置 Jest 273
9.5.3 要测试的数学库 275
9.5.4 我们的第一个 Jest 测试 275
9.5.5 运行我们的第一个测试 276
9.5.6 使用 Jest 的实时重新加载 277
9.5.7 解释测试失败 277
9.5.8 通过 npm 调用 Jest 279
9.5.9 充实我们的测试套件 280
9.5.10 使用 Jest 进行模拟 281
9.5.11 我们实现了什么 283
9.6 微服务的单元测试 283
9.6.1 元数据微服务 285
9.6.2 使用 Jest 创建单元测试 287
9.6.3 执行测试 290
9.6.4 我们实现了什么 291
9.7 集成测试 291
9.7.1 待测试的代码 292
9.7.2 启动 MongoDB 数据库 292
9.7.3 加载数据库固件 293
9.7.4 使用 Jest 创建集成测试 294
9.7.5 执行测试 297
9.7.6 我们实现了什么 298
9.8 端到端测试 298
9.8.1 为什么选择 Playwright 299
9.8.2 安装 Playwright 300
9.8.3 设置数据库固件 302
9.8.4 启动应用程序 305
9.8.5 使用 Playwright 编写端到端测试 305
9.8.6 使用 npm 运行 Playwright 308
9.8.7 我们达到了什么成就 309
9.9 自动化测试在 CI/CD 流程中的应用 310
9.10 测试概述 311
9.11 继续学习 311
9.12 总结 312
第 10 章 部署 FlixTube 314
10.1 熟悉的工具 315
10.2 获取代码 315
10.3 重温基本技能 316
10.4 FlixTube 概述 317
10.4.1 FlixTube 微服务概览 317
10.4.2 微服务项目结构 319
10.4.3 FlixTube 单一代码库 319
10.5 在开发环境中运行 FlixTube 321
10.5.1 启动单个微服务 321
10.5.2 启动整个 FlixTube 应用程序 323
10.6 在开发环境中测试 FlixTube 324
10.6.1 使用 Jest 对微服务进行测试 325
10.6.2 使用 Playwright 对应用程序进行测试 326
10.7 FlixTube 深入探讨 327
10.7.1 数据库夹具的应用 327
10.7.2 模拟存储微服务 329
10.7.3 网关 333
10.7.4 FlixTube 用户界面 334
10.7.5 视频流 337
10.7.6 视频上传 339
10.8 在本地 Kubernetes 部署 FlixTube 343
10.8.1 本地部署的前提条件 345
10.8.2 本地部署操作 345
10.8.3 测试本地部署 345
10.8.4 删除本地部署 346
10.9 手动将 FlixTube 部署到生产环境 346
10.9.1 生产部署的前提条件 347
10.9.2 生产部署 348
10.9.3 测试生产部署 349
10.9.4 清理生产环境部署 349
10.10 持续部署到生产环境 349
10.10.1 持续部署的前提条件 350
10.10.2 设置你自己的代码库 350
10.10.3 部署基础设施 351
10.10.4 每个微服务一个 CD 管道 351
10.10.5 测试 CD 管道 353
10.11 FlixTube 的未来 354
10.12 继续学习 355
10.13 总结 356
第 11 章 健康的微服务 358
11.1 维护微服务的健康 359
11.2 监控与管理微服务 360
11.2.1 日志记录的开发实践 360
11.2.2 错误处理 362
11.2.3 利用 Docker Compose 进行日志管理 365
11.2.4 在 Kubernetes 中进行基础日志记录 366
11.2.5 Kubernetes 日志聚合 369
11.2.6 企业级日志记录、监控和警报系统 370
11.2.7 微服务的可观测性 371
11.2.8 利用 Kubernetes 健康检查自动重启微服务 372
11.3 调试微服务 374
11.3.1 调试过程 374
11.3.2 在生产环境中调试微服务 379
11.4 可靠性与恢复 382
11.4.1 实施防御性编程 382
11.4.2 实施防御性测试 382
11.4.3 保护我们的数据 383
11.4.4 实现复制和冗余 383
11.4.5 故障隔离与优雅降级 385
11.4.6 实现容错的基本技巧 386
11.4.7 高级容错技术 389
11.5 深入学习 391
11.6 总结 392
第 12 章 可扩展性的途径 394
12.1 我们的未来是可扩展的 395
12.2 扩展开发过程 395
12.2.1 多个团队的扩展 396
12.2.2 独立的代码仓库 397
12.2.3 分离代码仓库 399
12.2.4 元仓库 400
12.2.5 创建多个环境 402
12.2.6 生产工作流 404
12.2.7 将应用配置与微服务配置分离 406
12.3 性能扩展 407
12.3.1 垂直扩展集群 408
12.3.2 水平扩展集群 410
12.3.3 水平扩展单个微服务 411
12.3.4 集群的弹性扩展 412
12.3.5 单个微服务的弹性扩展 412
12.3.6 扩展数据库 413
12.3.7 避免过早扩展 416
12.4 缓解变更引起的问题 416
12.4.1 自动化测试和部署 416
12.4.2 分支保护 417
12.4.3 部署到测试环境 417
12.4.4 滚动更新 417
12.4.5 蓝绿部署 418
12.5 基本安全概念 420
12.5.1 信任模型 420
12.5.2 敏感配置管理 422
12.6 微服务重构 423
12.6.1 转向微服务的必要性 423
12.6.2 规划转换并全员参与 424
12.6.3 深入了解你的单体应用 424
12.6.4 提升自动化水平 425
12.6.5 构建你的微服务平台 425
12.6.6 沿自然边界切割 426
12.6.7 优先级提取 426
12.6.8 迭代实施 427
12.7 可能性区间 427
12.7.1 追求实用而非完美 428
12.7.2 投资回报递减 429
12.7.3 混合架构策略 429
12.8 成本效益型微服务策略 430
12.9 开始简单地行动 431
12.10 持续学习 432
12.11 总结 433
內容試閱
前言
我首次尝试构建微服务应用是在 2013 年,那时 Docker 刚问世,但我还未有所耳闻。我们当时的应用是将每个微服务独立部署在一个虚拟机上,可以想象,这种部署方式成本相当高昂。由于成本问题,我们不得不减少微服务的数量,把更多功能整合进现有的微服务中,直至这些服务已不能称之为“微服务”。虽然它仍然属于分布式应用,并且运行稳定,但这些服务的规模已远大于我们最初的设想。
那时我已经意识到微服务是一个具有巨大潜力的概念,只是受限于成本,我暂时搁置了微服务,但心中始终记得未来要重新审视这一技术。几年时间里,随着开源技术的兴起,微服务的相关工具和技术不断发展,而云计算成本也在激烈的供应商竞争中逐步降低。时间的推移使得构建和运行由小型组件组成的分布式应用变得更加经济实惠。
终于在 2018 年,我重新投入微服务的世界。这一年,我接手了两个适合采用微服务的项目,都是为初创公司工作。第一个项目是帮助一家充满潜力的年轻公司构建一个全新的微服务应用,而第二个项目则是为我自己的创业公司开发微服务应用。为了确保成功,我知道需要采用新的工具和方法。我需要有效的打包微服务的工具,需要一个能部署微服务的计算平台,并且这一切必须能自动化部署。
那时,Docker 已成为行业内部署微服务的首选工具。我也被 Kubernetes 作为微服务计算平台的潜力所吸引,尽管一开始对其抱有疑虑。特别是 Kubernetes 承诺的避免云服务商锁定非常吸引人。此时,我已阅读了不少关于微服务的书籍,它们在理论上提供了巨大的价值。尽管我热爱理论知识,但这些书籍缺少实际操作的例子,让我这样一个经验丰富的开发者也感到无所适从。据我个人经验,项目初期的糟糕技术决策会长时间影响项目的进展。
学习 Kubernetes 的过程尤其艰难,一开始它看似难以掌握。但我当时的任务需要一种可靠的交付软件的方法,所以我坚持不懈地努力学习,几乎要放弃。直到我发现了 Terraform,这是我解决问题的关键。它使我能够理解 Kubernetes 并将其应用于实际,从而坚定了我使用它的决心。Terraform 为我提供了描述应用基础架构的方式。我开始实践基础设施即代码,感觉自己进入了一个全新的领域。
我强迫自己跨越学习曲线,凭借评估技术和快速学习的长期经验,加上一些试错方法,使我最终能够交付性能优良、灵活、可靠、可扩展的软件。这段经历激发了我写书的决心,我想让更多人更容易地接触和理解微服务。
因此,我开始写这本书—我当初希望有的那本书。我的目标是通过实践指导,展示构建微服务并不困难或复杂,关键在于方法和视角。你手中的这本书就是这一努力的成果,我希望它能让你免于走我曾经走过的弯路。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 台灣用户 | 香港/海外用户
megBook.com.tw
Copyright (C) 2013 - 2026 (香港)大書城有限公司 All Rights Reserved.