微服务相关

Posted by hqpsoft on May 9, 2016

业界开源项目

ETCD调研:

经典应用场景

A highly-available key value store for shared configuration and service discovery.

  • 服务发现
  • 消息发布与订阅
  • 负载均衡
  • 分布式通知与协调
  • 分布式锁
  • 分布式队列
  • 集群监控与Leader竞选

etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点:

  • 简单:基于HTTP+JSON的API让你用curl就可以轻松使用。
  • 安全:可选SSL客户认证机制。
  • 快速:每个实例每秒支持一千次写操作。
  • 可信:使用Raft算法充分实现了分布式。

相对于ZooKeeper的有点:

  • 简单。使用Go语言编写部署简单;使用HTTP作为接口使用简单;使用Raft算法保证强一致性让用户易于理解。
  • 数据持久化。etcd默认数据一更新就进行持久化。
  • 安全。etcd支持SSL客户端安全认证。

Consul的调研:

使用场景

  • docker 实例的注册与配置共享
  • coreos 实例的注册与配置共享
  • vitess 集群
  • SaaS 应用的配置共享
  • 与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件

优势

  • 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.
  • 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持.
  • 支持健康检查. etcd 不提供此功能.
  • 支持 http 和 dns 协议接口. zookeeper 的集成较为复杂, etcd 只支持 http 协议.
  • 官方提供web管理界面, etcd 无此功能.

实施

遇到的问题

  • 服务器存在虚拟机双网卡问题: 解决"bind_addr": "172.16.1.219",

微服务

  • 性能和可扩展性
  • 采用反应性编程模型
  • 服务调用
  • 服务发现
  • 处理部分失败

相关文章

存在的问题

  • 随着系统服务的越来越多,如何来管理这些服务?
  • 如何分发请求到提供同一服务的多台主机上(负载均衡如何来做)
  • 如果提供服务的Endpoint发生变化,如何将这些信息通知服务的调用方?

服务注册与发现的目标

  • 服务的注册信息统一保存,方便于服务的管理
  • 自动通过服务的名称去发现服务,而不必了解这个服务提供的end-point到底是哪台主机
  • 支持服务的负载均衡及fail-over
  • 增加或移除某个服务的end-point时,对于服务的消费者来说是透明的

实际运用存在的问题

  • 服务端发现模式or客户端发现模式
  • 数据持久化
  • K/V存储的设计(consuldotnet封装的api已绝大数满足我们的需求.)
  • consul本身内置了服务发现系统,要思考如何去包装它
  • Consul template能解决啥问题
  • UI重做(交互设计)

基于Consul的服务注册与发现,配置中心

consul的基本配置:

  1. 官网下载windows版本的exe文件和consul web ui,放到C盘consul文件夹里面
  2. 在consul文件夹下建立base_config.json文件,并配置如下内容:
    {
      "datacenter": "DC01",
      "data_dir": "c:/consul/data",
      "ui_dir": "c:/consul/consul_0.6.4_web_ui",
      "log_level": "INFO",
      "node_name": "hqpsoft",
      "server": true,
      "bootstrap": true,
      "addresses": {
     "https": "0.0.0.0"
      },
      "ports": {
     "dns" : -1,
     "https" : -1,
     "http" :8500,
     "rpc" : 11400,
     "serf_lan" : 11301,
     "serf_wan" : 11302,
     "server" : 11300
      }
    }
    
  3. 设置对应的consul环境变量
  4. consul agent -config-file .\base_config.json启动consul服务

Consul的基本使用

  • 根据consul agent提供的api, 实现了简单的UI功能操作(官方提供的UI满足基本使用)

Consul Template的基本使用

  1. 配置go环境,下载Consul Template源码至hashicorp/consul-template, 执行go install得到exe文件
  2. 在C盘建立ConsulTemplate文件夹,把生成的exe文件放入.
  3. 在文件夹下建立consultemplateCmd.conf文件,配置如下内容:
    consul="127.0.0.1:8500"
    log_level="info"
    template {
      source = "C:/ConsulTemplate/template/testKV.ctmpl"
      destination = "C:/ConsulTemplate/template/output/testKV.conf "
      //command = "restart service foo"
      //command_timeout = "60s"
      //perms = 0600
      //backup = true
    }
    
  4. 根据consultemplateCmd.conf的配置对于路径的ctmpl和conf文件,注意ctmpl文件根据需求写consul template模板语法
  5. 执行consul-template -config consultemplateCmd.conf启动服务

动态服务注册

相关组件

如何应用

  • 在Global.asax文件里面自动注册
  • 在每天服务器上添加配置文件

Creative Commons License
This work is licensed under a CC A-S 4.0 International License.