基础
网络架构
全异步系统(没有blocking, 可达到各组件最好的综合利用率)
CAP & BASE
弱事务
网络框架
基本原理:
reactor,proactor, half-sync/half-async, active object, monitor object
C
libevent
成功案例: memcached, thrift
C++
ACE
Boost ASIO(封装变化,生命周期钩子暴露很到位,但是流程被拆离了)
JAVA
Grizzly(SUN Glassfish)
MINA(Twitter MQ)
RPC
RPC框架
thrift
RPC类型: 静态idl数据结构+service描述
调用方式: 支持同步方式调用, sendonly方式.
编解码协议: thrift
支持通信协议: tcp
跨语言: 支持. c++, java, php, ruby, python, erlang, coca, php(client only)
支持协议多版本
不支持容器托管
RPC容器
POSA中视RPC容器为RPC框架的升级版本
ICE
RPC类型: 静态idl数据结构+service描述
支持同步方式, sendonly, 异步future, AMI, AMC等方式.
支持通信协议: udp, tcp, ssl
跨语言: 支持. c++, java, php, ruby, python, erlang, coa, php(client only)
支持协议多版本
支持容器托管
动态RPC框架
Hessian
对于java语言是动态的.无需idl
Avro
json型的自描述格式.无需idl. 单次传输schema.可兼容多版本.
request/ response类型的rpc 是同步语义,不适合分布式多组件通信.
ACT或者Future型rpc在开发上面比较烦琐.
惟有基于message驱动的消息中间件适合分布式异步环境, 尤其是适合信令,小数据通信.
大数据传递就适合临时启用socket pipeline方式进行流式传递.
颠覆: 化异步为同步
协程 coroutine
协程的概念其实90年代就有人提出了.
erlang的进程模型就是一个很好的协程实现.
协程的概念同样也可以运用到其它语言当中.比如c++中.
c++中使用协程可以基于glibc自带的ucontext或者第三方ptr库来做.
如下是c++协程方面的库:可以
libcoro
libcoroutine
通过coroutine, 我们可以用同步编程语义来构建异步网络程序.
预编译方式
这个方法比较适合用在java中,因为java下面比较方便一些.比如可以使用jdt插件对java代码作一次预编译替换(可以参考GWT的相关套路).
进而把同步程序透明改造成异步.