Skip to content
songzhian edited this page Sep 5, 2017 · 7 revisions

mframework

它是一款SOA的轻量级分布式服务框架,起类似于dubbo架构但不局限于语言限制,其核心部分包含

  • 远程通讯: restful或者其它api一般用来提供对外的服务,对内的SAPI更适合采用效率更高的TCP套接字协议。
  • 自动发现: 内部服务,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方负载均衡可以平滑增加或减少机器。
  • 语言依赖 : 语言依赖不强,多语言,支持包括C,Java,PHP,GO,Nodejs等广泛的多语言环境。

mframework能做什么?

  • 服务可以组合可以随意组合,透明的远程模块调用。
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址以及端口,并且能够平滑添加或删除服务提供者。
  • 可随意迁移,生产者可以跨语言迁移,更好的支持docker模块化系统,只需要连接zookeeper在注册中心注册配置就可以直接被服务使用

依赖库

libzookeeper, protobuf-c, libevent

运行原理

  1. 服务器通过zookeeper在注册中心维护服务器地址以及服务的基本配置来实现自动发现的功能
  2. 服务模块(provider)配置将节点注册 zookeeper的注册中心, 服务模块配置将节点注册后每台调用方(consumer)的agent服务就会发现服务的配置信息并且建立tcp连接
## 配置文件
{
  "host": "192.168.88.165",
  "port": 9502,
  "group": "com/dang/wireless",   
  "services": [
    {
      "service": "user",
      "version": "1.1.0-beta",
      "class"  : "Demo"
    }
  ]
}
  1. 调用方(consumer)根据 group、service、version使用agent服务在注册中心查找到具体的tcp连接然后对该连接发送消息
  2. 服务模块(provider)接收到消息处理完并返回消息

支持的注册中心

  • Zookeeper注册中心
ZooKeeper是一个开源的分布式服务框架,它是Apache Hadoop项目的一个子项目,主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置管理等,它支持Standalone模式和分布式模式,在分布式模式下,能够为分布式应用提供高性能和可靠地协调服务,而且使用ZooKeeper可以大大简化分布式协调服务的实现,为开发分布式应用极大地降低了成本。

ZooKeeper总体架构

ZooKeeper集群由一组Server节点组成,这一组Server节点中存在一个角色为Leader的节点,其他节点都为Follower。当客户端Client连接到ZooKeeper集群,并且执行写请求时,这些请求会被发送到Leader节点上,然后Leader节点上数据变更会同步到集群中其他的Follower节点。

Zookeeper节点维护

  1. 服务器端在启动后,将自己所能提供的服务以及版本信息保存到znode节点上
  2. 一个服务器端对应一个znode节点,节点的内容信息就是其可以提供的服务的列表
  3. 确保如果服务器不可用的时候,znode节点也要被删除
  4. 确保如果服务器恢复的时候,znode节点也要被恢复
  5. 后台节点维护, 可以手动修改节点

LOG日志系统

  1. 统一每个服务程序的输出日志格式,建立一个统一的分布式的日志收集机制,完成负载统计和业务监控
  2. 为每一个请求在入口处(调用的起点,比如Web客户端)分配一个唯一序列号,这个序列号要在服务调用层中被传递,需要记录如下信息:时间、请求序列号、服务名、服务版本号、消耗时间、用户帐号、用户名
  3. 在Web管理台可以追踪关于一条请求的所有调用环节的时间消耗、处理状态等信息,便于问题的诊断

实现中的功能

  1. agent的心跳检测,自动恢复功能
  2. 手动的负载均衡修改,以及支持更多的负载均衡方式

参考文献