当前位置: 首页 > news >正文

飞信分布式存储的结构

Site和Pool的概念

Site和物理Pool

 

Site和物理pool的关系示意图:

 

 

概括说来,一个site至少包含一个物理Pool;每个物理Pool包含了多个逻辑pool(功能环境里面,主要集中在物理Pool6Pool7  分别包含了1万多个和8000多个逻辑pool)

 

 

逻辑Pool

每个用户注册的时候,会分配一个逻辑pool,代码段:

 

foreach (CFG_CarrierMapping mapping in_carrierMappings.Items) {
                                     if(mobileNo.Value >= mapping.MappingStart &&
mobileNo.Value <= mapping.MappingEnd) {
                                               intn = (int)((mobileNo.Value -
mapping.MappingStart) /(long)mapping.LogicalPoolCapacity);
                                               returnn + mapping.LogicalPoolStart;
                                     }
                            }


1.找到用户手机号码对应的号段

2.(手机号码-起始号段)/logicalPool容量(比如1000) + logicalPool的起始值

 

Uri

 

飞信系统中的用户、群等资源以URI标识,客户端一般将URI整体作为字符串处理,且大小写敏感。

 

格式定义:

sip:SID@Domain;p=logical-pool-id[;t=robot]

用户URI(Id)

 

飞信用户URI是由几部分组成:

1)  协议头标识“sip:”,注意前后不带空格。

2)  SID一般是个十进制的正整数,但应作为字符串来处理。

3)  @domain部分为用户所在域,除个别协议中有特别说明外,一般不能省略。

4)  用户URI带有的第一个为p参数,它的值为用户所在的逻辑区域的ID。除个别协议中有特别说明外,一般不能省略。

5)  仅当飞信用户为机器人时,URI中带有第二个参数,即t参数,取值固定为robot。

 

示例:

sip:50000100@fetion.com.cn;p=3370

 

示例(机器人):

sip:80000100@fetion.com.cn;p=9990;t=robot

 

群URI(group)

 

飞信群URI格式定义与飞信用户相同,但SID组成为“PG”+群号码,如群号码为3000100的群,SID为

:PG3000100 。

 

示例:

sip:PG3000100@fetion.com.cn;p=1400

 

 

服务的URI(srv)

服务名称@domain

ServiceName@fetion.com.cn;

 

 

在调用服务的时候,uri就是请求来源,可以通过配置,来定义该服务是否接收这种uri的请求。

相关数据表结构

Site


物理Pool


逻辑Pool


Carrier(运营商)


CarrierMapping

 

RouteTable


RoutePolicy

 

HashCluster


HashClusterNode


路由的工作方式


Site


Pool


Hash

 

调用服务示例

 

 

调用服务之前,先注册RPC通道

RpcProxyFactory.RegisterClientChannel(newRpcSipcClientChannel());


 

调用IBS的代码段示例

 

  RpcClientProxyibsClientProxy =
RpcProxyFactory.GetProxy<IUserProfileWpaService>   (newIdUri(userIndex.UserId,userIndex.LogicalPoolId, "IBS"));
                    WpaGetUserInfoArgs userArgs= new WpaGetUserInfoArgs();
                    userArgs.UserId =userIndex.UserId;
 
                    UserInfoAll userInfo =ibsClientProxy.Invoke<WpaGetUserInfoArgs,UserInfoAll>("GetUserInfo", userArgs);

 

路由的过程,就是通过IdUri找到serverUri的过程。

程序初始化的时候,会执行如下图所示的操作,可以把RouteProvider当做serverUri的生产机器。

给它ServiceName和Policy  它会返回serverUri。

 

流程图:

 

 

 

总结

调用一个服务之前,先要去RoutePolicy看看这个服务支持的路由策略,然后根据不同的policy确保做了相应配置。

同样,一个服务上线了,如果存在其他服务调用自己的情况,要确保自己routePolicy做了配置并确保对方使用了正确的URI(例如IDCS的 protocol只配置了srv,另一个服务用IdUri是找不到的)。

每个服务在配置路由策略的时候,如果不是hash,在routeTable和routePolicy里面配置路由策略。

如果是hash,在RoutePolicy配置ConfigReference,在HashCluster和HashClusterNode里面配置相应的字段。

 

 

 

 

 

相关文章:

  • 使用Zoundry进行测试了下!
  • 使用HTML5制作游戏
  • [Web开发] IE 所有版本打包下载,网页兼容测试必备
  • c# LazyQueueT实现
  • Windows NT/2k/XP/Vista 管理员密码重置
  • c# 使用sharppcap实现 网络抓包
  • 数学之美系列十六(上)- 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型
  • [Web开发] 如何改变IE滚动条的颜色
  • sql 选择两列中最大的那列
  • 解读CNNIC《中国手机上网行为研究报告》
  • ms sql常用语句汇总
  • 把表变成编辑状态
  • sql server 数据库语句
  • WoWModelViewer分析
  • 彩云项目总结
  • ES6核心特性
  • Go 语言编译器的 //go: 详解
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • leetcode388. Longest Absolute File Path
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MySQL-事务管理(基础)
  • Python - 闭包Closure
  • python docx文档转html页面
  • React组件设计模式(一)
  • scala基础语法(二)
  • Shell编程
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Terraform入门 - 1. 安装Terraform
  • vue-router的history模式发布配置
  • Vue官网教程学习过程中值得记录的一些事情
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 看域名解析域名安全对SEO的影响
  • 那些年我们用过的显示性能指标
  • 你不可错过的前端面试题(一)
  • 盘点那些不知名却常用的 Git 操作
  • 如何在 Tornado 中实现 Middleware
  • 使用SAX解析XML
  • 数据结构java版之冒泡排序及优化
  • 微信小程序:实现悬浮返回和分享按钮
  • raise 与 raise ... from 的区别
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • # 飞书APP集成平台-数字化落地
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #QT项目实战(天气预报)
  • (11)MATLAB PCA+SVM 人脸识别
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (笔试题)合法字符串
  • (独孤九剑)--文件系统
  • (二十三)Flask之高频面试点
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Reactor简单使用教程
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径