【Gopher China 2015】Go在猎豹移动的应用

### Go在猎豹移动的应用 #### 一、为何选择Go? 1. **优雅与简洁**:Go语言的设计理念强调简洁性,使得代码更加易于阅读和维护。 2. **高性能**:Go是一种系统级语言,拥有良好的性能表现,适用于构建高性能应用。 3. **静态类型与强类型约束**:Go是一种静态类型的编程语言,它通过类型检查来帮助开发者减少错误的发生,提高程序的健壮性。 4. **交叉编译与部署**:Go支持跨平台编译,可以在一种平台上编写代码,并在另一种平台上编译和运行,极大地简化了部署过程。 5. **网络模型与并发模型**:Go内置了对并发的支持,通过goroutine和channel机制来简化并发编程的复杂度。 6. **强大的标准库与工具支持**:Go的标准库非常丰富,涵盖了网络、加密、文本处理等多个领域,同时还提供了各种实用的内置工具。 7. **活跃的开源社区**:Go拥有一个活跃且支持性强的开源社区,这意味着开发者可以轻松获取帮助和支持。 #### 二、猎豹移动的应用实践 1. **业务层面** - **全球passport体系**:利用Go构建了全球passport认证系统,确保了用户身份的安全验证。 - **游戏开放平台**:使用Go开发的游戏开放平台为游戏开发者提供了丰富的API和服务。 - **游戏支付体系**:Go用于构建稳定高效的游戏支付系统,保障了用户的支付体验。 2. **平台层面** - **推送平台与即时通信**:基于Go开发的推送平台(gopush)和即时通信(goim)服务,实现了高效的消息推送和即时通信功能。 - **智能客户端**:基于Redis Sentinel的smartclient服务,增强了客户端的智能性和响应速度。 - **RPC框架**:Go被用于构建高性能的RPC框架,提高了服务间通信的效率。 - **发号器集群**:通过gosnowflake实现的发号器集群能够提供分布式环境下的唯一ID生成服务。 - **统一配置管理**:goconf实现了对分布式系统配置的统一管理,提高了配置变更的效率和安全性。 3. **接入层优化** - **DNS问题解决**:针对移动网络环境下DNS存在的问题,采取了避免DNS劫持、失效等措施,提高了服务的可用性和稳定性。 - **协议压缩**:采用PB(Protocol Buffers)结合Gzip的方式对传输的数据进行压缩,有效减少了网络流量消耗。 - **协议设计改进**:通过合并请求等方式优化了协议设计,使得请求更加高效。 - **TCP握手优化**:通过使用keepalive和长连接技术,减少了TCP握手带来的延时。 - **动态加速技术**:通过代理模式(proxy)和动态CDN技术提高API的响应速度。 4. **SOA架构** - **服务间通信**:Web站点通过RPC与Go服务进行交互;国内使用DNS、VIP、LVS、Tengine等组件,海外则采用ELBDNS、ELB等进行服务路由。 - **服务发现与负载均衡**:依赖于Zookeeper实现服务发现与负载均衡。 - **数据访问层**:使用Redis SDK访问Redis数据库,直接连接MySQL数据库。 5. **服务管理** - **无状态服务**:服务设计应尽可能保持无状态,以便于横向扩展。 - **服务质量监控**:通过本地日志、Flume、HDFS、Hive等工具进行API的质量监控。 - **实时监控**:使用Flume将日志发送至Kafka,并结合Spark进行实时数据分析。 6. **RPC选型** - **多语言支持考量**:net/rpc不支持多语言。 - **性能对比**:thrift与grpc在性能上的比较表明,grpc具有更高的吞吐量。 - **链路追踪**:参考Google Dapper论文实现链路追踪,使用context对象进行追踪。 7. **缓存策略** - **多级缓存策略**:模拟CPU缓存策略,使用gomap实现L1缓存。 - **核心缓存存储**:使用Redis作为主要的缓存存储。 - **缓存扩展**:通过哈希取模的方式对缓存进行水平扩展。 8. **统一配置管理系统** - **配置格式**:支持XML、YAML、JSON、INI等多种格式。 - **版本控制**:经历从逐机配置到统一管理的演变。 - **安全与一致性**:确保配置数据的安全性和强一致性。 9. **gosnowflake发号器** - **实现原理**:基于Twitter Snowflake ID算法。 - **特性**:支持数据中心ID和工作节点ID,每个毫秒可生成4096个序列号。 - **RPC级别的容错**:支持net/rpc级别的故障转移。 10. **遇到的问题与建议** - **内存管理**:注意defer操作可能引起的内存占用问题。 - **数据库连接管理**:确保设置数据库连接的空闲时间。 - **SQL prepare bug**:留意并规避已知的SQL prepare bug。 - **GC优化**:关注垃圾回收(GC)对程序性能的影响,避免长时间的全局暂停(stop-the-world)现象。 - **变量作用域与赋值操作**:正确理解变量的作用域及赋值操作符的行为。 - **安全权限**:注意setuid和setgid的有效性问题。 - **预分配**:合理使用map和slice的预分配功能,以优化内存使用。 猎豹移动在Go语言的应用实践中充分利用了Go的优势,并针对具体场景进行了深入的技术探索与优化。这些实践不仅提升了服务的性能和稳定性,也为其他企业提供了宝贵的参考案例。
















剩余23页未读,继续阅读

- yansha6662015-12-08挺好的 就是太简略了
- 「已注销」2015-05-20go实践中的应用
- hxyghost2015-05-16应用部分还是不太明白,似乎篇幅太少?

- 粉丝: 429
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


