用Go语言实现推送服务器用Go语言实现推送服务器 陈叶皓 chen.yh@ctrip.com 议程 • 推送服务器介绍 • Golang特点 • 推送服务架构 • 部分代码 • 上线效果 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 什么是推送服务器 • 推送业务信息到手机端 • 始终保持连接 推送服务器要求 • 高并发 • 可靠性 • 高性能 • 支持水平扩展 • 无单点故障 无单点故障 Go语言特性 • 静态的、编译的 • 自动内存回收 • 命令式编程 • 函数可以作为值 • 面向并发 • 内置RPC支持 推送服务器要求的应对 • 高并发 – goroutine • 可靠性 – 使用Redis暂存消息 • 高性能 – 静态编译语言 • 支持水平扩展 – 使用RPC组成集群 • 无单点故障 – 使用Redis实现数据共享 Go语言的并发模型 • 事件驱动,共享线程池 包含一 个获取返回值的channel 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 逻辑架构 去中心化设计 • 客户端随机连接 • Redis集中存储地址表 • 信息发送2跳到达 消息缓存设计 • 消息预存(Redis) • 尝试发送 • 发送成功后删除 客户端注册时序图 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 串行场景-Socket0 码力 | 25 页 | 260.04 KB | 1 年前3
1.3 七牛如何做HTTP服务测试七牛如何做 HTTP服务测试? 许式伟 2015-4-18 HTTP服务测试 • 单元测试 – 某个独立子服务的测试 • 集成测试 – 整个集群对外业务API的测试 • Stage环境 • Product环境 怎么测? • 七牛早期做法 – 实现服务逻辑(Service Implementation) 直接基于协议测试呢? – 比如,基于 http.Client 类直接写测试案例 • 问题 – 代码相对冗长 – 业务逻辑表达不直观 • 写一些辅助函数能够略为改观,不过会有逐步写测试专用SDK的倾向 七牛当前做法 • 引入 httptest DSL 文法 • 更接近基于 http.Client 写测试案例的思路 比如 `qiniu f2weae23e6c9f jg35fae526kbce` 返回一个 auth object,用字符串无法表达 http Request 的表达 req <http-method> header … header 0 码力 | 27 页 | 422.11 KB | 1 年前3
Iteratively Migrating an HTTP Service to Go and gRPC Using grpc-gateway and httputil.ReverseProxyIteratively Migrating an HTTP Service to Go and gRPC Using grpc-gateway and httputil.ReverseProxy Igor Dubinskiy GitHub: idubinskiy Twitter: idubins ● Everything but the browser a. Modify clients existing service Options to migrate a service from HTTP to gRPC Proxy using grpc-gateway and httputil.ReverseProxy https://github.com/idubinskiy/http-to-grpc-gateway Demo Thank you!0 码力 | 6 页 | 740.76 KB | 1 年前3
Go Web编程go,执行生成的文件,就会在底目 录下生成相应的html文件 交流 交流 欢迎大家加入QQ群:259316004 《Go Web编程》专用交流群 大家有问题还可以上德问上一起交流学习:http://www.dewen.org/topic/165 致谢 致谢 首先要感谢Golang-China的QQ群102319854,里面的每一个人都很热心,同时要特别感谢几个人 四月份平民 面向对象 2.6. interface 2.7. 并发 2.8. 小结 3.Web基础 3.1 web工作方式 3.2 Go搭建一个简单的web服务 3.3 Go如何使得web工作 3.4 Go的http包详解 3.5 小结 4.表单 4.1 处理表单的输入 4.2 验证表单的输入 4.3 预防跨站脚本 4.4 防止多次递交表单 4.5 处理文件上传 4.6 小结 5.访问数据库 5.1 例如builtin包,那么执行go doc builtin 如果是http包,那么执行go doc net/http 查看某一个包里面的函数,那么执行godoc fmt Printf 也可以查看相应的代码,执行godoc -src fmt Printf 通过命令在命令行执行 godoc -http=:端口号 比如godoc -http=:8080。然后在浏览器中打开 127.0.0.1:8080,你将会看到一个golang0 码力 | 295 页 | 5.91 MB | 1 年前3
Go 入门指南(The way to Go)协程和恢复(recover) 14.7 新旧模型对比:任务和worker 14.8 惰性生成器的实现 14.9 实现 Futures 模式 第 15 章 网络,模板和网页应用 15.1 tcp服务器 15.2 一个简单的网页服务器 15.3 访问并读取页面 15.4 写一个简单的网页应用 第 16章 常见的陷阱与错误 16.1 误用短声明导致变量覆盖 16.2 误用字符串 16.3 发生错误时使用defer关闭一个文件 为知识的传承献上您的一份力量! 如果当前文档生成时间太久,请到 书栈(BookStack.CN) 获取最新的文档,以跟上知识更新换代的步伐。 文档地址:http://www.bookstack.cn/books/the-way-to-go_ZH_CN 书栈官网:http://www.bookstack.cn 书栈开源:https://github.com/TruthHun 分享,让知识传承更久远! 感谢 GUI 框架项目正在如 火如荼地进行中,或许我们会在不久的将来看到一些可用的 Go 语言 GUI 框架。不过现阶段的 Go 语言已经提供了 大量有关 Web 方面的功能,我们可以通过它强大的 http 和 template 包来达到 Web 应用的 GUI 实现。 我们会经常涉及到一些关于 Go 语言的编码规范,了解和使用这些已经被广泛认同的规范应该是你学习阶段最重要的 实践。我会在书中尽0 码力 | 466 页 | 4.44 MB | 1 年前3
Go 入门指南(The way to Go)GUI 框架项目正在如火如荼地进行中,或许我们会在不久的将来看到一些可用的 Go 语言 GUI 框架。不过 现阶段的 Go 语言已经提供了大量有关 Web 方面的功能,我们可以通过它强大的 http 和 template 包来 达到 Web 应用的 GUI 实现。 我们会经常涉及到一些关于 Go 语言的编码规范,了解和使用这些已经被广泛认同的规范应该是你学习阶 段最重要的实践。我会在书 价值的。 Go 语言的官方网站是 golang.org,这个站点采用 Python 作为前端,并且使用 Go 语言自带的工具 godoc 运行在 Google App Engine 上来作为 Web 服务器提供文本内容。在官网的首页有一个功能叫做 Go Playground,是一个 Go 代码的简单编辑器的沙盒,它可以在没有安装 Go 语言的情况下在你的浏览 器中编译并运行 Go,它提供了一些示例,其中包括国际惯例 UTF-8 编码的字符串,就 连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化! 1.2.6 语言的用途 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并 行的支持,这对于游戏服务端的开发而言是再好不过了。 Go 语0 码力 | 380 页 | 2.97 MB | 1 年前3
1.6 resource scheduling & container technology for financial service_yujunScheduling)算法就是以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响 应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮询调 度算法容易导致服务器间的负载不平衡。 Gopher China China 2015 不喜欢因循守旧的工程师 渴望造点新东西的技术人 看到金融IT行业挑战和机遇的朋友 热爱开源的大粉丝们 我们虚位以待 http://golanghome.com/post/494 Or email : joeyu@bsgchina.com 0 码力 | 21 页 | 27.20 MB | 1 年前3
2.3 用golang写一个操作系统功能 模拟ssh登录各server, 采集所有请求的数据 根据服务器、⽇日期、请求,显⽰示所选请求的性能⾛走势图,包括平均和最⼤大响应时间。 选定时期,显⽰示这⼀一天所有请求的请求数⺫⽬目,平均响应时间中,最⼤大响应时间。 可以根据请求数、平均响应时间,最⼤大响应时间对数据时⾏行排序。 代码 1个⽂文件服务器、5个webapi、6个goroutine 部署简单,可以同时在windows和linux上运⾏行 源 现有互联⺴⽹网的⼤大部分服务形态,都可以在Leither上快速构造出来。 可以构造视频⺴⽹网站、微博、微信、IM。。。。。 所有这些应⽤用,⽤用户体验基本不变的情况下 不需要中⼼心服务器存在 Leither是什么? 数 据 层 底 层 ⺴⽹网 络 层 应 ⽤用 层 数 据 库 系 统 接 ⼝口 邮 件 模 块 前 端 架 构 WEB Server RPC 1毫=1K流量信⽤用 1K=1G流量信⽤用 Leither的-货币 阿⾥里云2万台服务器 新开的北京中⼼心1万台 http://server.zol.com.cn/452/4522831.html 09年,Google9万台服务器(另说06年45万台) 构建同⾏行规模(⺴⽹网络,存储)⼤大约只需要数千万⼈人民币 类⽐比: ⼀一个0 码力 | 33 页 | 1014.12 KB | 1 年前3
2.7 Golang与高性能DSP竞价系统第⼀一次签⼊入 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • http包的HelloWorld性能测试 为什么选择Golang Via: http://www.cnblogs.com/QLeelulu/archive/2012/08/12/2635261.html 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 直接⽤用golang的http包 • 只使⽤用gorilla/mux做简单的请求路由 • 封装简单的HTTPBaseHandler HTTP竞价接⼝口 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved Reserved • Nginx做前端 • 开多个Go进程 • Nginx的upstream做负载均衡 • Nginx的upstream记得开 keepalive 部署:web服务器 Nginx Go竞价服务 Go竞价服务 Go竞价服务 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved0 码力 | 51 页 | 5.09 MB | 1 年前3
微服务容灾治理们⼀般都是⼼⾥默默骂⼀句,然后点左边那个按钮,对吧? 那我们想想,如果我们的服务CPU被打满了,是不是后⾯所有的请求也都被卡住了?等服务处理完请 求的时候,⽤⼾那⾥可能已经超时离开了,结果服务器很忙,但都是做的⽆⽤功。如果这⾥不能理 解,停下来好好思考⼀番,如果还不懂的话,可以来go-zero群⾥讨论讨论。。。 2.1模拟CPU密集型服务 有⼈可能会问CPU密集型服 吗?你经常需要通过cpuprofiling来优化性能吗?可以理解为服务的IO⽐较快,或者⽐较少,瓶颈是 在CPU消耗上。 你可以直接⽤ goctl quickstart -t mono 命令⽣成⼀个HTTP服务,然后在logic代码⾥加 上模拟CPU负载的请求处理代码。 模拟CPU计算的代码:https://gist.github.com/kevwan/ccfaf45aa190a benchmark 结果可以看出单个请求的逻辑处理需要3.6msCPU资源(不包括服务端中间件处理 消耗)。对于两核的容器来说,qps上限约为550(2000/3.6)。但是我们是⼀个HTTPserver,肯定 还有接受请求、解析请求、返回结果等开销,实际上是达不到550qps的。 这个模拟CPU的代码本⾝不重要,就不做介绍了。 2.2压测场景 2.2.1场景⼀(不开启过载保护)0 码力 | 13 页 | 1.68 MB | 1 年前3
共 86 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9













