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”.文中内容提到:微服 ...
随机推荐
- 原生js添加博客点击鼠标出小心心效果~~
昨天刚申请成功JS权限,心血来潮想添加点东西,记得之前看到别人家博客首页点击鼠标的时候会出现炫酷的 “小心心”,自己也来搞一个.没有用jquery啥的框架,原生js写起来麻烦了点,不过主要是怕博客首页 ...
- ES6的 let const 以及块级作用域
let声明变量 用法类似于var,但是所声明的变量只在let所在的代码块内有效. 1 . 在ES6环境下,let声明的变量不能在声明之前调用. 例: console.log(i); //会报错,这叫做 ...
- SQL Server 获取 ActiveDirectory 用户信息
SQL Server 是可以访问活动目录中的用户信息的. 1. 先用domain administrator建立一个linked server 2. 然后用OpenQuery去查询活动目录 大家可 ...
- 关于eclipse使用thymeleaf时,提示标签不显示及后续问题的解方法
因为thymeleaf 使用快捷键提示,不提示标签信息. 在使用网上说的的install new software安装插件的时候 报错: Unable to read repository at ht ...
- URL控制器
自定义路由 from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^books/$', view ...
- 下载Spring4.3.18.RELEASE的官方文档
wget -p --page-requisites --convert-links -P /root/spring https://docs.spring.io/spring/docs/4.3.18. ...
- 20181115 python-第一章学习小结part3
第一章,基本数据类型-------仅学三种,字符型,数字型,布尔型 仅学三种数据类型: 字符型,加了引号的都可以被认为是字符串,字符串可以拼接 数字型,int,float,long三种,可以进行运算 ...
- JS 存储
1. 描述cookie ,sessionStorage 和 localStorage 的区别? cookie : 本身用于客户端和服务器端通信, 但是有本身存储的功能,就被‘借用’ 使用documen ...
- python学习笔记(3)
.................................................................................................... ...
- 读取 ini 配置文件
ini 配置文件格式:db_config.ini '''[section]option=value''' [DATABASE1] host=192.168.30.80 port= user=testa ...