首页 文章 精选 留言 我的

精选列表

搜索[双足行走],共9166篇文章
优秀的个人博客,低调大师

【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?

目录: 一、问题起源 二、EurekaServer设计精妙的注册表存储结构 三、EurekaServer端优秀的多级缓存机制 四、总结 一、问题起源 Spring Cloud架构体系中,Eureka是一个至关重要的组件,它扮演着微服务注册中心的角色,所有的服务注册与服务发现,都是依赖Eureka的。 不少初学Spring Cloud的朋友在落地公司生产环境部署时,经常会问: Eureka Server到底要部署几台机器? 我们的系统那么多服务,到底会对Eureka Server产生多大的访问压力? Eureka Server能不能抗住一个大型系统的访问压力? 如果你也有这些疑问,别着急!咱们这就一起去看看,Eureka作为微服务注册中心的核心原理 下面这些问题,大家先看看,有个大概印象。带着这些问题,来看后面的内容,效果更佳 Eureka注册中心使用什么样的方式来储存各个服务注册时发送过来的机器地址和端口号? 各个服务找Eureka Server拉取注册表的时候,是什么样的频率? 各个服务是如何拉取注册表的? 一个几百服务,部署上千台机器的大型分布式系统,会对Eureka Server造成多大的访问压力? Eureka Server从技术层面是如何抗住日千万级访问量的? 先给大家说一个基本的知识点,各个服务内的Eureka Client组件,默认情况下,每隔30秒会发送一个请求到Eureka Server,来拉取最近有变化的服务信息 举个例子: 库存服务原本部署在1台机器上,现在扩容了,部署到了3台机器,并且均注册到了Eureka Server上。 然后订单服务的Eureka Client会每隔30秒去找Eureka Server拉取最近注册表的变化,看看其他服务的地址有没有变化。 除此之外,Eureka还有一个心跳机制,各个Eureka Client每隔30秒会发送一次心跳到Eureka Server,通知人家说,哥们,我这个服务实例还活着! 如果某个Eureka Client很长时间没有发送心跳给Eureka Server,那么就说明这个服务实例已经挂了。 光看上面的文字,大家可能没什么印象。老规矩!咱们还是来一张图,一起来直观的感受一下这个过程。 二、Eureka Server设计精妙的注册表存储结构 现在咱们假设手头有一套大型的分布式系统,一共100个服务,每个服务部署在20台机器上,机器是4核8G的标准配置。 也就是说,相当于你一共部署了100 * 20 = 2000个服务实例,有2000台机器。 每台机器上的服务实例内部都有一个Eureka Client组件,它会每隔30秒请求一次Eureka Server,拉取变化的注册表。 此外,每个服务实例上的Eureka Client都会每隔30秒发送一次心跳请求给Eureka Server。 那么大家算算,Eureka Server作为一个微服务注册中心,每秒钟要被请求多少次?一天要被请求多少次? 按标准的算法,每个服务实例每分钟请求2次拉取注册表,每分钟请求2次发送心跳 这样一个服务实例每分钟会请求4次,2000个服务实例每分钟请求8000次 换算到每秒,则是8000 / 60 = 133次左右,我们就大概估算为Eureka Server每秒会被请求150次 那一天的话,就是8000 * 60 * 24 = 1152万,也就是每天千万级访问量 好!经过这么一个测算,大家是否发现这里的奥秘了? 首先,对于微服务注册中心这种组件,在一开始设计它的拉取频率以及心跳发送频率时,就已经考虑到了一个大型系统的各个服务请求时的压力,每秒会承载多大的请求量。 所以各服务实例每隔30秒发起请求拉取变化的注册表,以及每隔30秒发送心跳给Eureka Server,其实这个时间安排是有其用意的。 按照我们的测算,一个上百个服务,几千台机器的系统,按照这样的频率请求Eureka Server,日请求量在千万级,每秒的访问量在150次左右。 即使算上其他一些额外操作,我们姑且就算每秒钟请求Eureka Server在200次~300次吧。 所以通过设置一个适当的拉取注册表以及发送心跳的频率,可以保证大规模系统里对Eureka Server的请求压力不会太大。 关键问题来了,Eureka Server是如何保证轻松抗住这每秒数百次请求,每天千万级请求的呢? 要搞清楚这个,首先得清楚EurekaServer到底是用什么来存储注册表的?三个字,看源码 接下来咱们就一起进入Eureka源码里一探究竟: 如上图所示,图中的这个名字叫做registry的CocurrentHashMap,就是注册表的核心结构。看完之后忍不住先赞叹一下,精妙的设计! 从代码中可以看到,EurekaServer的注册表直接基于纯内存,即在内存里维护了一个数据结构。 各个服务的注册、服务下线、服务故障,全部会在内存里维护和更新这个注册表。 各个服务每隔30秒拉取注册表的时候,EurekaServer就是直接提供内存里存储的有变化的注册表数据给他们就可以了。 同样,每隔30秒发起心跳时,也是在这个纯内存的Map数据结构里更新心跳时间。 一句话概括:维护注册表、拉取注册表、更新心跳时间,全部发生在内存里!这是Eureka Server非常核心的一个点。 搞清楚了这个,咱们再来分析一下registry这个东西的数据结构,大家千万别被它复杂的外表唬住了,沉下心来,一层层的分析! 首先,这个ConcurrentHashMap的key就是服务名称,比如“inventory-service”,就是一个服务名称。 value则代表了一个服务的多个服务实例。 举例:比如“inventory-service”是可以有3个服务实例的,每个服务实例部署在一台机器上。 再来看看作为value的这个Map: Map<String, Lease<InstanceInfo>> 这个Map的key就是服务实例的id value是一个叫做Lease的类,它的泛型是一个叫做InstanceInfo的东东,你可能会问,这俩又是什么鬼? 首先说下InstanceInfo,其实啊,我们见名知义,这个InstanceInfo就代表了服务实例的具体信息,比如机器的ip地址、hostname以及端口号。 而这个Lease,里面则会维护每个服务最近一次发送心跳的时间 三、Eureka Server端优秀的多级缓存机制 假设Eureka Server部署在4核8G的普通机器上,那么基于内存来承载各个服务的请求,每秒钟最多可以处理多少请求呢? 根据之前的测试,单台4核8G的机器,处理纯内存操作,哪怕加上一些网络的开销,每秒处理几百请求也是轻松加愉快的。 而且Eureka Server为了避免同时读写内存数据结构造成的并发冲突问题,还采用了多级缓存机制来进一步提升服务请求的响应速度。 在拉取注册表的时候: 首先从ReadOnlyCacheMap里查缓存的注册表。 若没有,就找ReadWriteCacheMap里缓存的注册表。 如果还没有,就从内存中获取实际的注册表数据。 在注册表发生变更的时候: 会在内存中更新变更的注册表数据,同时过期掉ReadWriteCacheMap。 此过程不会影响ReadOnlyCacheMap提供人家查询注册表。 一段时间内(默认30秒),各服务拉取注册表会直接读ReadOnlyCacheMap 30秒过后,Eureka Server的后台线程发现ReadWriteCacheMap已经清空了,也会清空ReadOnlyCacheMap中的缓存 下次有服务拉取注册表,又会从内存中获取最新的数据了,同时填充各个缓存。 多级缓存机制的优点是什么? 尽可能保证了内存注册表数据不会出现频繁的读写冲突问题。 并且进一步保证对Eureka Server的大量请求,都是快速从纯内存走,性能极高。 为方便大家更好的理解,同样来一张图,大家跟着图再来回顾一下这整个过程: 四、总结 通过上面的分析可以看到,Eureka通过设置适当的请求频率(拉取注册表30秒间隔,发送心跳30秒间隔),可以保证一个大规模的系统每秒请求Eureka Server的次数在几百次。 同时通过纯内存的注册表,保证了所有的请求都可以在内存处理,确保了极高的性能 另外,多级缓存机制,确保了不会针对内存数据结构发生频繁的读写并发冲突操作,进一步提升性能。 上述就是Spring Cloud架构中,Eureka作为微服务注册中心可以承载大规模系统每天千万级访问量的原理。 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

优秀的个人博客,低调大师

Hystrix又双叒叕停止更新了!

今天无意间翻了一下Hystrix代码仓库,无意间看到最近的一条变更,竟然发现Hystrix也不再进行活跃的更新了,停止开发新功能了!后期只是进行维护了!!! 这是继Eureka之后又一个停止更新的Spring Cloud配套技术! 可悲的是Spring Cloud技术栈的这么多组件还没学完,一个接一个的都不再继续活跃的更新了!突然感觉没得学了(ps:手动滑稽)! 求求你们别停止更新了!我还能学!我还要学! 一、首先Hystix是什么? Hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与Hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo,如下所示: 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等。如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。 Hystrix提供了熔断、隔离、Fallback、Cache、监控等功能,能够在一个或多个依赖同时出现问题时保证系统依然可用。 当现在服务的提供方出现了问题之后整个的程序将出现错误的信息显示,而这个时候如果不想出现这样的错误信息,而希望替换为一个错误时的内容。 一个服务挂了后续的服务跟着不能用了,这就是雪崩效应! 二、Hystrix停止更新啦! Hystrix后期不再进行新功能的更新的通知是在9天前的时候,如下是变更的README.md内容: Hystrix相应的官方介绍相应的变成了如下内容: 重点就是上边这句话 官方说明最后的一个Release版本v1.5.18已经足够的稳定,足以胜任我们现在已经存在系统的需求,话虽这么说,但用着总有点很不舒服,就像前段时间停止开发的Eureka一样,很多国内的中小公司,没有技术能力更新维护的,基本也都在找替代的技术方案,相继的转向Consul、ZooKeeper、Etcd 等开源中间件上去了。 Hystrix的1.0.0版本,于2012年11月22发布 Hystrix的最后一个版本,2018年11月 六年的时间说散就散,还来不及学一下原理,就不更新了!一声惋惜,几声叹息! 三、Hystrix官方推荐的替代产品 尽管如此,Hystrix并没有完全的放弃我们这些伸手党,Hystrix官方同时也推荐我们使用新一代熔断器神器Resilience4j。 GitHub地址: https://github.com/resilience4j/resilience4j 作为新一代的熔断器,Resilience4j有很多优势,比如轻量级、依赖少、模块化程度较好、函数式编程等优势。 Resilience4j官方简介 说起模块化程度更好这一点,确实不得不佩服Resilience4j,看下代码结构对比就可以看出来了,看起来舒服多了,对比如下: 代码结构对比,左侧为Hystrix 关于Resilience4j的使用指南,准备后期写一篇文章探讨一下,敬请期待! 四、Spring Cloud该何去何从? Spring Cloud生态正经历着一些变化,前有Eureka闭源,后有Hystrix停止开发新功能。 同时,Spring Cloud也从依赖生态伙伴提供关键组件,演变到自己开发适配关键组件,例如提供了: Spring Cloud Zuul; Spring Cloud Config; Spring Cloud Loadbalance; 等开源产品。 相信这才是Spring Cloud生态的最好姿态,逐渐的整合,才能为更多的开发者提供舒心的服务! 才能少造轮子,才能早下班!才能早下班!才能早下班! 五、Dubbo真香 相比国内的Dubbo来说,更新的正是热火朝天,也被Apache收了!配套的技术也在不断地被开源出来供大家学习和使用! Dubbo是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,使得应用可通过高性能RPC实现服务的输出、输入功能和Spring框架无缝集成。 Dubbo特性一览 下图是自己珍藏多年的一张RPC完整的调用链,一般人我真的不告诉他!这可是知识星球的专用图哦!靠着他我还要升职加薪的! 一个完整的RPC调用链 Dubbo和阿里巴巴集团内部使用的RPC框架HSF有异曲同工之妙,都可以支撑起我们高并发的业务需求!下图是一张清晰易懂的架构图: Dubbo整体调用架构 Dubbo的配套技术,也在不断的更新演进,诸如:类似Hystrix功能阿里开源的Sentinel,为支持Dubbo生态发展阿里新的开源项目Nacos等。 也相信随着阿里和Dubbo开源社区的不断活跃,越来越多的系统会采用Dubbo!早学晚学都要学,为了升职加薪,趁着现在赶紧学! PS:Dubbo很重要吗?是的!真的很重要,只要你去面试,如果面试官不问你Dubbo,我可以给你说,这个面试官就不是一个合格的面试官! Dubbo官网地址,中文的哦! http://dubbo.apache.org/zh-cn/index.html 六、Spring Cloud Alibaba什么鬼? 最近的一个关于Spring Cloud的热门事件就是Spring Cloud for Alibaba了!Spring Cloud 发布了Spring Cloud Alibaba首个预览版本:Spring Cloud for Alibaba 0.2.0! 项目地址: https://github.com/spring-cloud-incubator/spring-cloud-alibaba Spring Cloud for Alibaba是由一些阿里巴巴的开源组件和云产品组成的。这个项目的目的是为了让大家熟知的Spring框架其优秀的设计模式和抽象理念,以给使用阿里巴巴产品的Java开发者带来使用Spring Boot和Spring Cloud的更多便利。 简介和主要功能 主要组件 后续计划 鉴于目前Spring Cloud集成的只有Kafka和RabbitMQ这些消息队列,后续将会逐渐集成RocketMQ,SchedulerX以及SLS等也会逐渐考虑进去! Spring Cloud Alibaba项目将于2019年从孵化器毕业,届时会正式加入Spring Cloud 正式版本轨道上来!我们也会更加舒服的敲代码! 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

优秀的个人博客,低调大师

这个双11,阿里云专有云携手中国邮政特快号再出发!

摘要又一年双十一大考,专有云再一次平稳支持中国邮政寄递业务,平台支撑订单量创下亿级订单量新高,是去年同期订单量的5倍! 中国邮政速递物流股份有限公司(简称中国邮政速递物流)是中国经营历史最悠久、规模最大、网络覆盖范围最广、业务品种最丰富的快递物流综合服务提供商。其在国内31个省(自治区、直辖市)设立分支机构,并拥有中国邮政航空有限责任公司、中邮物流有限责任公司等子公司。截止2017年底,中国邮政业务范围遍及全国31个省(自治区、直辖市)的所有市县乡(镇),通达包括港、澳、台地区在内的全球200余个国家和地区,自营营业网点超过5千个。 2015年初,中国邮政确定了“一体两翼”经营发展战略,即以依托窗口资源、线上线下相结合的综合便民服务平台为主体,以金融和包裹寄递业务为两翼,形成“一体两翼”齐头并进的经营发展新格局,努力将中国邮政建设成为

优秀的个人博客,低调大师

双11数据大屏背后:大规模流式增量计算及应用(附资料)

首先从理解什么是数据流开始今天的分享,其实在真实的世界中,大部分的数据都是连续产生的数据流,比如手机上产生的GPS信号、用户在互联网上的行为、在线搜索、用户的点击、社交网络分享、即时通信以及一些传感器和物联网设备采集的日志信息等,这些数据都是连续产生的,自然就形成了数据流,在这些数据流产生以后,在很多场景下对于数据流的实时分析就会产生很大的价值。 接下来从大家比较熟悉的数据场景切入,比如大家经常会关注的股市情况,股价的波动其实就是实时数据的分析和聚合,除此之外大家在日常生活中还可能比较关心天气预报,可能会根据实时的信息来看比如当前的台风的情况,这些都是大家习以为常的,也已经深入大家生活的实时数据分析。 而随着实时数据源的越来越多,实时数据的规模也越来越大,可以应用的场景也越来越多,实时数据的应用也正在往更多的领域深入。比如像每年的天猫

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册