- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
毛剑
Why Go ?
优雅简洁,少就是多;
性能好、系统级语言;
静态语言、强类型约束;
交编译部署;
网络模型并发同步模型;
标准库、内置工具强大支持;
开源社区活跃;
我们做了啥?
业务
猎豹移动全球passport体系;
游戏开放平台;
游戏支付体系;
平台
基于gopush的推送平台goim ;
基于redis sentinel的smart client ;
rpc框架;
gosnowflake发号器集群;
goconf统一配置管理;
接入层优化
DNS在移动网络下不适用;
避免劫持、失效,dns提供商故障;
协议压缩:pb+gzip ;
节约流量;
协议设计:职责单一不适用;
合并请求;
TCP Handshake影响RTT;
keepalived长连接;
API动态加速;
proxy模式动态CDN ;
SOA
Web站点是PHP开发的,通过RPC交互;
rpc和api都是基于Go开发的服务;
国内DNS-VIP-lvs-tengine-Go;
海外DNS-ELB DNS-ELB-Go;
Service之间通过Thrift或者net/rpc通讯;
依赖redis sdk访问redis ;
直连mysql ;
用户的所有业务逻辑基于Go处理;
Service
服务应该是无状态的;
api服务出现瓶颈的时候,直接scale out ;
graceful restart依赖健康检测;
api质量监控,使用日志来追踪,通过本
地日志+flume+hdfs+hive ;
实时监控可以考虑flume sink到kafka,再
依赖Spark计算;
RPC
协议远程调用的选型;
net/rpc,thrift ,grpc等;
链路追踪,参考Google Dapper论文,核
心思路是关键库植入代码,因为缺乏
AOP编程支持,我们使用golang blog推
荐的依赖context对象;
服务发现、负载均衡依赖ZK ;
弹性调度的支持,降级处理、动态扩容;
RPC选型
是否多语言支持?net/rpc不支持
性能如何?
thrift num:111324, time:30s, num/s:3710 ;
grpc num:159999, time:30s, num/s:5333 ;
net/rpc不依赖context ,实现数据跟踪,
需要修改源码;
grpc支持http2,方便移动端app使用;
Cache
模仿cpu使用多级cache ;
L1 cache :不经常修改,大量访问对性
能要求极致的,我们使用go map缓存信
息,使用COW保证无锁更新和访问;
使用redis作为核心的cache store ;
使用hash mod region方式对cache进行
扩展;
goconf
xml ,yaml ,json ,ini?
阶段1:逐idc,逐机器配置修改;
阶段2 :svn统一提交修改,每个idc一份;
阶段3 :配置统一管理化(agent模型);
一处修改,统一管理;
节点状态查看、回滚配置;
数据安全、强一致性;
goconf
/config/
| service/
| idc1/
| current/ ( {last_ver:v1.2, cur_ver: v1.1} )
| | section/
| | key-value ( {value:xxxx, comment:x} )
| snapshot/
| | v1.1/ (value是整个
原创力文档


文档评论(0)