tars 腾讯开源,高性能,微服务,rpc框架,有一套的微服务治理平台 个人感觉很大程度上还是借鉴zero ice这个开源的框架 1.运营 --透明部署,自动发布,立体化监控 2.平台 --容错容灾,负载均衡,灰度,管理 3.通信框架 --RPC,高性能,过载保护 4.公共组件 --框架和业务使用 5.统一协议 --可扩展,自动生成, 多平台 上面是tars的分层,对系统的各个模块进行抽象分层,各个层次之间解耦 node(服务节点,会对这台机器的server进行管理,提供启停,发布,监控,还有上传来的心跳) { server1 server2 servern } 公共框架节点 web管理系统 registry(路由+管理服务),服务节点的查询 patch(发布管理) config(配置中心) log(远程日志) stat(调用统计) property(业务属性) notify(异常信息) 心跳上报流程:server服务运行后,会定期上报心跳到node,node然后把服务心跳信息上报到registry服务,由registry进行统一管理。 node->registry server会上报信息到公共节点 服务架构: server client adminservant|servantimp servantproxy|callback servanthandle objectproxy|asyncthread bindadapter adapterproxy netthread netthread 调用方式: 1.同步 2.异步 3.单向调用 负载均衡: stringtoproxy(*obj) client ----------> registry | 对象名obj | | | | | server---------->node client根据对象名拉取到列表后,本地采用负载均衡策略(轮询/hash/权重)选择服务器 容错保护: 名字服务排除策略:心跳会上报到registry,client拉去列表时,剔除这个服务器 client主动屏蔽:客户端根据策略来屏蔽,然后还会自动重连,如果成功,再分发请求 过载保护: 就是网络的请求队列,如果队列对于某个长度则拒绝,如果包从队列中读取出来时超时,超时则不做处理 消息染色:不知道这个干嘛用 IDC分组: 为了加快服务间的访问速度,减少跨地区、跨机房调用带来的网络资源消耗,减少网络故障带来的影响,框架提供了跨地区、跨机房,就近接入的功能 拉取服务列表时,只拉取同一机房或者地区的服务器地址 set分组: 类似moba.frind.60和moba.frind.100,为了方便对业务服务部署管理进行标准化和容量化,框架提供了Set部署能力,set之间没有关系 数据监控: 集中配置 *.tars module MTTD { interface AccountService :对应一个servant即服务器提供者,提供一个多个具体接口 { } } app.server.servant 这样三层的结构 locator = mfw.mfwregistry.QueryObj@TEMPLATE_REGISTRY_ENDPOINT :这个应该就是registry agent-report = mfw.mfwagent.AgentReportObj@tcp -h 127.0.0.1 -p 2002 -t 3600000 应该是node,每台机器一个 日志系统 debug日志 按天/小时日志,可以输出到远程日志中心