软负载中心与集中配置管理

  • 软负载中心两个最基础的职责
  • 聚合地址信息
  • 生命周期感知->需要能对服务的上下线自动感知,并且根据这个变化去更新服务地址数据
  • 软负载中心两个最基础的职责
    • 聚合地址信息
    • 生命周期感知->需要能对服务的上下线自动感知,并且根据这个变化去更新服务地址数据
  • 软负载中心的结构
    • 软负载中心的服务端->负责感知提供服务的机器是否在线,聚合提供者的机器信息并负责把数据传给使用数据的应用
    • 软负载中心的客户端
      • 服务提供者->把服务器提供者提供服务的具体信息主动传给服务端->并且随着提供服务的变化去更新数据
      • 服务器使用者->向服务端告知自己所需要的数据并负责去更新数据,还要进行本地的数据缓存
    • 软负载中心三部分重要的数据->聚合数据、订阅关系、连接数据
  • 内容聚合功能的设计
    • 保证数据正确性
    • 高效聚合数据
      • 并发下的数据正确性的保证
      • 数据更新、删除的[顺序]保证
      • 大量数据同时插入、更新时的性能保证
        • 根据key进行分线程的处理->保证同样key的数据是在同一个线程中处理->顺序任务队列
  • 解决服务上下线的感知
    • 通过客户端与服务端的连接感知
      • 长连接的心跳或数据的发布来判断服务发布者是否还在线->如果很久没有心跳或数据的发布,则判定为不在线;那么就取出这个发布者发布的数据->而对于新上线的发布者,通过连接建立和数据发布就实现了上线的通知
      • 当负载中心的自身的负载很高时,可能产生误判,如软负载中心压力很大,处理请求变慢,心跳数据来不及处理->会以为心跳超时而判断服务不在线,认为服务不可用并且把信息通知给服务调用者,这会导致原本可用的服务被下线了
      • 另外的问题,如果服务发布者到软负载中心的网络链路有问题而服务发布者到服务使用者的链路没问题,也会造成感知的问题->因为软负载中心属于旁路
        • 解决:软负载中心客户端增加逻辑,当收到软负载中心通知的应用下线数据时,需要服务调用者进行验证才能接收这个通知
    • 通过对于发布数据中提供的地址端口进行连接的检查
      • 需要服务调用者进行最终确认,因为在系统中进行的实际业务调用通信是在服务调用者和服务提供者之间
  • 软负载中心的数据分发的特点和设计
    • 数据分发与消息订阅的区别
      • 消息中间件需要保证消息不丢失->每条消息都应该送到相关订阅者->而软负载中心只需要保证最新数据送到相关的订阅者->不需要保证每次的数据变化都能让最终订阅者感知
      • 消息中间件中同一个集群中的不同机器是分享所有消息的,因为该消息只要同一集群中的一台机器去处理了就行->而软负载中心则不同,因为其维护的是大家都需要用的服务数据->所以需要把这数据分发给所有的机器
    • 提升数据分发性能需要注意的问题
      • 数据压缩->CPU换带宽
      • 全量与增量的选择->建议刚开始的实现中采用简单的方式,即传送全量数据,当全量数据很大时就需要考虑采用增量传送的方式实现.
    • 针对服务化的特性支持
      • 软负载数据分组
        • 根据环境进行划分
        • 分优先级的隔离
      • 提供自动感知以外的上下线开关
        • 优雅的停止应用
          • 我们应该先从服务列表中去掉这个机器->等待当时正在执行的服务器结束,然后再停止应用->通过指令直接从软负载中心使机器下线
        • 保持应用场景,用于排错
          • 遇到服务的问题时,可以把出问题的服务留下一台进行故障定位和场景分析->此时需要把这台机器从服务列表中拿下来,以免有新的请求进来造成服务的失败,这也是需要软负载中心直接使服务下线的一个场景.
      • 维护管理路由规则
        • 对不同特性的数据进行拆分
  • 从单机到集群
    • 数据管理问题/连接管理问题
    • 数据统一管理
      • 数据聚合放在一个地方->软负载中心集群,无状态->对于数据发布者和订阅者来说,选择软负载中心集群中的任何一个机器连接皆可
      • 把软负载中心集群中的机器的职责分开,即把聚合数据的任务和推送数据的任务分到专门的机器上处理->将软负载中心集群中有一台机器为软负载中心数据聚合,另一台机器为软负载中心数据推送->发布者和订阅者的连接是分开管理的->为了提升性能,在软负载中心负责数据推送的机器上是可以对聚合数据做缓存
* 数据对等管理方案
    + 将数据分散在各个软负载中心的节点上并且把自己节点管理的数据分发到其他节点上,从而保证每个节点都有整个集群的全部数据并且这些节点的角色是对等的->使用软负载中心的数据发布者和数据订阅者只需要去连接软负载中心集群中的任何一台机器就可以->软负载中心集群内部,各个节点之间会进行数据的同步
        - 批量处理同步->合并变化,同步一次
        - 如果节点较多,同步量会较大->对集群内的节点进行指责划分
        - 如果集群管理的总体数据很多,超过了单机限制->则需要对数据进行分组处理->让每个节点管理一部分数据->即用UI规则对数据进行类似分库分表的操作->则数据订阅者可能就需要连接多个数据分发节点了
  • 集中配置管理中心
    • 集中配置管理中心结构
      • 准备的持久存储来保存持久数据(Master-Slave)->一般采用关系型数据库->通过两个节点的主备来解决持久数据安全的问题.
      • 集中配置管理中心集群这层由多个集中配置管理中心节点组成->对等->都可以提供数据给应用端等->互不依赖
      • 集中配置管理中心的单个节点->部署了一个nginx和一个web应用->其中web应用主要负责完成相关的程序逻辑如数据库的相关操作以及根据ip等的分组操作,即整个应用的逻辑放在了web应用中;单机的本地文件Local File则是为了容灾和提升性能,客户端进行数据获取的时候,最后都是从nginx直接获取本地文件并把数据返回给请求端
* 集中配置管理中心的使用分为了以下两部分
    + 提供给应用使用的客户端->主要是业务应用通过客户端去获取配置信息和数据,用于数据的读取
    + 为控制台或者控制脚本提供管理SDK
        - 包括了对数据的读写,通过管理SDK可以进行配置数据的更改

* 客户端实现和容灾策略
    + 客户端通过http协议与集中配置管理中心进行通信
        - 通过轮询获取最新数据\_普通轮询
        - 改进使用长轮询,Long Polling->如果没有数据,长轮询会等待;如果等待数据,立刻返回;如果一直没有数据则等到超时后返回,继续建立连接,而普通轮询就直接返回了->是HTTP普通轮询和Socket长连接方式的折中-
    + 容灾
        - 数据缓存
        - 数据快照
        - 本地配置
        - 文件格式->如果是二进制数据格式,那么就没有对应的工具是无法对配置进行修改->如果客户端容灾退化到一个单机应用就会需要直接修改配置内容和数据->那么文本格式的限制就非常重要和关键了

* 服务端实现和容灾策略
    + Nginx+Web应用->和逻辑相关的部分在Web应用上实现,Nginx用于请求的处理和最后结果的返回,而供返回的数据的都在本地文件系统中
    + 和数据库的数据同步

* 数据库策略
    + 数据库在设计时需要支持配置的版本管理,即随着配置内容的更改,老的版本是需要保留的,为了方便进行配置变更的对比和回滚->而数据库本身需要主备进行数据的容灾考虑
    +

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=28isx7x2ovr4o

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

php使用tcp长连接的一种优化思路

一、面向人群 如果站点架构满足以下几点,那么本文的优化方案会非常适合: 1)使用php等脚本语言作为开发语言 2)需要连接后端服务,例如RPC服务、memcac...

41360
来自专栏我是攻城师

从App的角度看进程和线程

在现在人人都有一部手机或电脑的年代,我们几乎天天都在使用各种app,如微信,QQ,抖音,优酷等等软件,表面上我们是与各种app交互,但如果站在操作系统的角度来看...

7120
来自专栏杨建荣的学习笔记

Python的兼容性很无助

直觉的思路就是使用pip来检查,但是发现pip不可用了。最开始以为是pip导致的。修复方法如下:

13900
来自专栏Laoqi's Linux运维专列

初识Jenkins(Ⅰ)

12830
来自专栏hbbliyong

用Visual Studio Code写Node.j

介绍 vsc的宣传语是: 一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。 按它说的...

397130
来自专栏老安的博客

docker 容积硬盘扩容小坑一个

14330
来自专栏java相关

java中缓存分类总结

在平时的开发中会经常用到缓存,比如locache、redis等,但一直没有对缓存有过比较全面的总结。下面从什么是缓存、为什么使用缓存、缓存的分类以及对每种缓存的...

68320
来自专栏技术博文

linux 设置中文版man手册

作为CentOS 新手,看懂英文man固然重要,不过配置好中文man也可以让自己更快速地学习! 1. 下载中文man包 源码的网址:https://src.fe...

37450
来自专栏IMWeb前端团队

分享几个便利的工具软件

clover 官方网址:http://cn.ejie.me/ 方便的 Tab 页功能 要掌握功能强大,操作简单的标签页,只需记住Ctrl+T新开页面,Ctrl+...

20460
来自专栏PHP在线

web缓存的作用和类型

前言&摘要 这段时间的工作内容主要是为一个客户端类型的产品增加文档在线存储和文档在线预览相关特性。由于测试的同事比较细心和专业,发现了项目实现中一些效 率低下的...

36450

扫码关注云+社区

领取腾讯云代金券