分布式系统服务治理

分布式系统架构特别是进入微服务架构后,服务治理的重要性愈发变得不可缺少而且处于重要地位。缺乏服务治理的的分布式系统架构,很难正式投入生产。那么服务治理包括哪些方面呢?主要包括服务发现,负载均衡,限流,熔断,超时,重试,服务跟踪等。下面展开讲。

侵入式服务治理

1.服务发现

服务发现是指使用一个注册中心来记录分布式系统中全部服务的信息,以便让其他服务能够快速找到这些已注册的服务。服务发现需要服务注册,服务查找,服务健康检查及服务变更通知等关键功能。

最早的服务发现应用就是DNS,通过使用域名,让访问者不必关心服务在哪里。其实DNS的服务发现应用,在原来公司做大型嵌入式软件时,虽然是单体系统,但是是一个分时的多进程系统,由于系统非常庞大,不同的进程间通信采用的是IPC进程间通信。为了便于不同的进程间通信,我们当时设计在IPC??槟诓刻峁┝艘桓鲂⌒偷姆穹⑾止δ?,所有需要通过IPC通信的系统,在??槠舳倍夹枰饔肐PC提供的服务注册功能,这样当??榧渫ㄐ攀保筒挥霉刈⒄飧鯥PC通信是设备的板间通信还是板内通信。这里简单解下,因为设备形态存在控制板(主要负责协议计算和路由)和接口板(主要负责数据报文转发,可能多个接口板),因此当我们在考虑IPC时提供了类似的设计。

可以看到关于服务发现,关键是要有一个服务注册中心。具体的服务发现机制

1.服务提供者启动时需要注册。

2.注册中心与服务提供者无法保持心跳时需要剔除服务

3.服务消费者可以从注册中心获取服务提供者的最新信息,可以采取定期拉和事件通知的两种方式

可以看到服务注册中心在分布式服务架构中的关键位置,因此需要具备高可用?;贑AP定理的,服务注册中心的最佳选择是一个AP的系统。但实际中我们常用的注册中心有zooKeeper,Eureka,etcd,consul,还有阿里的Nacos。

  1. zooKeeper我们知道它本质其实是一个CP模型,基于其自己的Zab协议(基于Paxos裁剪)来保证注册中心多个节点之间的数据一致性。

Zab协议规定,消息传递要遵循可靠传递,完全有序,因果有序的特性.

ZooKeeper Service

在zooKeeper中,主节点故障下,Zab协议通过主节点快速选举,初始化,同步从节点、广播几个阶段来保证数据一致性和主节点选举的高效。

zooKeeper 的核心概念

集群角色: 主节点,从节点,观察者节点。主节点负责数据写入服务,从节点提供读数据。观察者同样提供读但是不参与选举投票。在集群中,服务器数量是奇数被认为是一个最佳实践。集群对外工作的必要条件是超过半数的服务器可以对外正常工作。

ZooKeeper's Hierarchical Namespace

另外有个集群宕机容忍度的衡量,2台服务器的容忍度为0,3台,4台容忍度都是1

会话:在zooKeeper,客户端和服务端之间是有TCP长连接的?;诔ち臃⑺托奶?。会话超时时间徐阿哟根据生产环境的网络状况合理设定。

数据节点:数据节点称zNode,通过/分割父节点和子节点。zNode分为持久节点和临时节点 服务注册就是注册在临时节点上。

PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL

监听: 即watcher,客户端可以在感兴趣的zNode上进行监听,当zNode状态变化时,服务端会通知客户端。


ZooKeeper's Hierarchical Namespace

zooKpeer 原生提供了命令行客户端及Java,c的客户端。原生客户端开发效率低,且存在一些不足(不支持递归,需要重复注册监听器,需要自行解决会话超时,对常用的分布式锁,选举,分布式计数等都需要二次开发)。

zkClient和Curator是两个常见的三方库。

zkClient提供递归删除创建节点,会话超时处理,监听器反复等,简化了原生API的使用。

Curator是Netflix开源的,已经被Apache基金会收录。除了支持zkClient的功能,还支持选举,分布式锁等场景

zooKeeper是最广为广泛的分布式协调组件,由于存在当主节点因为网络与其他节点失去联系导致整个系统重新选举时,集群是不可用的(这也是它作为CP模型,不能应用于大规模分布式系统注册中心的考虑。),因此已经不是服务发现的最好选择了,其主要优势在选举和分布式锁。Curator提供的缓存能力,能够让zooKeeper可用性增强,同时由于缓存使得其从CP发生向AP的转化

  1. Eureka

Eureka采用了去中心化的设计,整个集群由对等节点组成,不存在zk(zooKpeer以下简称zk)的选举问题。服务端之间相互注册彼此同步信息来实现高可用性。客户端可以连接任一服务端进行注册。但这样会存在数据的一致性问题,也就是客户端查询的信息不一定是最新的。

eureka_architecture.png

Eureka也是Netflix的开源项目,可以和SpringCloud很好的整合。Eureka是一个 war包,需要部署到一个web服务器中。另外Eureka提提供一个?;せ疲褪堑背?5%的节点在15分钟内没有心跳时,就会启动,此时
1.不再从注册列表删除长时间没有心跳的服务
2.不会接受新的户注册及同步数据
3.网络恢复稳定后再接受新注册及同步信息
Eureka提供了java,Python, Node.js, .net的客户端,对于没有客户端的语言可以通过Restful API交互。

  1. Etcd
    Etcd和zk具有类似的架构,采用 Raft算法代替了 zab,从CAP来分析,也是一个CP系统,通过TTL来实现类似zk临时节点的功能

  2. Consul
    Consul是一个商业产品(Raft),有一个开源版本。除了服务发现,还通过内存,磁盘使用的细粒度状态检测及服务配置的键值存储功能。

  3. Nacos
    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
    Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

    nacos_map

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODOHTTP&API查找和发现服务.它同时支持AP和CP模式,可以通过配置切换。

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351