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日志
按天/小时日志,可以输出到远程日志中心