分布式系统开发

时间:2021-03-08 16:37:58

 

基础

网络架构
  全异步系统(没有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的相关套路).
进而把同步程序透明改造成异步.