SpringCloud微服务架构
1、Eureka承载大规模系统每天千万级访问的原理
1)、首先每个服务的eureka client组件默认30秒发送一个请求到eureka server拉取最近有变化的服务信息;
2)、eureka还有一个心跳机制,各个eureka client每隔30秒会发送一个心跳到eureka server告诉eureka server该client还活着,如果client很长时间没有发送心跳,说明该服务挂了。所以在手动(非自动化)部署项目的时候,我们得先杀掉准备部署的项目的进程(重启某服务,非启动某服务),再部署。 因为eureka server默认该服务还存在,未杀死进程就重启项目,则会端口冲突;
3)、eureka server注册表的核心结构是cocurrentHashMap结构,并且基于纯内存,在内存中维护Map数据结构。 各个服务的注册、服务下线、服务故障都会在内存中维护和更新这个注册表;
4)、eureka server 的多级缓存机制。拉去注册表3级缓存:首先从readOnlyCacheMap里面查缓存的注册表,没有就从readWriteCacheMap里查缓存的注册表,再没有就从内存中查询。 这样尽可能保证了内存注册表数据不会出现频繁的读写冲突问题,进一步保证了eureka server的大量请求,都是快速从纯内存中走,性能极高。
2、微服务注册中心(Eureka、Consul)的读写锁优化
读写锁:一个锁可以拆分为读锁和写锁。加锁的时候遵循数据改动则不能使锁冲突(包括同类型锁)的原则,例如同一时间一个线程就只能加一个写锁、同时有线程加了写锁,其他线程就不能加读锁等等(遵循原则)。
服务中心的注册表,记录了各个服务注册时,发送来的地址信息。服务A(服务实例1:192.168.1.1:8081,服务实例2:192.168.1.3:8081)、服务B(服务实例1:192.168.1.5:8081,服务实例2:192.168.1.6:8081)。
该注册表会写和读都发生。如果不对同一个内存加保护,就可能发生多线程并发修改共享数据的问题。如果加synchronized让所有读写都串行化,则效率会很低。 所以读写锁是非常适合这种读多写少的场景(微服务的读多写少)。并且加上多级缓存机制,可以在写数据的时候读数据。
参考:石杉的架构日志、纯洁的微笑(公众号)
SpringCloud微服务架构的更多相关文章
- Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理
Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...
- Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...
- SpringCloud微服务架构和SOA架构
1,传统的三层架构 在传统的架构中,SSH,SSM,主要分为web 控制层,业务逻辑层,数据库访问层,单点项目,项目没有拆分,所有的开发任务全部写在一个项目中,耦合度比价高,如果程序中的一个功能出现了 ...
- SpringCloud微服务架构分布式组件如何共享session对象
一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...
- 关于SpringCloud微服务架构概念的一点理解
目前微服务是非常火的架构或者说概念,也是在构建大型互联网项目时采用的架构方式. 1.单体架构单体架构,是指将开发好的项目打成war包,然后发布到tomcat等容器中的应用. 假设你正准备开发一款与Ub ...
- springcloud微服务架构搭建
SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...
- Rest构建分布式 SpringCloud微服务架构项目
一.开发环境:jdk 1.8.Maven 3.x.IDEA 2019.1.4.SpringBoot 2.0.7.spring Cloud 最新的稳定版 Finchley SR2 搭配 ...
- SpringCloud微服务架构升级总结
一.背景 1.1 应用系统的架构历史 1.2 什么是微服务? 起源:微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”.文中内容提到:微服 ...
随机推荐
- TFS2015创建项目
1,在TFS服务器上的团队项目集合中创建集合 2,创建集合完毕后,在VS2017中选择管理连接,创建对应的管理连接. 3,团队资源管理器中新建团队项目.后续就是下一步,下一步完成.帐号权限 ...
- jquery的data、attr、expando
今天无意中遇到 data和 attr的问题 场景是这样 需要给一个标签赋值,data-skin 同事用data赋值 $("#div").data("skin", ...
- Caused by: java.lang.IllegalStateException: RedisConnectionFactory is required
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisTemplat ...
- python调用函数超时设置
1.Windows中sign报错,Linux能很好的使用: https://pypi.python.org/pypi/timeout-decorator 2.Windows可以使用,Linux报错不能 ...
- css居中,margin_and_position
首先父元素肯定是要相对定位的,其次我们上下左右居中的元素的css如下: width: 50px; height: 50px; margin: auto; position: absolute; lef ...
- angular之指令
指令(Directive) 1.指令概念介绍 -- AngularJS有一套完整的.可扩展的.用来帮助web应用开发的指令集. -- 在DOM编译期间和HTML关联着的指令会被检测到,并且 会被执 ...
- Android 博客导航
Android 博客导航 一. 基础知识 Android 常用知识点 Android 常见问题解决 Android 常用控件 控件常用属性 Material Design 常用控件 二.常用知识点 动 ...
- 05解决flask循环引用的问题
1, 什么是循环引用问题?为什么会导致循环引用? 1.1先讲是什么? 主文件中class类过多会导致主文件冗余,如下图,所以我们单独给class类一个文件,然后再引用它. 1.2再讲为什么? 主文件为 ...
- 使用anaconda创建tensorflow环境后如何在jupyter notebook中使用
在以下目录中 C:\Users\UserName\AppData\Roaming\jupyter\kernels\python3 打开kernel.json文件,将python.exe文件的路径修改至 ...
- mvc 路由配置
1.URL模式 路由系统用一组路由来实现它的功能,这些路由共同组成了应用系统URL架构或方案,这种URL架构是应用程序能够识别并能对之做出响应的一组URL,当处理一个输入 请求时,路由系统的工作是将这 ...