Building API server-side architecture for Beginners
© ����-���� BASE, Inc. � Building API server-side architecture for Beginners GopherCon ���� ����.��.�� - @hgsgtk © ����-���� BASE, Inc. � Talk abstract • A practical approach to build server-side not be ignored © ����-���� BASE, Inc. �� Go beginners have a lot of questions� How to implement API server by net/http package How to write an unit test How to use interface type - Go basic questions implement API server by net/http package How to write an unit test - Go basic questions - ex. “Adopt clean architecture!” How to use interface type © ����-���� BASE, Inc. How to implement API server0 码力 | 38 页 | 690.29 KB | 1 年前36.从 0 到 1 搭建十亿级包裹 API Versioning
从 0 到 1 搭建十亿级包 裹 API Versioning 杨利航 AfterShip 高级研发工程师 这是 API Versioning 吗? 目 录 Why 01 What 02 How 03 Takeaway 04 Why Part 1/4 1. SaaS 产品的特点 2. API 的重要性 3. 我们 API 面临的挑战 1.1 SaaS 产品的特点 SaaS 1.2 API 的重要性 API 也是产品的一部分,而不仅仅是技术。对于 SaaS 产品,提供 API 服务几乎是与企业级用户合作的必须项,特别是在海外。 - 自动化 - 通过 API,企业可以利用 SaaS 产品的功能来构建自动 化流程和工作流程。 - 定制化 - 通过 API,企业可以开发自己的应用程序、插件或集成 其他工具,以满足特定的业务需求。 - 数据集成 - 通过 API,企业可以灵活地与 - OAuth2.0 - … 1.2.2 AfterShip API 的演进路线 业务量从十万级到十亿级,从没有 API 到高标准的 API。不是因为 API 做好了所以业务增长了,而是良 好的 API 设计才能支撑业务增长。 1.3 我们 API 面临的挑战 挑战一、变更不规律,打乱客户更新计划 向后兼容 - API 的稳定性要求避免破坏性的更改。在进行更新或修改时,应 保持对现有0 码力 | 28 页 | 2.26 MB | 1 年前3Go 入门指南(The way to Go)
本书将会从最基础的概念讲起,同时也会讨论一些类似在应用 goroutine 和 channel 时有多少种不同的模 Go入门指南 - 1 - 本文档使用 看云 构建 式,如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用模板来 开发 Web 应用这些高级概念和技巧。 在本书的第一部分,我们将会讨论 Go 语言的起源(第 1 章),以及如何安装 Go 语言(第 Ken Thompson 先前在 Plan 9 操作系统上使用的 C 工具链。 Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因 此如果使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操 Go入门指南 - 12 - 本文档使用 看云 构建 作系统或 64 位操作系统)进行区别对待。 这款编译器使用非分代 unsafe 包中的代码 -w 打印归类后的语法解析树 -x 打印 lex tokens 从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令,而这些指令会自动调用相关的编译器或链接器。 如果你想获得更深层次的信息,你可以在目录 $GOROOT/src/cmd 下找到编译器和链接器的源代 Go入门指南0 码力 | 380 页 | 2.97 MB | 1 年前3Go 入门指南(The way to Go)
(书中会使用大家所熟知的缩写 “OO” 来表示面向对象)。 本书将会从最基础的概念讲起,同时也会讨论一些类似在应用 goroutine 和 channel 时有多少种不同的模式, 如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用模板来开发 Web 应 用这些高级概念和技巧。 在本书的第一部分,我们将会讨论 Go 语言的起源(第 1 章),以及如何安装 Go 语言(第 Ken Thompson 先前在 Plan 9 操作系统上使用的 C 工具链。 Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因此如果 使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操作系统或 64 位操作系统)进行区别对待。 这款编译器使用非分代、无压缩和并行的方式进行编译,它的编译速度要比 gccgo -w 打印归类后的语法解析树 12. -x 打印 lex tokens 从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令,而这些指令会自动调用相关的编译器或链接器。 如果你想获得更深层次的信息,你可以在目录 $GOROOT/src/cmd 下找到编译器和链接器的源代码。Go0 码力 | 466 页 | 4.44 MB | 1 年前31.3 七牛如何做HTTP服务测试
HTTP服务测试? 许式伟 2015-4-18 HTTP服务测试 • 单元测试 – 某个独立子服务的测试 • 集成测试 – 整个集群对外业务API的测试 • Stage环境 • Product环境 怎么测? • 七牛早期做法 – 实现服务逻辑(Service Implementation) – 实现客户端SDK(Client … body ret 指令 • ret – 发起 http Request 请求,并将 http Response 存储到 $(resp) 变量中 • ret product 环境共享测试案例? – 测试环境参数化 – 也方便测试脚本入库(不入库 User/Password、AK/SK 这种敏感 信息) host 指令 • 服务地址参数化 host foo.com 127.0.0.1:8888 get http://foo.com/objects/a325gea2kgfd 0 码力 | 27 页 | 422.11 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
所以现在《Go语言101》大约有50篇文章。 你曾经的困惑主要包括哪些方面? 一些困惑是关于一些Go语法和语义设计细节的。 一些困惑涉及到某些类型的 值,主要是切片,接口和通道类型。 另外一些涉及到标准包API的使用细节。 你认为造成你曾经的困惑的主要原因是什么? 我觉得最主要的原因是我当时抱着Go是一门非常简单的语言的态度去学习和使 用Go。 持有这种态度阻止了我更深刻地理解Go。 Go是一门特性 一个操作可能从一个硬件设备读取、或者向一个硬件 设备写入一些数据,从而完成一个特定的任务。 对于现代计算机来说,最基本 的操作是底层计算机指令,比如CPU和GPU指令。 常见的硬件设备包括内存、 磁盘、网卡、显卡,显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言通 过对底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观和 易于理解。 在流行高级编程语言中,一个操作通常是 很多现代高级语言使用包(package)来组织代码。 一个包必须引入(import) 另一个包才能使用另一个包中的公有(导出的)代码要素。 包名和包的引入名 也都必须是标识符。 尽管高级编程语言代码比底层机器指令友好和易懂,我们还是需要一些注释来 帮助自己和其他程序员理解我们所写的代码。 在下一节的程序示例中,我们可 以看到很多注释。 一个简单的Go示例程序 为了对各种代码元素有一个更清楚的认识,让我们来看一个简短的Go示例程0 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
所以现在《Go语言101》大约有50篇文章。 你曾经的困惑主要包括哪些方面? 一些困惑是关于一些Go语法和语义设计细节的。 一些困惑涉及到某些类型的 值,主要是切片,接口和通道类型。 另外一些涉及到标准包API的使用细节。 你认为造成你曾经的困惑的主要原因是什么? 我觉得最主要的原因是我当时抱着Go是一门非常简单的语言的态度去学习和 使用Go。 持有这种态度阻止了我更深刻地理解Go。 Go是一门特 一个操作可能从一个硬件设备读取、或者向一个硬 件设备写入一些数据,从而完成一个特定的任务。 对于现代计算机来说,最 基本的操作是底层计算机指令,比如CPU和GPU指令。 常见的硬件设备包括 内存、磁盘、网卡、显卡,显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言 通过对底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观 和易于理解。 在流行高级编程语言中,一个操作通常 很多现代高级语言使用包(package)来组织代码。 一个包必须引入 (import)另一个包才能使用另一个包中的公有(导出的)代码要素。 包名和 包的引入名也都必须是标识符。 尽管高级编程语言代码比底层机器指令友好和易懂,我们还是需要一些注释来 帮助自己和其他程序员理解我们所写的代码。 在下一节的程序示例中,我们 可以看到很多注释。 一个简单的Go示例程序 为了对各种代码元素有一个更清楚的认识,让我们来看一个简短的Go示例程0 码力 | 821 页 | 956.82 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
所以现在《Go语言101》大约有50篇文章。 你曾经的困惑主要包括哪些方面? 一些困惑是关于一些Go语法和语义设计细节的。 一些困惑涉及到某些类型的值,主 要是切片,接口和通道类型。 另外一些涉及到标准包API的使用细节。 你认为造成你曾经的困惑的主要原因是什么? 第0章:关于《Go语言101》 4 我觉得最主要的原因是我当时抱着Go是一门非常简单的语言的态度去学习和使用 Go。 持有这种态度阻止了我更深刻地理解Go。 一个操作可能从一个硬件设备读取、或者向一个硬件设备写入 一些数据,从而完成一个特定的任务。 对于现代计算机来说,最基本的操作是底层 计算机指令,比如CPU和GPU指令。 常见的硬件设备包括内存、磁盘、网卡、显卡, 显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言通过对 底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观和易于理 解。 在流行高级编程语言中,一个操作通常是 一个包必须引入(import)另 一个包才能使用另一个包中的公有(导出的)代码要素。 包名和包的引入名也都必 第4章:程序源代码基本元素介绍 16 须是标识符。 尽管高级编程语言代码比底层机器指令友好和易懂,我们还是需要一些注释来帮助 自己和其他程序员理解我们所写的代码。 在下一节的程序示例中,我们可以看到很 多注释。 一个简单的Go示例程序 为了对各种代码元素有一个更清楚的认识,让我们来看一个简短的Go示例程序。0 码力 | 591 页 | 21.40 MB | 1 年前32.1.3 如何用Go模拟CPU
本人摄于哈佛计算机学院 计算机的演化历史 • 因为改纸带比较麻烦 • 冯诺伊曼架构 • 又称存储程序型计算机 • 可在运行时改变指令 • 指令控制指令和数据 计算机的演化历史 • 因为改纸带比较麻烦 • 冯诺伊曼架构 • 又称存储程序型计算机 • 可在运行时改变指令 • 指令控制指令和数据 • 用啥实现他老人家可没说 本人摄于MIT CSAI Lab 计算机的演化历史 • 冯诺伊曼架构 草稿纸 抽象多且环环嵌套 • 硬件过于复杂 • 软件基于操作系统等复杂概念 • 真的快且便宜 Go模拟CPU • 如何用Go实现冯诺伊曼架构CPU? • 简单:一个循环+一个大数组 读取当前指令 执行指令 下一条指令 模拟目标 – MOS 6502 • 诞生于1975年 • MOS 6502应用范围广 • 资料多且易获得 • 简单、容易实现的现代CPU MOS 6502简介 • 8位,变长ISA(CISC) – 0x1FF 0x1FF – 0xFFF9 0xFFFA Go模拟6502控制单元 • 读取当前指令:16位PC寄存器 • 执行指令 • 指令译码器(读出来的指令是什么) • 指令执行器(按指令执行) • 6502支持NOP指令(啥都不做) Go模拟6502控制单元 • 指令结构(instruction) • 操作码(valid opcode) • 寻址模式 (address mode)0 码力 | 42 页 | 7.10 MB | 1 年前3基于 mesos 的容器调度框架
http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 7/36 消息交互 upone 通过 /api/v1/scheduler (/api/v1/scheduler) 和 mesos master 完成交互 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 12/36 More Features 基于以上的 mesos http api, upone 可以实现一个具备基本功能的调度框架 那么除此之外, upone 还可以到哪些 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot 分布式一致性协议实现高可用 hashicorp/raft (https://github.com/hashicorp/raft) 领导选举: 心跳机制来触发选举, term 充当逻辑时钟的作用 日志复制: 领导者把一条指令(能被复制状态机执行)附加到日志中,发起附加条目 RPC 请求 给其他角色 强领导者:日志条目只从 leader 发送给其他的服务器 2017/8/3 基于 mesos 的容器调度框架 http://go-talks0 码力 | 36 页 | 2.49 MB | 1 年前3
共 71 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8