UTM 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
UTM 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
UTM 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
UTM 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
UTM 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 GPL
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发常用工具包
开源组织
地区 国产
投 递 者 dga4654dan
适用人群 未知
收录时间 2016-03-28

软件简介

UTM 用户线程模型

在一些金融交易处理、游戏数据处理等逻辑较为复杂的领域中,各个接口可能会交叉使用和修改一些资源数据,这样就很容易导致一些并发的问题,如果对于每个资源都要考虑如何保证其并发安全问题,那么整个分析过程就会变得很复杂,而复杂的逻辑往往容易有所疏漏。

Utm就是设计来屏蔽单个用户的并发问题的,就是用户访问自己的资源是不需要考虑其并发安全问题的(多个用户访问的资源依然需要处理),主要想法是将用户的请求排序并调用线程池中的线程依次处理。

一个简单的场景:用户买入一个东西的总额是受限制的,用户a发起两次买入请求(请求1 和 请求2) 在通常情况下,需要在用户买入请求中加入锁或者使用原子类,从而避免 请求1 和 请求2 同时处理导致超过限制; 而在utm下则不需要考虑类似问题,用户a的请求1执行完了才会执行请求2。 而现实业务中类似的场景有很多,使用utm确实使开发的复杂度降低。

这样就不会有说一个用户的两个请求被同时处理这样的情况,相对起来开发的复杂度就降低了很多,而且也意味着多个线程争抢资源的概率减少了(一个用户 最多只有一个请求正在被处理)。用户的请求不会被并发处理,从单个用户上来是比原来要慢点,但从硬件相对整个用户群来说,通常的应用的用户的数量都会远远 大于cpu的数量,所以这样不会导致cpu利用不足问题,相反utm能更好的将cpu资源分配给各个用户,竞争减少也意味着程序更高效了。Utm的核心 qtm本身虽然会有一些锁操作,但都是一些小锁块,应对多个用户的每秒几千甚至上万个的请求并没有什么延迟,所以也就没有打算开发基于CAS版本的qtm 的打算(服务处理的瓶颈通常出在涉及IO方面,特别是数据库处理,相比起来utm的开销有点微不足道)。

特点:

  1. Utm保证用户生命流程的完整性和执行顺序。 (eg:一个用户登录,如果他已经登录了,那么旧的用户会被先退出,然后新的用户再登录) (eg:用户发起 请求1 后 发起 请求2,则 请求1 一定先于 请求2 执行)

  2. 用户的请求被有序的执行,所以用户访问自己的资源是不需要考虑其并发安全问题,降低了开发的复杂度。 (eg:有一个用户未读消息的统计,在utm中就可以直接是一个int类型保存在内存中,如果在其他没有保证并发控制的地方则至少要声明为AtomicInteger 或者使用锁来维护这个字段)

  3. 提供用户资源接口,提供了用户生命流程中的各个重要点的切面,让开发者可以更好的管理自己定义的用户资源。 (eg:用户队列:在用户开始登陆标志位设置成功后 申请,当用户登录连接检查失败、用户退出的时候 释放)

  4. 高并发性 Utm的核心qtm本身虽然有一些锁操作,但都是一些小锁块,可以应对多个用户的每秒几千甚至上万个的请求。 (服务处理的瓶颈通常出在涉及IO方面,特别是数据库处理,相比起来utm的开销太小)

  5. 具有良好的 兼容性 Utm可以非常容易得应用在不同的服务端(像SmartFoxServer, Netty等)

详情见utm-x.x.x.doc

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2018/01/04 19:29

超链接中 utm_source, utm_medium 等参数的含义是什么?

作者:张溪梦 Simon 链接:https://www.zhihu.com/question/48724061/answer/122730629 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 在这里详细介绍下 UTM 的使用和含义。 UTM 除了最基础的追踪流量来源外,还可以根据不同渠道、不同内容做精细化运营分析,帮你对比区分优质和劣质渠道,提高流量在产品内的转化。 先来看一个结果:添加 UTM 参数的链接的链接投放后,我们就可以看到这样的...

0
0
发表于开发技能专区
2016/03/28 10:16

2.Utm-模块设计

2.Utm-模块设计 详细图: Qtm:Qtm是Utm的核心,是一个队列线程模型,提供一个任务队列,可以往其中添加任务,qtm会调用线程池中的线程去依次处理这个队列中的任务,有点类似于java原生的BolkingQueue,为什么不是使用BolkingQueue:相对来说qtm提供了更适应这个需求的封装和为以后预留了更好的扩展的空间。 用户资源的管理:提供了用户生命流程中的各个重要点的切面,让开发者可以很清晰的看到资源的申请和回收,也可以更好的管...

2
1
发表于软件架构专区
2016/03/28 10:17

UTM 用户线程模型

Utm-简介 Git@OSC: http://git.oschina.net/daemon_c/UTM ( utm相关:http://git.oschina.net/daemon_c/QTM) UTM-Demo Git@OSC: http://git.oschina.net/daemon_c/UTM-demo (SmartFoxServer,Netty) 在一些金融交易处理、游戏数据处理等逻辑较为复杂的领域中,各个接口可能会交叉使用和修改一些资源数据,这样就很容易导致一些并发的问题,如果对于每个资源都要考虑如何保证其并发安全问题,那么整个分析过程就会变得很复杂,而复...

1
22
发表于软件架构专区
2016/03/28 10:17

5.Utm线程模型

Utm线程模型 游客请求和用户请求分别调用UserThreadModeFilter的handleVisitorRequest和handleUserRequest方法,之后再调用各自的过滤器(在UserThreadMode实例化时传入)处理。 默认的游客处理器:VisitorRequestFilterNotQueue:并没有采取队列的形式,直接调用线程池去处理请求。 默认的用户请求处理器:RequestFrequentFilter:将消息放入用户的qtm任务队列中,并触发qtm线程去处理请求;该Filter还会过滤用户频繁的请求( m...

0
0
发表了博客
2018/07/23 11:12

UTM坐标转WGS84

先根据下面的图找到目标地区的编号,中国东部地区属于UTM Zone 50N http://www.dmap.co.uk/utmworld.htm  查找UTM 50N 的 EPSG 执行标准 https://epsg.io/?q=UTM+zone+50N WGS 84 / UTM zone 50N EPSG:32650 >>> from pyproj import Proj,transform >>> WGS84 = Proj(init='EPSG:4326') >>> p = Proj(init="EPSG:32650") >>> x,y = 526434.351935, 3522210.609046 >>> transform(p, WGS84, x, y) (117.27936202563953, ...

0
0
发表了博客
2012/08/13 17:14

UTM/NGIPS/NGFW分析

UTM:是可以把多种安全技术集成到一个平台的产品.它包含了深度检测技术,访问控制技术,加密技术,用户管理,终端管理,扫描技术等 NGIPS:是sourcefire提出的集成反病毒/反恶意软件(macfee),WEB过滤,应用识别,流量识别(对于voip/mms/rtsp等不做深度包检测) NGFW:paloalto network是把访问控制,用户管理,应用识别,深度检测等技术集成 UTM相比NGIPS/NGFW来说:增加了DLP(websense)和垃圾邮件(梭子鱼)管理,此外他们全没有VPN,终端管理,扫描...

0
0
发表于软件架构专区
2016/03/28 10:17

7.Utm示例-SmartFoxServer集成

Utm示例-SmartFoxServer集成 在各个平台上集成utm主要是通过一个过滤器将该平台收到的信息转发到utm里,由utm线程调度处理。 SmartFoxServer(这里测试使用的是2.9.0版本(在商用稳定运行的是2.7.0,由于该版本已经比较老所以这里没有使用)) 一个Java写的跨平台socket服务端(收费),它已经实现了在很多平台上的客户端api(flash、html5、ios、android等),开发起来比较便捷,这里就不介绍关于smartFoxServer的基本内容了,...

0
0
发表于服务端专区
2016/03/28 10:16

8.Utm示例-Netty集成

Utm示例-Netty集成 在各个平台上集成utm主要是通过一个过滤器将该平台收到的信息转发到utm里,由utm线程调度处理。 Netty4(4.1.0.Beta5) 一个Java写的基于NIO的客户,服务器端编程框架,这里就不介绍关于Netty的基本内容了,只是关注如何在Netty4上集成utm。(这次是本人刚接触Netty,所以可能对于其中的一些细节不甚了解,如果有什么不对的地方希望大家提出)。 测试代码中前后端交互的编码使用了 netty自带的长度LengthFie...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
6 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部