Eureka原理、安全认证、优雅停服

一、Eureka注册中心架构图原理

架构图

    Register(服务注册):把自己的IP和端口注册给Eureka

    Renew(服务续约):发送心跳包,每30秒发送一次,告诉Eureka自己还活着

    Cancel(服务下线):当provider关闭时会向Eureka发送消息,把自己从服务列表中删除。防止consumer调用到不存在的服务

    Get    Registry(获取服务注册列表):获取其他服务列表

    Replicate(集群中数据同步):eureka集群中的数据复制与同步

    Make    Remote    Call(远程调用):完成服务的远程调用

简图

二、CAP原则与两大主流服务框架ZK、Eureka的对比

    1.CAP原则:CAP原则又称CAP定理,指的是在一个分布式系统中,

        Consistency(一致性)、

        Availability(可用性)、

        Partition tolerance(分区容错性),三者不可兼得

    CAP由Eric  Brewer在2000年PODC会议上提出。该猜想在提出两年后被证明成立,成为我们熟知的CAP定理

CAP定理

    2.分别表示的含义

        C:数据一致性(Consistency),也叫做数据原子性,系统在执行某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读到最新的值,这样的系统被认为是具有强一致性的。等同于所有节点访问同一份最新的数据副本

        A:服务可用性(Availablity),每一个操作总是能够在一定的时间内返回结果,这里需要注意的是“一定时间内”和“返回结果”。一定时间内指的是,在可以容忍的范围内返回结果,结果可以是成功或者是失败

        P:分区容错性(Partition-torlerance),在网络分区的情况下,被分割的节点仍能对外提供服务(分布式集群,数据被分布存储在不同的服务器上,无论什么情况,服务器都能正常被访问)

    3.不同组合的含义

        CA,放弃P:如果想避免分区容错性问题的发生,一种做法是将所有的数据(与事务关的)都放在一台机器上。虽然无法100%保证系统不会出错,但不会碰到由分区带来的负面效果,当然这个选择会严重影响系统的扩展性

        CP,放弃A:相对于放弃“分区容错性”来说,其反面就是放弃可用性。一旦遇到分区容错故障,那么受影响的服务需要等待一定时间,因此在等待时间内系统无法对外提供服务

        AP,放弃C:这里所说的放弃一致性,并不是完全放弃数据一致性,而是放弃数据的强一致性,而保留数据的最终一致性。以网络购物为例,对只剩下一件库存的商品,如果同时接受了两个订单,那么较晚的订单将被告知商品告罄

        重要定律:任何分布式系统只可同时满足其中两点,无法三者兼顾


    4.Zookeeper与Eureka的区别

区别

三、Eureka的服务自我保护

    1.自我保护的条件:一般情况下,微服务在Eureka上注册后,每30秒会发送心跳包,Eureka通过心跳来判断服务是否健康,同时会定期删除超过90秒没有发送心跳的服务

    2.有两种情况会导致Eureka Server收不到微服务的心跳

        a.是微服务自身的原因

        b.是微服务于Eureka之间的网络故障

        通常(微服务的自身的故障关闭)只会导致个别服务出现故障,一般不会出现大面积故障,而(网络故障)通常会导致Eureka    Server在短时间内无法收到大批心跳

        考虑到这个区别,Eureka设置了一个阈(yu)值,当判断挂掉的服务的数量超过阈(yu)值时,Eureka        Server认为很大程度上出现了网络故障,将不再删除心跳过期的服务

    3.那么这个阈(yu)值是多少呢?

        15分钟之内是否低于85%;

        Eureka  Server在运行期间,会统计心跳失败的比例在15分钟内是否低于85%,这种算法叫Eureka    Server的自我保护模式

    4.为什么要启动自我保护?

        a.因为同时保留“好数据”与“坏数据”总比丢掉任何数据要更好,当网络故障恢复后,这个Eureka节点会退出“自我保护模式”。

        b.Eureka还有客户端缓存功能(也就是微服务的缓存功能)。即便Eureka集群中所有节点都宕机失效,微服务的Provider和Consumer都能正常通信

        c.微服务的负载均衡策略会自动剔除死亡的微服务节点

    5.关闭自我保护的方式

        修改application.properties/yml全局配置文件

配置文件

四、Eureka服务的优雅停服

    1.修改pom.xml配置文件,添加Eureka-Server的依赖

修改pom.xml配置文件

    2.修改application.properties/yml全局配置文件

        添加:

修改全局配置文件

    3.测试

        http://Eureka服务所在的IP+端口/shutdown,而且URL必须要使用dopost方式发送

        我们可以借助HttpClient工具类来实现

测试类

五、开启Eureka安全中心的安全认证

    旧版本配置方式

    1.在Eureka  Server中添加security依赖

添加依赖

    2.修改application.properties/yml全局配置文件

        开启htpp basic的安全认证

修改appication.properties,开启认证

    3.修改访问集群节点的url添加配置的用户名和密码(必然彼此之间会访问失败,集群注册失败)

修改配置的用户名和密码

    新版本(高版本)配置方式

    1.添加依赖,groupId有所差异

添加Secrity依赖

    2.修改eureka服务全局配置文件(有几个服务配置几个)

配置全局文件

    3.新建类添加@Configuration变成SpringBoot配置类,继承WebSecurityConfigurationAdapter类,重写configure方法,禁用csrf

禁用csrf

        注意,一旦开启安全认证,需要配置传递用户名和密码

        修改微服务的配置文件添加访问注册中心的用户名与密码(每个注册节点都要配置)

修改注册节点的配置文件

六、负载均衡Ribbon

    负载均衡在微服务中的作用

    1.Ribbon的概念

        a.Ribbon是一个基于Http和TCP的客户端负载均衡工具,他是语句Netflix Ribbon实现的

        b.它不像spring  cloud服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个spring cloud微服务中。包括feign提供的声明式服务调用也是基于该Ribbon实现的

        c.ribbon默认提供很多种负载均衡算法,例如轮询、随机等等,甚至包括自定义的负载均衡算法

                Ribbon解决并提供了微服务的负载均衡的问题

    2.负载均衡方案的分类

        目前业界主流的负载均衡方案可分成两类:

        第一类:集中式负载均衡,即在consumer和provider之间使用独立的负载均衡设施(可以是硬件,如F5,也可以是软件,如nginx),由该设置负责把访问请求通过某种策略转发至provider;

        第二类:进程内负载均衡,将负载均衡逻辑集成到consumer,consuerm从服务注册中心获知由哪些地址可用,然后自己再从这些地址中选择出一个合适的provider;

两种负载均衡方式结构图

        Ribbon就属于后者,它只是一个类库,集成于consumer进程,consumer通过它来获取到provider的地址。


    3.Ribbon的负载均衡策略

        A.策略名称:轮询策略(默认)

            对应的类名: RoundRobinRule

                实现原理:轮询策略表示每次都顺序取下一个 provider,比如一共有 5 个provider,第 1 次取第 1 个,第 2

次取第 2 个,第 3 次取第 3 个,以此类推


        B.策略名称:权重轮询策略

            对应的类名:WeightedResponseTimeRule

                实现原理:

            1.根据每个 provider 的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性越低。

            2.原理:一开始为轮询策略,并开启一个计时器,每 30 秒收集一次每个 provider 的平均响应时间,当信息

足够时,给每个 provider附上一个权重,并按权重随机选择provider,高权越重的 provider会被高概率选中。


        C.策略名称:随机策略

            对应的类名:RandomRule

                实现原理:从 provider 列表中随机选择一个 provider


        D.策略名称:最少并发数策略

            对应的类名:BestAvailableRule

                实现原理:选择正在请求中的并发数最小的 provider,除非这个provider 在熔断中


        E.策略名称:在“选定的负载均 衡策略”基础上进行重 试机制

            对应的类名:RetryRule

                实现原理:

            1.“选定的负载均衡策略”这个策略是轮询策略RoundRobinRule

            2.该重试策略先设定一个阈值时间段,如果在这个阈值时间段内当选择 provider 不成功,则一直尝试采用“选定

的负载均衡策略:轮询策略”最后选择一个可用的provider


        F策略名称:可用性敏感策略

            对应的类名:AvailabilityFilteringRule

                实现原理:过滤性能差的 provider,有 2种:

            第一种:过滤掉在 eureka 中处于一直连接失败 provider

            第二种:过滤掉高并发的 provider


        G.策略名称:区域敏感性策略

            对应的类名:ZoneAvoidanceRule

                实现原理:

            1.以一个区域为单位考察可用性,对于不可用的区域整个丢弃,从剩下区域中选可用的provider

            2.如果这个 ip 区域内有一个或多个实例不可达或响应变慢,都会降低该 ip 区域内其他 ip 被选中的权重。


七、Ribbon更换轮询策略

    1.创建Maven项目,添加依赖

项目结构

    2.修改启动类,在启动类中添加开启eureka客户端的注解,并编写方法创建要获取的轮询对象

修改启动类

    3.修改配置文件更换负载均衡策略

修改配置文件

八、Ribbon设置点对点连接(教学演示,不推荐使用该方式)

    1.创建项目,添加依赖,去掉Eureka相关的配置,单独添加ribbon的依赖

修改pom.xml依赖文件

    2.修改application.properties/yml全局配置文件,禁用eureka,并指定具体的服务实例清单

修改application.properties全局配置文件

    3.启动测试

测试结果

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

推荐阅读更多精彩内容