Day12 同步状态控制 Synchronizer

由於我们可藉由产生带重叠范围的配对请求,而这些配对请求将并发(Concurrently)的触发 MMF,就算是 Evaluation 已经针对这些 overlapping 选举出最合适的结果,这会在其余并发中的 MMF 选举过程,产生一个短暂的冲突时间点,为了解决这样的困扰,我们需要使用一个外力来中断这些 MMF,这便是 Synchronizer 的同步作用。

Synchronizer 状态

简单说起来这些状态,便是为了完成 singleton 所设计出来的过程,分别为:

  • Idle State: 闲置状态,没有正在处理的 MMF
  • Registration : 注册状态,Open Match backend 在呼叫 MMF 之前会先向 Synchronizer 注册,但这编其实有一个小限制,这些被记录的注册时间是有限制的,称之为 Registration window,这个 window size 可透过设定档调整,所有在同一个 Registration window 的配对请求将被一并评估
  • ProposalCollection: 配对搜集阶段,当注册阶段完毕後,在 Registration window 的请求将触发 MMF,并且产生一个 ProposalCollection window,将所有 MMF 回传的结果搜集起来
  • Evaluation: 选举阶段,这阶段发生在所有 MMF,都向 Evaluator 提出选举评估时,会触发 Synchronizer 控制以下两种行为:
    • ProposalCollection 将暂停受理接收新的 MMF 加入,直到当前 ProposalCollection 选举出结果
    • 所有试图在进入选举阶段後,才进请加入的 ProposalCollection 将被舍弃

Synchronizer 设定

Synchronizer 可以透过调整以下设定值,来改变 Registration and ProposalCollection 状态的搜集时间。

  • registrationIntervalMs: millisecond
  • proposalCollectionIntervalMs: millisecond
~ kubectl describe -n open-match configmaps open-match-configmap-override

Name:         open-match-configmap-override
Namespace:    open-match
Labels:       app=open-match
              component=config
              release=open-match
Annotations:  chart: open-match-1.2.0
              heritage: Helm

Data
====
matchmaker_config_override.yaml:
----
# Length of time between first fetch matches call, and when no further fetch
# matches calls will join the current evaluation/synchronization cycle,
# instead waiting for the next cycle.
registrationInterval:  250ms
# Length of time after match function as started before it will be canceled,
# and evaluator call input is EOF.
proposalCollectionInterval: 20s
# Time after a ticket has been returned from fetch matches (marked as pending)
# before it automatically becomes active again and will be returned by query
# calls.
pendingReleaseTimeout: 1m
# Time after a ticket has been assigned before it is automatically delted.
assignedDeleteTimeout: 10m
# Maximum number of tickets to return on a single QueryTicketsResponse.
queryPageSize: 10000
backfillLockTimeout: 1m
api:
  evaluator:
    hostname: "open-match-evaluator"
    grpcport: "50508"
    httpport: "51508"
Events:  <none>

<<:  VM 执行个体 (二)

>>:  初学者跪着学JavaScript Day5 : 资料型别:Primitive values 和 Non-primitive values

题目背後的设计思维 - 资料结构与演算法

刷题的正确姿势 在前一天的 LeetCode 解题的思考策略与解题地图 中提到程序题目的两种考法,...

Day 27:语系包在 i 身上-Vue I18n 前置作业

因应国际化的需求,专案决定也要符合 international 的规格,Navbar 右上角的「选择...

Day30 小实作 Image Preview Box

终於完赛了,很感谢iT邦帮忙铁人赛这个活动,让我在30天内因为要发文而不断的学习,原本是一个下了班...

802.1X 是网路访问控制 (NAC) 的 IEEE 标准

-802.1X 角色 .请求者不直接向 RADIUS 服务器进行身份验证。它向身份验证者进行身份验...

[ Day6 ] General Skills 小柚子

大家中秋节快乐 有没有烧肉吃饱饱,剥柚子,带柚子帽呢? 今天正15,月亮超级圆好漂亮喔 今天是我们来...