业界开源项目
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的基本配置:
- 从官网下载windows版本的exe文件和consul web ui,放到C盘consul文件夹里面
- 在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 } }
- 设置对应的consul环境变量
consul agent -config-file .\base_config.json
启动consul服务
Consul的基本使用
- 根据consul agent提供的api, 实现了简单的UI功能操作(官方提供的UI满足基本使用)
Consul Template的基本使用
- 配置go环境,下载Consul Template源码至hashicorp/consul-template, 执行go install得到exe文件
- 在C盘建立ConsulTemplate文件夹,把生成的exe文件放入.
- 在文件夹下建立
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 }
- 根据
consultemplateCmd.conf
的配置对于路径的ctmpl和conf文件,注意ctmpl文件根据需求写consul template模板语法 - 执行
consul-template -config consultemplateCmd.conf
启动服务
动态服务注册
相关组件
如何应用
- 在Global.asax文件里面自动注册
- 在每天服务器上添加配置文件

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