0%

什么是Actor模型

探究ThingsBoard之前,需要先了解Actor(演员)模型:

在电脑科学中,演员模型(英语:Actor model)是一种并发运算上的模型。“演员”是一种程序上的抽象概念,被视为并发运算的基本单元:当一个演员接收到一则消息,它可以做出一些决策、创建更多的演员、发送更多的消息、决定要如何回答接下来的消息。演员可以修改它们自己的私有状态,但是只能通过消息间接的相互影响(避免了基于锁的同步) – wikipedia

在函数方法执行模式上,该模型与传统的面向对象的OOP模型不同。
OOP中方法调用是通过线程在不同对象的方法中进栈和出栈实现的,如下图:
单线程方法调用
对象涉及多线程调用时,就需要使用锁机制,避免单个对象的内在状态同时被多个线程修改而引发逻辑异常,未获取锁的线程就处于阻塞状态,浪费了系统资源,如下图:
多线程方法调用

阅读全文 »

声明:科学上网的目的是学习国外科学技术,不涉及任何违法活动

涉及工具

v2ray: 开源的网络代理工具,类似于shadowsocks工具,仅用于学习国外科学技术。
v2ray-plugin: 流量混淆插件,类似于simple-obfs工具,目的是避免代理流量特征被识别而拦截,提高隐匿性。

技术原理

原始的基于Websocket的数据传输,特征非常明显:有大量数据传递是在Websocket协议包里。
使用HTTP协议的数据传输:第一个包是HTTP协议包,后面的数据传递都是普通的TCP包。
流量混淆伪装成HTTP:Websocket协议只用来协商必要的内容同步信息,真实的数据传递都是用普通的TCP包(看起来像是http协议在传递数据)

抓包查看到websocket协议的协商过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#----------------------------------REQUEST--------------------------------#
GET / HTTP/1.1
Host: bing.com
User-Agent: Go-http-client/1.1
Connection: Upgrade
Sec-WebSocket-Key: 9Hee2ejpy7tBnCcxXcGJNg==
Sec-WebSocket-Version: 13
Upgrade: websocket
#----------------------------------RESPONSE--------------------------------#
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: iQCxTMLlPjRMTJN36aAZ/IthOTE=
#----------------------------------REQUEST--------------------------------#
....Y...Y...X...Y...Y..q.$a.%..A."+Q....}...k...3...d
.....s.8....FE....u.b.....l..9..,...=..<(.I...%...z..~....]....g.......A...4.e.P..A...D.N..M6....0.2o...X.n.@'....@..S......N...d...3.@.#.,..K...L......+..r.I........N.\..3e.8...@..K+...{...
.......p...y.X.C-|.V..Th.4.Z@gM.
..vy7nr...9..$...!...R......e...7,...z<..oab.PEX^..`,...$.U...G#..8CY....=...R%.[..o......*yD.+..*.~|.ZqP..>V..'.J.\52v.qdo.r7a}_.\.5...=....y......EPX2..l-&./.`."[.4.
%....^.4.iy."=.G.a....I.8.......-.....DW>..8P.Q....%..B.........Nq......sDP..^.|#...
..za.E>.nT.....j.V.

部署架构

流量混淆流程图
在原有ss-local和ss-server之间,通过插件进行流量混淆,混淆的动作是在obfs-local和obfs-server之间代理的,对于使用方是无感知的。
通过抓包可以看到,obfs-local与obfs-server之间是先通过websocket形式

阅读全文 »

同步响应和异步响应

当前一个api请求到达controller中时,servlet容器便会启动一个线程处理这个请求,从数据库查询到到数据处理然后返回响应都是在当前这个线程进行处理,这个就是同步方式响应。
同步流程图如下:
sync

当请求量较大,后端业务处理较慢时,大量线程处于阻塞状态,由于请求处理线程数是有限的,其他请求就无法响应了,也就影响了服务器的吞吐能力。这时,提高吞吐量的方式可以修改同步请求为异步响应方式。
异步流程图如下:
async
以上流程图来源于博客

阅读全文 »