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”.文中内容提到:微服 ...
随机推荐
- Ubuntu18.10 安装和使用MySQL
https://blog.csdn.net/weixx3/article/details/80782479 sudo apt-get updatesudo apt-get install mysql- ...
- centos7系列Cobbler+kickstart全自动装机实战
配置yum源,以及epel源 [root@crobbler-90111 ~]# cat /etc/yum.repos.d/aliyun.repo [epel] name=ailiyun baseurl ...
- Archiver 3 for Mac(解压缩工具) ,想压缩解压慢一点就这么难!
Archiver 3 for Mac是一款分割合并解压缩工具,简单实用且功能齐全,你只需简单的拖放文件就可以进行压缩,还可以设定解压密码,从而保护自己的隐私.如果文件很大你还可以切割文件.Archiv ...
- 2018-2019-3 网络对抗技术 20165235 Exp3 免杀原理与实践
2018-2019-3 网络对抗技术 20165235 Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 1.对某个文件的特征码进行分析,(特征码就是一类恶意文件中经常出现的一段代 ...
- 第三次作业-结对编程(wordcount)
GIT地址 https://github.com/gentlemanzq/WordCount.git GIT用户名 gentlemanzq 结对伙伴博客地址 https://home.cnblogs ...
- VS Code做项目的笔记
需要自己研究的东西:http://www.bootcss.com/ 画页面时的布局插件:http://blog.chinaunix.net/uid-22414998-id-2878529.html v ...
- 变量前缀__device__以及__managed__
1.__device__ 作为变量前缀时,__device__限定符声明位于设备上的变量.如果此限定符单独使用,则变量具有以下特征: a.位于全局存储器空间中: b.与应用程序具有相同的生命周期: 可 ...
- SQL功能分类
DDL 数据定义语言:创建表 ,库,列 DML 数据操作语言:用来操作数据库中的记录 DQL 数据查询语言 :用来查询数据 DCL 数据控制语言:定义访问权限和安全级别 —————————————— ...
- [NodeJs Windows编译学习]
https://blog.csdn.net/gesturexiaoxin/article/details/80162944
- Nginx如何对日志文件进行配置?
在我们日常工作开发中,对调试bug最重要的手段就是查看日志和断点调试了. 今天我们来说日志文件,Nginx的日志文件一般保存的是访问日志和错误日志. 1. 用来log_format指令设置日志格式 l ...